check-my-toolkit 1.5.4 → 1.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,18 @@
1
+ /** File extensions with known comment syntax */
2
+ export declare const KNOWN_EXTENSIONS: Set<string>;
3
+ /**
4
+ * Find the first pattern that appears in the given text range.
5
+ */
6
+ export declare function findFirstPattern(text: string, patterns: string[]): string | null;
7
+ /**
8
+ * Find where a block comment ends in a line. Returns -1 if not found.
9
+ */
10
+ export declare function findBlockEnd(line: string, startIndex: number): number;
11
+ /**
12
+ * Find comment start in a line, respecting string boundaries.
13
+ */
14
+ export declare function findCommentInLine(line: string, startPos: number, isPython: boolean): {
15
+ index: number;
16
+ isBlock: boolean;
17
+ } | null;
18
+ //# sourceMappingURL=comment-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment-utils.d.ts","sourceRoot":"","sources":["../../../src/code/tools/comment-utils.ts"],"names":[],"mappings":"AAOA,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,aAA4C,CAAC;AAgB1E;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAOhF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGrE;AAoED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAgB5C"}
@@ -0,0 +1,113 @@
1
+ /** File extensions with known comment syntax */
2
+ export const KNOWN_EXTENSIONS = new Set(["py", "ts", "tsx", "js", "jsx"]);
3
+ /**
4
+ * Check if a character at the given index starts a block comment.
5
+ */
6
+ function isBlockCommentStart(line, index) {
7
+ return line[index] === "/" && line[index + 1] === "*";
8
+ }
9
+ /**
10
+ * Check if a character at the given index starts a line comment.
11
+ */
12
+ function isLineCommentStart(line, index) {
13
+ return line[index] === "/" && line[index + 1] === "/";
14
+ }
15
+ /**
16
+ * Find the first pattern that appears in the given text range.
17
+ */
18
+ export function findFirstPattern(text, patterns) {
19
+ for (const pattern of patterns) {
20
+ if (text.includes(pattern)) {
21
+ return pattern;
22
+ }
23
+ }
24
+ return null;
25
+ }
26
+ /**
27
+ * Find where a block comment ends in a line. Returns -1 if not found.
28
+ */
29
+ export function findBlockEnd(line, startIndex) {
30
+ const idx = line.indexOf("*/", startIndex);
31
+ return idx === -1 ? -1 : idx + 2;
32
+ }
33
+ /**
34
+ * Check if a quote character can be toggled given current state.
35
+ */
36
+ function canToggle(char, target, state, isPython) {
37
+ if (char !== target) {
38
+ return false;
39
+ }
40
+ if (target === "'") {
41
+ return !state.double && !state.template;
42
+ }
43
+ if (target === '"') {
44
+ return !state.single && !state.template;
45
+ }
46
+ return !isPython && !state.single && !state.double; // backtick
47
+ }
48
+ /**
49
+ * Update quote state based on current character.
50
+ */
51
+ function updateQuotes(char, prev, state, isPython) {
52
+ if (prev === "\\") {
53
+ return;
54
+ }
55
+ if (canToggle(char, "'", state, isPython)) {
56
+ state.single = !state.single;
57
+ }
58
+ else if (canToggle(char, '"', state, isPython)) {
59
+ state.double = !state.double;
60
+ }
61
+ else if (canToggle(char, "`", state, isPython)) {
62
+ state.template = !state.template;
63
+ }
64
+ }
65
+ /**
66
+ * Check if currently inside a string based on quote state.
67
+ */
68
+ function inString(state) {
69
+ return state.single || state.double || state.template;
70
+ }
71
+ /**
72
+ * Check for comment marker at position, return type or null.
73
+ */
74
+ function getCommentAt(line, i, isPython) {
75
+ if (isPython) {
76
+ return line[i] === "#" ? { isBlock: false } : null;
77
+ }
78
+ if (isLineCommentStart(line, i)) {
79
+ return { isBlock: false };
80
+ }
81
+ if (isBlockCommentStart(line, i)) {
82
+ return { isBlock: true };
83
+ }
84
+ return null;
85
+ }
86
+ /**
87
+ * Build quote state for a line up to the given position.
88
+ */
89
+ function buildQuoteState(line, endPos, isPython) {
90
+ const quotes = { single: false, double: false, template: false };
91
+ for (let i = 0; i < endPos; i++) {
92
+ updateQuotes(line[i], line[i - 1] || "", quotes, isPython);
93
+ }
94
+ return quotes;
95
+ }
96
+ /**
97
+ * Find comment start in a line, respecting string boundaries.
98
+ */
99
+ export function findCommentInLine(line, startPos, isPython) {
100
+ const quotes = buildQuoteState(line, startPos, isPython);
101
+ for (let i = startPos; i < line.length; i++) {
102
+ updateQuotes(line[i], line[i - 1] || "", quotes, isPython);
103
+ if (inString(quotes)) {
104
+ continue;
105
+ }
106
+ const comment = getCommentAt(line, i, isPython);
107
+ if (comment) {
108
+ return { index: i, isBlock: comment.isBlock };
109
+ }
110
+ }
111
+ return null;
112
+ }
113
+ //# sourceMappingURL=comment-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment-utils.js","sourceRoot":"","sources":["../../../src/code/tools/comment-utils.ts"],"names":[],"mappings":"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"}
@@ -16,60 +16,27 @@ export declare class DisableCommentsRunner extends BaseToolRunner {
16
16
  readonly toolId = "disable-comments";
17
17
  readonly configFiles: string[];
18
18
  private config;
19
- /**
20
- * Set the configuration for this runner
21
- */
22
19
  setConfig(config: DisableCommentsConfig): void;
23
- /**
24
- * Get the patterns to search for
25
- */
26
20
  private getPatterns;
27
- /**
28
- * Get the file extensions to scan
29
- */
30
21
  private getExtensions;
31
- /**
32
- * Get the exclude patterns
33
- */
34
22
  private getExcludePatterns;
35
- /**
36
- * Build glob pattern for file extensions
37
- */
38
23
  private buildGlobPattern;
39
24
  run(projectRoot: string): Promise<CheckResult>;
40
- /**
41
- * Scan files for disable comment patterns
42
- */
43
- private scanFiles;
44
- /** File extensions with known comment syntax */
45
- private static readonly KNOWN_EXTENSIONS;
46
- /** Check if we can toggle a specific quote type */
47
- private canToggleQuote;
48
- /** Quote tracking state for string detection */
49
- private updateQuoteState;
50
- /** Check if character is a comment marker */
51
- private isCommentMarker;
52
- /**
53
- * Find the start of a comment in a line, ignoring comment markers inside strings.
54
- * Returns the index of the comment start, or -1 if no comment found.
55
- */
56
- private findCommentStart;
57
- /**
58
- * Check if a pattern appears in a comment (not in a string)
59
- */
60
- private isPatternInComment;
61
- /**
62
- * Scan a single file for disable comment patterns
63
- */
25
+ private scanAllFiles;
64
26
  private scanFile;
65
- /**
66
- * Create a violation for a found disable comment
67
- */
27
+ private scanContent;
28
+ private scanLine;
29
+ private scanSimpleLine;
30
+ private scanJsLine;
31
+ private processJsLineComments;
32
+ private handleInsideBlock;
33
+ private handleOutsideBlock;
34
+ private handleLineComment;
35
+ private handleBlockCommentStart;
36
+ /** Check if a pattern appears in a comment (not in a string) - for simple line detection */
37
+ private isPatternInComment;
68
38
  private createViolation;
69
39
  private createErrorViolation;
70
- /**
71
- * Audit - for disable comments, just verify config is valid
72
- */
73
40
  audit(_projectRoot: string): Promise<CheckResult>;
74
41
  }
75
42
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"disable-comments.d.ts","sourceRoot":"","sources":["../../../src/code/tools/disable-comments.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAoC3C,oDAAoD;AACpD,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AASD;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,cAAc;IACvD,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,MAAM,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAM;IAEpC,OAAO,CAAC,MAAM,CAA6B;IAE3C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;IAI9C;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUlB,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA4BpD;;OAEG;IACH,OAAO,CAAC,SAAS;IAajB,gDAAgD;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAA6C;IAErF,mDAAmD;IACnD,OAAO,CAAC,cAAc;IAkBtB,gDAAgD;IAChD,OAAO,CAAC,gBAAgB;IAUxB,6CAA6C;IAC7C,OAAO,CAAC,eAAe;IAQvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,OAAO,CAAC,QAAQ;IA6BhB;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACY,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAqBjE"}
1
+ {"version":3,"file":"disable-comments.d.ts","sourceRoot":"","sources":["../../../src/code/tools/disable-comments.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA0C3C,oDAAoD;AACpD,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AA8BD;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,cAAc;IACvD,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,MAAM,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAM;IAEpC,OAAO,CAAC,MAAM,CAA6B;IAE3C,SAAS,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;IAI9C,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,gBAAgB;IASlB,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAyBpD,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,qBAAqB;IAyB7B,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,uBAAuB;IAqC/B,4FAA4F;IAC5F,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,oBAAoB;IASb,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAoBjE"}
@@ -2,6 +2,7 @@ import * as fs from "node:fs";
2
2
  import * as path from "node:path";
3
3
  import { glob } from "glob";
4
4
  import { BaseToolRunner } from "./base.js";
5
+ import { findBlockEnd, findCommentInLine, findFirstPattern, KNOWN_EXTENSIONS, } from "./comment-utils.js";
5
6
  /** Default patterns to detect disable comments */
6
7
  const DEFAULT_PATTERNS = [
7
8
  // ESLint
@@ -42,36 +43,20 @@ export class DisableCommentsRunner extends BaseToolRunner {
42
43
  toolId = "disable-comments";
43
44
  configFiles = []; // No config file needed
44
45
  config = {};
45
- /**
46
- * Set the configuration for this runner
47
- */
48
46
  setConfig(config) {
49
47
  this.config = config;
50
48
  }
51
- /**
52
- * Get the patterns to search for
53
- */
54
49
  getPatterns() {
55
50
  return this.config.patterns ?? DEFAULT_PATTERNS;
56
51
  }
57
- /**
58
- * Get the file extensions to scan
59
- */
60
52
  getExtensions() {
61
53
  return this.config.extensions ?? DEFAULT_EXTENSIONS;
62
54
  }
63
- /**
64
- * Get the exclude patterns
65
- */
66
55
  getExcludePatterns() {
67
56
  return [...DEFAULT_EXCLUDE, ...(this.config.exclude ?? [])];
68
57
  }
69
- /**
70
- * Build glob pattern for file extensions
71
- */
72
58
  buildGlobPattern() {
73
59
  const extensions = this.getExtensions();
74
- // Deduplicate extensions to avoid glob pattern issues
75
60
  const unique = [...new Set(extensions)];
76
61
  if (unique.length === 1) {
77
62
  return `**/*.${unique[0]}`;
@@ -81,17 +66,15 @@ export class DisableCommentsRunner extends BaseToolRunner {
81
66
  async run(projectRoot) {
82
67
  const startTime = Date.now();
83
68
  try {
84
- const pattern = this.buildGlobPattern();
85
- const ignorePatterns = this.getExcludePatterns();
86
- const files = await glob(pattern, {
69
+ const files = await glob(this.buildGlobPattern(), {
87
70
  cwd: projectRoot,
88
- ignore: ignorePatterns,
71
+ ignore: this.getExcludePatterns(),
89
72
  nodir: true,
90
73
  });
91
74
  if (files.length === 0) {
92
75
  return this.pass(Date.now() - startTime);
93
76
  }
94
- const violations = this.scanFiles(projectRoot, files);
77
+ const violations = this.scanAllFiles(projectRoot, files);
95
78
  return this.fromViolations(violations, Date.now() - startTime);
96
79
  }
97
80
  catch (error) {
@@ -99,132 +82,176 @@ export class DisableCommentsRunner extends BaseToolRunner {
99
82
  return this.fail([this.createErrorViolation(`Disable comments check error: ${message}`)], Date.now() - startTime);
100
83
  }
101
84
  }
102
- /**
103
- * Scan files for disable comment patterns
104
- */
105
- scanFiles(projectRoot, files) {
85
+ scanAllFiles(projectRoot, files) {
106
86
  const violations = [];
107
87
  const patterns = this.getPatterns();
108
88
  for (const file of files) {
109
89
  const filePath = path.join(projectRoot, file);
110
- const fileViolations = this.scanFile(file, filePath, patterns);
111
- violations.push(...fileViolations);
90
+ violations.push(...this.scanFile(filePath, { file, patterns, inBlockComment: false }));
112
91
  }
113
92
  return violations;
114
93
  }
115
- /** File extensions with known comment syntax */
116
- static KNOWN_EXTENSIONS = new Set(["py", "ts", "tsx", "js", "jsx"]);
117
- /** Check if we can toggle a specific quote type */
118
- canToggleQuote(quoteChar, char, state, isPython) {
119
- if (char !== quoteChar) {
120
- return false;
94
+ scanFile(absolutePath, ctx) {
95
+ try {
96
+ const content = fs.readFileSync(absolutePath, "utf-8");
97
+ return this.scanContent(content, ctx);
121
98
  }
122
- if (quoteChar === "'") {
123
- return !state.double && !state.template;
99
+ catch {
100
+ return []; // Skip unreadable files
124
101
  }
125
- if (quoteChar === '"') {
126
- return !state.single && !state.template;
102
+ }
103
+ scanContent(content, ctx) {
104
+ const lines = content.split("\n");
105
+ const ext = path.extname(ctx.file).slice(1).toLowerCase();
106
+ const violations = [];
107
+ let inBlock = ctx.inBlockComment;
108
+ for (let i = 0; i < lines.length; i++) {
109
+ const params = {
110
+ line: lines[i],
111
+ lineNum: i + 1,
112
+ ext,
113
+ patterns: ctx.patterns,
114
+ };
115
+ const result = this.scanLine(params, inBlock);
116
+ if (result.violation) {
117
+ violations.push(this.createViolation(ctx.file, result.violation));
118
+ }
119
+ inBlock = result.inBlockComment;
127
120
  }
128
- return !isPython && !state.single && !state.double; // backtick
121
+ return violations;
129
122
  }
130
- /** Quote tracking state for string detection */
131
- updateQuoteState(char, isPython, state) {
132
- if (this.canToggleQuote("'", char, state, isPython)) {
133
- state.single = !state.single;
123
+ scanLine(params, inBlock) {
124
+ const { ext } = params;
125
+ if (ext === "py" || !KNOWN_EXTENSIONS.has(ext)) {
126
+ return { violation: this.scanSimpleLine(params), inBlockComment: false };
134
127
  }
135
- else if (this.canToggleQuote('"', char, state, isPython)) {
136
- state.double = !state.double;
128
+ return this.scanJsLine(params, inBlock);
129
+ }
130
+ scanSimpleLine(params) {
131
+ const { line, lineNum, ext, patterns } = params;
132
+ for (const pattern of patterns) {
133
+ if (this.isPatternInComment(line, pattern, ext)) {
134
+ return { line: lineNum, pattern, content: line };
135
+ }
137
136
  }
138
- else if (this.canToggleQuote("`", char, state, isPython)) {
139
- state.template = !state.template;
137
+ return null;
138
+ }
139
+ scanJsLine(params, inBlock) {
140
+ const { line, lineNum, patterns } = params;
141
+ return this.processJsLineComments(line, lineNum, patterns, inBlock);
142
+ }
143
+ processJsLineComments(line, lineNum, patterns, inBlock) {
144
+ let state = { pos: 0, inBlock };
145
+ while (state.pos < line.length) {
146
+ const r = state.inBlock
147
+ ? this.handleInsideBlock(line, lineNum, patterns, state.pos)
148
+ : this.handleOutsideBlock(line, lineNum, patterns, state.pos);
149
+ if (r.done) {
150
+ return r.result;
151
+ }
152
+ state = { pos: r.nextPos, inBlock: r.enterBlock ?? false };
153
+ if (r.enterBlock) {
154
+ break;
155
+ }
140
156
  }
157
+ return { violation: null, inBlockComment: state.inBlock };
141
158
  }
142
- /** Check if character is a comment marker */
143
- isCommentMarker(line, index, isPython) {
144
- const char = line[index];
145
- if (isPython) {
146
- return char === "#";
159
+ handleInsideBlock(line, lineNum, patterns, pos) {
160
+ const blockEnd = findBlockEnd(line, pos);
161
+ const text = line.slice(pos, blockEnd === -1 ? line.length : blockEnd);
162
+ const pattern = findFirstPattern(text, patterns);
163
+ if (pattern) {
164
+ return {
165
+ done: true,
166
+ result: {
167
+ violation: { line: lineNum, pattern, content: line },
168
+ inBlockComment: blockEnd === -1,
169
+ },
170
+ nextPos: 0,
171
+ };
172
+ }
173
+ if (blockEnd === -1) {
174
+ return { done: true, result: { violation: null, inBlockComment: true }, nextPos: 0 };
147
175
  }
148
- return char === "/" && line[index + 1] === "/";
176
+ return { done: false, result: { violation: null, inBlockComment: false }, nextPos: blockEnd };
149
177
  }
150
- /**
151
- * Find the start of a comment in a line, ignoring comment markers inside strings.
152
- * Returns the index of the comment start, or -1 if no comment found.
153
- */
154
- findCommentStart(line, extension) {
155
- const isPython = extension === "py";
156
- const quoteState = { single: false, double: false, template: false };
157
- for (let i = 0; i < line.length; i++) {
158
- if (i > 0 && line[i - 1] === "\\") {
159
- continue;
160
- } // Skip escaped
161
- this.updateQuoteState(line[i], isPython, quoteState);
162
- const inString = quoteState.single || quoteState.double || quoteState.template;
163
- if (!inString && this.isCommentMarker(line, i, isPython)) {
164
- return i;
165
- }
178
+ handleOutsideBlock(line, lineNum, patterns, pos) {
179
+ const comment = findCommentInLine(line, pos, false);
180
+ if (!comment) {
181
+ return {
182
+ done: true,
183
+ result: { violation: null, inBlockComment: false },
184
+ nextPos: 0,
185
+ enterBlock: false,
186
+ };
187
+ }
188
+ if (!comment.isBlock) {
189
+ return this.handleLineComment(line, lineNum, patterns, comment.index);
166
190
  }
167
- return -1;
191
+ return this.handleBlockCommentStart(line, lineNum, patterns, comment.index);
168
192
  }
169
- /**
170
- * Check if a pattern appears in a comment (not in a string)
171
- */
193
+ handleLineComment(line, lineNum, patterns, index) {
194
+ const pattern = findFirstPattern(line.slice(index), patterns);
195
+ const result = pattern
196
+ ? { violation: { line: lineNum, pattern, content: line }, inBlockComment: false }
197
+ : { violation: null, inBlockComment: false };
198
+ return { done: true, result, nextPos: 0, enterBlock: false };
199
+ }
200
+ handleBlockCommentStart(line, lineNum, patterns, index) {
201
+ const blockEnd = findBlockEnd(line, index + 2);
202
+ const text = line.slice(index + 2, blockEnd === -1 ? line.length : blockEnd);
203
+ const pattern = findFirstPattern(text, patterns);
204
+ if (pattern) {
205
+ return {
206
+ done: true,
207
+ result: {
208
+ violation: { line: lineNum, pattern, content: line },
209
+ inBlockComment: blockEnd === -1,
210
+ },
211
+ nextPos: 0,
212
+ enterBlock: false,
213
+ };
214
+ }
215
+ if (blockEnd === -1) {
216
+ return {
217
+ done: false,
218
+ result: { violation: null, inBlockComment: true },
219
+ nextPos: 0,
220
+ enterBlock: true,
221
+ };
222
+ }
223
+ return {
224
+ done: false,
225
+ result: { violation: null, inBlockComment: false },
226
+ nextPos: blockEnd,
227
+ enterBlock: false,
228
+ };
229
+ }
230
+ /** Check if a pattern appears in a comment (not in a string) - for simple line detection */
172
231
  isPatternInComment(line, pattern, extension) {
173
- const patternIndex = line.indexOf(pattern);
174
- if (patternIndex === -1) {
232
+ if (!line.includes(pattern)) {
175
233
  return false;
176
234
  }
177
- // For unknown file types, fall back to simple string matching
178
- // This maintains backward compatibility for custom extensions like .md
179
- if (!DisableCommentsRunner.KNOWN_EXTENSIONS.has(extension)) {
235
+ if (!KNOWN_EXTENSIONS.has(extension)) {
180
236
  return true;
181
237
  }
182
- const commentStart = this.findCommentStart(line, extension);
183
- // Pattern is in a comment if comment starts at or before the pattern
184
- // Use <= because patterns like "# noqa" include the comment marker
185
- return commentStart !== -1 && commentStart <= patternIndex;
186
- }
187
- /**
188
- * Scan a single file for disable comment patterns
189
- */
190
- scanFile(relativePath, absolutePath, patterns) {
191
- const violations = [];
192
- try {
193
- const content = fs.readFileSync(absolutePath, "utf-8");
194
- const lines = content.split("\n");
195
- // Get file extension for comment detection
196
- const extension = path.extname(relativePath).slice(1).toLowerCase();
197
- for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
198
- const line = lines[lineIndex];
199
- const lineNumber = lineIndex + 1;
200
- for (const pattern of patterns) {
201
- // Only flag if pattern appears in an actual comment, not in a string
202
- if (this.isPatternInComment(line, pattern, extension)) {
203
- violations.push(this.createViolation(relativePath, lineNumber, pattern, line));
204
- break; // Only report first matching pattern per line
205
- }
206
- }
207
- }
208
- }
209
- catch {
210
- // Skip files that can't be read (binary, permission issues, etc.)
238
+ const comment = findCommentInLine(line, 0, extension === "py");
239
+ if (!comment) {
240
+ return false;
211
241
  }
212
- return violations;
242
+ const patternIndex = line.indexOf(pattern);
243
+ return comment.index <= patternIndex;
213
244
  }
214
- /**
215
- * Create a violation for a found disable comment
216
- */
217
- createViolation(file, line, pattern, lineContent) {
218
- // Trim and truncate the line content for the message
219
- const trimmedContent = lineContent.trim();
220
- const displayContent = trimmedContent.length > 60 ? `${trimmedContent.substring(0, 60)}...` : trimmedContent;
245
+ createViolation(file, data) {
246
+ const trimmed = data.content.trim();
247
+ const display = trimmed.length > 60 ? `${trimmed.substring(0, 60)}...` : trimmed;
221
248
  return {
222
249
  rule: `${this.rule}.${this.toolId}`,
223
250
  tool: this.toolId,
224
251
  file,
225
- line,
226
- message: `Found "${pattern}" comment: ${displayContent}`,
227
- code: pattern,
252
+ line: data.line,
253
+ message: `Found "${data.pattern}" comment: ${display}`,
254
+ code: data.pattern,
228
255
  severity: "error",
229
256
  };
230
257
  }
@@ -236,12 +263,8 @@ export class DisableCommentsRunner extends BaseToolRunner {
236
263
  severity: "error",
237
264
  };
238
265
  }
239
- /**
240
- * Audit - for disable comments, just verify config is valid
241
- */
242
266
  async audit(_projectRoot) {
243
267
  const startTime = Date.now();
244
- // Validate patterns if provided
245
268
  const patterns = this.getPatterns();
246
269
  if (patterns.length === 0) {
247
270
  return this.fail([
@@ -1 +1 @@
1
- {"version":3,"file":"disable-comments.js","sourceRoot":"","sources":["../../../src/code/tools/disable-comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,kDAAkD;AAClD,MAAM,gBAAgB,GAAG;IACvB,SAAS;IACT,gBAAgB;IAChB,qBAAqB;IACrB,0BAA0B;IAC1B,aAAa;IACb,YAAY;IACZ,kBAAkB;IAClB,aAAa;IACb,SAAS;IACT,QAAQ;IACR,gBAAgB;IAChB,mBAAmB;IACnB,oBAAoB;IACpB,WAAW;IACX,iBAAiB;CAClB,CAAC;AAEF,sCAAsC;AACtC,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAE5D,qCAAqC;AACrC,MAAM,eAAe,GAAG;IACtB,oBAAoB;IACpB,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,mBAAmB;IACnB,aAAa;IACb,YAAY;IACZ,gBAAgB;CACjB,CAAC;AAiBF;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,cAAc;IAC9C,IAAI,GAAG,kBAAkB,CAAC;IAC1B,IAAI,GAAG,cAAc,CAAC;IACtB,MAAM,GAAG,kBAAkB,CAAC;IAC5B,WAAW,GAAa,EAAE,CAAC,CAAC,wBAAwB;IAErD,MAAM,GAA0B,EAAE,CAAC;IAE3C;;OAEG;IACH,SAAS,CAAC,MAA6B;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,kBAAkB,CAAC;IACtD,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,OAAO,CAAC,GAAG,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,sDAAsD;QACtD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,WAAmB;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxC,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAEjD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;gBAChC,GAAG,EAAE,WAAW;gBAChB,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;YAC3C,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACzE,OAAO,IAAI,CAAC,IAAI,CACd,CAAC,IAAI,CAAC,oBAAoB,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC,EACvE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,WAAmB,EAAE,KAAe;QACpD,MAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/D,UAAU,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,gDAAgD;IACxC,MAAM,CAAU,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAErF,mDAAmD;IAC3C,cAAc,CACpB,SAAiB,EACjB,IAAY,EACZ,KAAiB,EACjB,QAAiB;QAEjB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1C,CAAC;QACD,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,WAAW;IACjE,CAAC;IAED,gDAAgD;IACxC,gBAAgB,CAAC,IAAY,EAAE,QAAiB,EAAE,KAAiB;QACzE,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC3D,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC3D,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnC,CAAC;IACH,CAAC;IAED,6CAA6C;IACrC,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,QAAiB;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,KAAK,GAAG,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;IACjD,CAAC;IAED;;;OAGG;IACK,gBAAgB,CAAC,IAAY,EAAE,SAAiB;QACtD,MAAM,QAAQ,GAAG,SAAS,KAAK,IAAI,CAAC;QACpC,MAAM,UAAU,GAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAEjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAClC,SAAS;YACX,CAAC,CAAC,eAAe;YAEjB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAErD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC;YAC/E,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACzD,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,IAAY,EAAE,OAAe,EAAE,SAAiB;QACzE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,8DAA8D;QAC9D,uEAAuE;QACvE,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAE5D,qEAAqE;QACrE,mEAAmE;QACnE,OAAO,YAAY,KAAK,CAAC,CAAC,IAAI,YAAY,IAAI,YAAY,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,YAAoB,EAAE,YAAoB,EAAE,QAAkB;QAC7E,MAAM,UAAU,GAAgB,EAAE,CAAC;QAEnC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAElC,2CAA2C;YAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAEpE,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;gBAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9B,MAAM,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC;gBAEjC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,qEAAqE;oBACrE,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;wBACtD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;wBAC/E,MAAM,CAAC,8CAA8C;oBACvD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,eAAe,CACrB,IAAY,EACZ,IAAY,EACZ,OAAe,EACf,WAAmB;QAEnB,qDAAqD;QACrD,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,cAAc,GAClB,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC;QAExF,OAAO;YACL,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YACnC,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,IAAI;YACJ,IAAI;YACJ,OAAO,EAAE,UAAU,OAAO,cAAc,cAAc,EAAE;YACxD,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,OAAO;SAClB,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,OAAe;QAC1C,OAAO;YACL,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YACnC,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,OAAO;YACP,QAAQ,EAAE,OAAO;SAClB,CAAC;IACJ,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,KAAK,CAAC,YAAoB;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,gCAAgC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,IAAI,CACd;gBACE;oBACE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;oBACnC,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,yCAAyC;oBAClD,QAAQ,EAAE,OAAO;iBAClB;aACF,EACD,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CACvB,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;IAC3C,CAAC"}
1
+ {"version":3,"file":"disable-comments.js","sourceRoot":"","sources":["../../../src/code/tools/disable-comments.ts"],"names":[],"mappings":"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"}