Repository navigation
v0.9.6 - Self-Test FP-Reduction (43% Noise weniger) + Perf-Optimierungen
Highlights
Dogfooding-Workflow eingefuehrt: analyser.exe --path . --full --profile selftest-quiet --report-html sca-selftest.html triagiert das eigene Repo. Siehe HowTo_DetectorSelftest.md.
False-Positive-Reduction: 12 200 -> 6 917 Findings (-43%), Errors 37 -> 5 (-86%)
Acht Triage-Runden gegen das eigene Repo, jeder Detector-Fix mit struktureller Begruendung dokumentiert in Todo_FalsePositiveReduction.md Section D.
Detector-Fixes (16 Detektoren plus Parser)
- uHardcodedSecret (SCA004): Meta-Felder (
SourceToken/PasswordChar/TokenRef) skippen - uRestHttpSecurity (SCA116): TLS-Pattern auf string-stripped Code (kein Self-Match in Fix-Templates)
- uSqlDangerousStatement (SCA058):
:=im Literal -> Pascal-Code-Zitat, kein SQL - uFormatMismatch (SCA005):
IsInsideStringLiteral-Guard - uUseAfterFree (SCA134): Sibling-Free-Guard fuer if/else-Pattern
- uFieldName (SCA103): Default-Visibility ist
published(TForm/TFrame/TDataModule) - eliminierte ~3000 FPs - uRedundantJump (SCA080): Look-Ahead - nur flaggen wenn nach
end;Block-Terminator - eliminierte ~900 FPs - uUnusedRoutine (SCA164):
MaxLineOfstattNextStartAfterfuer Self-Call-Range - uPublicField (SCA089): Multi-line Method-Header-Continuation + Section-Boundaries
- uGroupedDeclaration (SCA076): ParenDepth-Filter - Param-Listen idiomatisch, nicht geflaggt
- uCommentedOutCode (SCA070): Backtick-Code-Spans aus Doc-Kommentaren strippen
- uCanBeClassMethod (SCA148): Event-Handler-Signature (
Sender: TObject) -> Instance-Method bleiben - uLeakDetector2 (SCA001): Acquire/Release/Dispose/Return/Recycle-Pool-Pattern erkennen - eliminierte 65 FPs
- uExceptionTooGeneral (SCA078): Legit Top-Level-Handler (Log+Exit/Halt/Raise/Result-Assign)
- uUnusedLocal (SCA053): Source-Verify gegen Parser-Cleanup-Edge-Case
- uFreeWithoutNil (SCA139): Nur Felder flaggen - Locals fallen aus dem Scope - eliminierte 111 FPs
- uTodoComment (SCA019): Skip Pfad-Refs (
todo-sonar.md) - uMethodName (SCA106): DFM-Event-Handler-Skip
- uTypeName (SCA104): Exception-Klassen (
E*/*Error/*Exception) - uLockWithoutTryFinally (SCA109): Method-Header + Cache-Calls mit Args ausschliessen
- Parser uParser2.ParseForStmt: Loop-Variable in
for k := 1 to N dowird jetzt in TypeRef gejoint (war vorher aus AST verworfen)
Neue Infrastruktur
- Profile-Negation-Syntax:
[""*"", ""!Kind1"", ""-Kind2""]inrules/sca-rules.json - Bundled Profile
selftest-quiet: 11 Style-Detektoren ausgeblendet fuer fokussiertes Dogfooding - CLI-Flag
--report-html: Self-contained HTML Code-Review-Report (filter/sort/snippets) - HowTo_DetectorSelftest.md: Workflow-Dokumentation
Performance
Round 9 (commit 81749a0): 4 Hot-Path-Detektoren (uRestHttpSecurity, uPerfHotspots, uLockWithoutTryFinally, uUseAfterFree) compileren ihre Regex-Patterns nur noch EINMAL pro Prozess statt pro File. Gemessener Effekt: 3.0s -> 2.92s (-2.7% auf bereits sehr flotter Baseline).
Tests
Alle 1696 DUnit-Tests gruen. Zwei Tests an neues Verhalten angepasst:
uTestGroupedDeclaration.ParameterGrouped_Reported->_NotReporteduTestFreeWithoutNil.FreeWithoutNil_ReportedSRC von Local auf Field umgestellt
Version
Alle internen Version-Konstanten (uSCAConsts, uConsoleRunner, uIDEExpert, sca-rules.json, dproj VerInfo) jetzt einheitlich auf 0.9.6. Vorher waren drei verschiedene Versionen verstreut (0.9.1 / 0.9.3 / 0.9.5).
Vollstaendiger Changelog: v0.9.5...v0.9.6