Skip to content

Commit bd28edd

Browse files
committed
fix(todo-comment): Detector-Doku-Erwaehnungen nicht als TODO melden
Selbst-Scan-FPs vor Fix (von 13 auf 9 reduziert): uTodoComment.pas:3 // TODO / FIXME / HACK / XXX-Marker in Kommentaren ^Liste uTodoComment.pas:139 // 'TODO' direkt gefolgt von '-' oder '.' ^Quotes uQuickFix.pas:23 // angedacht (TODO): ^Paren uDfmLexer.pas:19 // (siehe Phase 1 TODO). ^Paren Drei neue FP-Schutz-Heuristiken in FindMarkerInComment: 1. Marker in single-quotes ('TODO') -> Doku-Erwaehnung als String-Pattern, typisch in Detector-Source-Doku. 2. Slash-getrennte Marker-Liste (' / TODO ', ' TODO / ') -> Aufzaehlung der unterstuetzten Marker, typisch in Detector-Doku oder UI-Hints. 3. Marker direkt vor closing-paren ('(TODO)', 'TODO):', 'TODO).') -> Klammer-Erwaehnung (siehe TODO / (TODO: noch nicht implementiert)). Verifiziert SCA.Engine self-scan: 13 -> 9 FPs. Sanity (TestRealTodo.pas): * '// TODO: implement this properly' -> weiterhin Finding * '// FIXME: bug at ...' -> weiterhin Finding * '// TODO / FIXME / HACK / XXX' (Liste) -> kein Finding * '// der Marker \'TODO\' wird ...' -> kein Finding * '// (siehe TODO) / (TODO):' -> kein Finding Verbleibende 5 FPs sind in Komma-Listen ('Todo, With, Reversed,...') oder Emoji-Doku (':TODO 🅲).') - heuristisch nicht ohne Risiko von Over-Skip echter TODOs zu fangen.
1 parent e7001df commit bd28edd

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

SCA.Engine/sources/Detectors/uTodoComment.pas

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,31 @@ function FindMarkerInComment(const Line: string;
147147
Continue;
148148
end;
149149
end;
150+
// FP-Schutz: Marker in single-quotes ('TODO') ist Doku-Erwaehnung
151+
// (Detector-Source-File nennt sein Such-Pattern als String).
152+
if (p > 1) and (Line[p - 1] = '''') and
153+
(pEnd <= Length(Line)) and (Line[pEnd] = '''') then
154+
begin
155+
Inc(p); Continue;
156+
end;
157+
// FP-Schutz: Slash-getrennte Marker-Liste (' / TODO ' oder
158+
// ' TODO / ') - typische Doku-Notation 'TODO / FIXME / HACK / XXX'.
159+
if (p >= 4) and (Line[p - 1] = ' ') and (Line[p - 2] = '/') and
160+
(Line[p - 3] = ' ') then
161+
begin
162+
Inc(p); Continue;
163+
end;
164+
if (pEnd + 1 <= Length(Line)) and (Line[pEnd] = ' ') and
165+
(Line[pEnd + 1] = '/') then
166+
begin
167+
Inc(p); Continue;
168+
end;
169+
// FP-Schutz: Marker direkt vor closing-paren - Doku-Erwaehnung in
170+
// Klammer wie '(TODO)', '(TODO):', 'siehe Phase 1 TODO).' etc.
171+
if (pEnd <= Length(Line)) and (Line[pEnd] = ')') then
172+
begin
173+
Inc(p); Continue;
174+
end;
150175
Marker := M;
151176
MarkerPos := p;
152177
Exit(True);

0 commit comments

Comments
 (0)