@mmnto/totem 1.101.0 → 1.101.2

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.
Files changed (43) hide show
  1. package/dist/chunkers/chunker-registry.d.ts.map +1 -1
  2. package/dist/chunkers/chunker-registry.js +5 -0
  3. package/dist/chunkers/chunker-registry.js.map +1 -1
  4. package/dist/chunkers/chunker-registry.test.d.ts +1 -1
  5. package/dist/chunkers/chunker-registry.test.js +6 -2
  6. package/dist/chunkers/chunker-registry.test.js.map +1 -1
  7. package/dist/chunkers/generic-chunker.d.ts +8 -0
  8. package/dist/chunkers/generic-chunker.d.ts.map +1 -0
  9. package/dist/chunkers/generic-chunker.js +82 -0
  10. package/dist/chunkers/generic-chunker.js.map +1 -0
  11. package/dist/chunkers/generic-chunker.test.d.ts +15 -0
  12. package/dist/chunkers/generic-chunker.test.d.ts.map +1 -0
  13. package/dist/chunkers/generic-chunker.test.js +129 -0
  14. package/dist/chunkers/generic-chunker.test.js.map +1 -0
  15. package/dist/config-schema.d.ts +1 -1
  16. package/dist/config-schema.d.ts.map +1 -1
  17. package/dist/config-schema.js +4 -0
  18. package/dist/config-schema.js.map +1 -1
  19. package/dist/regex-safety/apply-rules-bounded.d.ts.map +1 -1
  20. package/dist/regex-safety/apply-rules-bounded.js +37 -15
  21. package/dist/regex-safety/apply-rules-bounded.js.map +1 -1
  22. package/dist/rule-engine.d.ts +15 -13
  23. package/dist/rule-engine.d.ts.map +1 -1
  24. package/dist/rule-engine.js +320 -93
  25. package/dist/rule-engine.js.map +1 -1
  26. package/dist/rule-engine.test.js +319 -1
  27. package/dist/rule-engine.test.js.map +1 -1
  28. package/dist/spine/selection-rule.d.ts.map +1 -1
  29. package/dist/spine/selection-rule.js +3 -73
  30. package/dist/spine/selection-rule.js.map +1 -1
  31. package/dist/spine/windtunnel-firing.js +1 -1
  32. package/dist/spine/windtunnel-firing.js.map +1 -1
  33. package/dist/sys/git.js +1 -1
  34. package/dist/sys/git.js.map +1 -1
  35. package/dist/sys/glob.d.ts +10 -0
  36. package/dist/sys/glob.d.ts.map +1 -0
  37. package/dist/sys/glob.js +280 -0
  38. package/dist/sys/glob.js.map +1 -0
  39. package/dist/sys/glob.test.d.ts +2 -0
  40. package/dist/sys/glob.test.d.ts.map +1 -0
  41. package/dist/sys/glob.test.js +280 -0
  42. package/dist/sys/glob.test.js.map +1 -0
  43. package/package.json +1 -1
@@ -1,20 +1,20 @@
1
1
  import type { CompiledRule, DiffAddition, FailSoftAttestation, RuleEventCallback, Violation } from './compiler-schema.js';
2
+ import { fileMatchesGlobs, matchesGlob } from './sys/glob.js';
3
+ export { fileMatchesGlobs, matchesGlob };
2
4
  /**
3
- * Check if a file path matches a single glob pattern.
4
- * Supports: `*.ext`, `**\/*.ext`, `dir/**\/*.ext`, `dir/**`, literal filenames.
5
+ * Detect whether a rule is a production-only Rust rule.
6
+ * A rule is production-only Rust if it applies to `.rs` files and explicitly
7
+ * excludes tests, or does not explicitly target tests.
5
8
  */
6
- export declare function matchesGlob(filePath: string, glob: string): boolean;
9
+ export declare function isProductionRustRule(rule: CompiledRule): boolean;
7
10
  /**
8
- * Multi-glob file matcher with positive/negative split. Returns true when
9
- * `filePath` matches ANY positive glob AND no negative (`!`-prefixed) glob.
10
- * If `globs` contains no positive entries, every file is a positive match
11
- * by default and only the negative filter applies.
12
- *
13
- * Exported for cross-module reuse (Stage 4 verifier consolidation per
14
- * mmnto-ai/totem#1758) so both rule-engine classification and Stage 4
15
- * baseline classification share a single source of truth on glob semantics.
11
+ * Parses Rust content to find line ranges (spans) for inline `#[cfg(test)]` modules.
12
+ * Returns an array of `{ startLine: number; endLine: number }` representing the spans.
16
13
  */
17
- export declare function fileMatchesGlobs(filePath: string, globs: readonly string[]): boolean;
14
+ export declare function getRustTestSpans(content: string): {
15
+ startLine: number;
16
+ endLine: number;
17
+ }[];
18
18
  /** Injectable logger for core library diagnostics. */
19
19
  export interface CoreLogger {
20
20
  warn(message: string): void;
@@ -70,9 +70,11 @@ export declare function parseFailSoftAttestation(justification: string): FailSof
70
70
  * @param additions - The diff additions to evaluate.
71
71
  * @param onRuleEvent - Optional observability callback for metrics collection
72
72
  * on trigger / suppress / failure events.
73
+ * @param workingDirectory - Optional working directory for resolving files on disk
74
+ * when parsing spans.
73
75
  * @returns All regex-based violations found.
74
76
  */
75
- export declare function applyRulesToAdditions(ctx: RuleEngineContext, rules: CompiledRule[], additions: DiffAddition[], onRuleEvent?: RuleEventCallback): Violation[];
77
+ export declare function applyRulesToAdditions(ctx: RuleEngineContext, rules: CompiledRule[], additions: DiffAddition[], onRuleEvent?: RuleEventCallback, workingDirectory?: string): Violation[];
76
78
  /**
77
79
  * Apply AST-engine compiled rules against pre-extracted diff additions.
78
80
  * Handles both Tree-sitter S-expression ('ast') and ast-grep ('ast-grep') engines.
@@ -1 +1 @@
1
- {"version":3,"file":"rule-engine.d.ts","sourceRoot":"","sources":["../src/rule-engine.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,SAAS,EACV,MAAM,sBAAsB,CAAC;AAO9B;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAyEnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAQpF;AAWD,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE;QAAE,sBAAsB,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5C;AA0CD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAeT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,MAAM,CAaR;AAiBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAK1F;AA0GD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,EAAE,YAAY,EAAE,EACzB,WAAW,CAAC,EAAE,iBAAiB,GAC9B,SAAS,EAAE,CAqEb;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,EAAE,YAAY,EAAE,EACzB,gBAAgB,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC9B,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAC1D,OAAO,CAAC,SAAS,EAAE,CAAC,CAiQtB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,SAAS,EAAE,CAUb"}
1
+ {"version":3,"file":"rule-engine.d.ts","sourceRoot":"","sources":["../src/rule-engine.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,SAAS,EACV,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC;AAEzC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAkBhE;AAgCD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAiN1F;AAWD,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE;QAAE,sBAAsB,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5C;AA0CD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAeT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,MAAM,CAaR;AAiBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAK1F;AAwGD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,EAAE,YAAY,EAAE,EACzB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,GACxB,SAAS,EAAE,CAwGb;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,EAAE,YAAY,EAAE,EACzB,gBAAgB,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC9B,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAC1D,OAAO,CAAC,SAAS,EAAE,CAAC,CA2TtB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,SAAS,EAAE,CAUb"}
@@ -6,105 +6,251 @@ import { matchAstQueriesBatch } from './ast-query.js';
6
6
  import { extractAddedLines } from './diff-parser.js';
7
7
  import { TotemParseError } from './errors.js';
8
8
  import { detectStaleManifest, staleManifestError } from './stale-manifest.js';
9
- // ─── File glob matching ─────────────────────────────
9
+ import { fileMatchesGlobs, matchesGlob } from './sys/glob.js';
10
+ export { fileMatchesGlobs, matchesGlob };
10
11
  /**
11
- * Check if a file path matches a single glob pattern.
12
- * Supports: `*.ext`, `**\/*.ext`, `dir/**\/*.ext`, `dir/**`, literal filenames.
12
+ * Detect whether a rule is a production-only Rust rule.
13
+ * A rule is production-only Rust if it applies to `.rs` files and explicitly
14
+ * excludes tests, or does not explicitly target tests.
13
15
  */
14
- export function matchesGlob(filePath, glob) {
15
- // Normalize separators
16
- const normalized = filePath.replace(/\\/g, '/');
17
- // *.ext — match file extension anywhere
18
- if (glob.startsWith('*.')) {
19
- const suffix = glob.slice(1); // e.g., ".ts" or ".test.*"
20
- if (suffix.endsWith('.*')) {
21
- // *.test.* — match files with ".test." in the basename (not directory segments)
22
- const infix = suffix.slice(0, -1); // ".test."
23
- const basename = normalized.includes('/') // totem-context: this IS the glob matcher — slash check is intentional
24
- ? normalized.slice(normalized.lastIndexOf('/') + 1)
25
- : normalized;
26
- return basename.includes(infix);
27
- }
28
- return normalized.endsWith(suffix);
29
- }
30
- // **/<rest> — match `<rest>` against the full path AND every "/"-aligned
31
- // tail of the path. This handles BOTH `**/*.ts` (extension match anywhere,
32
- // historical use case) AND `**/dir/**` (directory match at any depth, the
33
- // case Stage 4 baselines need per mmnto-ai/totem#1758).
34
- if (glob.startsWith('**/')) {
35
- const rest = glob.slice(3);
36
- if (matchesGlob(normalized, rest))
37
- return true;
38
- for (let i = 0; i < normalized.length; i++) {
39
- if (normalized[i] === '/' && matchesGlob(normalized.slice(i + 1), rest))
40
- return true;
41
- }
16
+ export function isProductionRustRule(rule) {
17
+ if (!rule.fileGlobs || rule.fileGlobs.length === 0)
42
18
  return false;
43
- }
44
- // dir/**/*.ext or dir/** — directory-prefixed recursive glob
45
- const dstarIdx = glob.indexOf('/**/');
46
- if (dstarIdx > 0) {
47
- const prefix = glob.slice(0, dstarIdx);
48
- const suffix = glob.slice(dstarIdx + 4); // after "/**/"
49
- if (!normalized.startsWith(prefix + '/'))
50
- return false;
51
- const rest = normalized.slice(prefix.length + 1);
52
- return suffix === '' || matchesGlob(rest, suffix);
53
- }
54
- // dir/** — match anything under directory (no trailing pattern)
55
- if (glob.endsWith('/**')) {
56
- const prefix = glob.slice(0, -3);
57
- return normalized.startsWith(prefix + '/');
58
- }
59
- // dir/*.ext — single-star, non-recursive (matches files in exact directory)
60
- const singleStarIdx = glob.indexOf('/*.');
61
- // totem-ignore-next-line this IS the glob matcher
62
- if (singleStarIdx > 0 && !glob.includes('**')) {
63
- const prefix = glob.slice(0, singleStarIdx);
64
- const ext = glob.slice(singleStarIdx + 2); // "*.ext" portion
65
- if (!normalized.startsWith(prefix + '/'))
66
- return false;
67
- const rest = normalized.slice(prefix.length + 1);
68
- if (rest.includes('/'))
69
- return false; // totem-context: this IS the glob matcher — slash check is intentional
70
- // Handle trailing wildcard (e.g., dir/*.test.*)
71
- if (ext.endsWith('.*')) {
72
- const infix = ext.slice(0, -1); // ".test."
73
- return rest.includes(infix); // totem-ignore this IS the glob matcher
19
+ const hasRs = rule.fileGlobs.some((g) => typeof g === 'string' && !g.startsWith('!') && g.endsWith('.rs'));
20
+ if (!hasRs)
21
+ return false;
22
+ // If it explicitly excludes test files/folders, it's production-only
23
+ const excludesTests = rule.fileGlobs.some((g) => typeof g === 'string' && g.startsWith('!') && (g.includes('test') || g.includes('tests')));
24
+ if (excludesTests)
25
+ return true;
26
+ // Alternatively, if it does not explicitly include test files
27
+ const includesTests = rule.fileGlobs.some((g) => typeof g === 'string' && !g.startsWith('!') && (g.includes('test') || g.includes('tests')));
28
+ return !includesTests;
29
+ }
30
+ /**
31
+ * Consume a Rust block comment beginning at `start` (which MUST point at the
32
+ * slash of an open-comment marker). Rust block comments NEST, so a naive
33
+ * first-terminator scan (`indexOf` of the close marker) stops at the FIRST
34
+ * close marker and leaves the unconsumed tail — a `}` in that tail corrupts
35
+ * brace-depth tracking. This consumer increments depth on each nested open
36
+ * marker and decrements on each close marker, ending when depth returns to 0
37
+ * (the true comment end) or at EOF. Returns the index just past the final
38
+ * close marker (or `content.length` on an unterminated comment).
39
+ */
40
+ function skipRustBlockComment(content, start) {
41
+ let idx = start + 2; // past the two-char open-comment marker
42
+ let depth = 1;
43
+ while (idx < content.length) {
44
+ if (content[idx] === '/' && content[idx + 1] === '*') {
45
+ depth++;
46
+ idx += 2;
47
+ continue;
48
+ }
49
+ if (content[idx] === '*' && content[idx + 1] === '/') {
50
+ depth--;
51
+ idx += 2;
52
+ if (depth === 0)
53
+ return idx;
54
+ continue;
74
55
  }
75
- return rest.endsWith(ext); // totem-ignore — this IS the glob matcher
56
+ idx++;
76
57
  }
77
- // Literal-glob fallback. Two shapes carry different match contracts
78
- // (mmnto-ai/totem#1758 second hole):
79
- // - Bare filename (no `/`, e.g., "Dockerfile"): match anywhere in the
80
- // tree — `Dockerfile` should match `src/Dockerfile`.
81
- // - Path-shaped literal (contains `/`, e.g., "src/foo.ts"): repo-relative
82
- // path that MUST match exactly. The earlier suffix-match form
83
- // (`endsWith('/' + glob)`) caused `src/foo.ts` to spuriously match
84
- // `packages/src/foo.ts`. CR mmnto-ai/totem#1766 R1 surfaced this as
85
- // the matching pair to the `**/dir/**` recursion fix earlier in the
86
- // PR.
87
- // totem-context: detecting any slash in the glob string (mmnto-ai/totem#1758) — `.includes('/', 1)` would skip a leading slash, which is the opposite of the path-shape vs bare-filename distinction this branch needs.
88
- if (glob.includes('/'))
89
- return normalized === glob;
90
- return normalized === glob || normalized.endsWith('/' + glob);
58
+ return content.length;
91
59
  }
92
60
  /**
93
- * Multi-glob file matcher with positive/negative split. Returns true when
94
- * `filePath` matches ANY positive glob AND no negative (`!`-prefixed) glob.
95
- * If `globs` contains no positive entries, every file is a positive match
96
- * by default and only the negative filter applies.
97
- *
98
- * Exported for cross-module reuse (Stage 4 verifier consolidation per
99
- * mmnto-ai/totem#1758) so both rule-engine classification and Stage 4
100
- * baseline classification share a single source of truth on glob semantics.
61
+ * Parses Rust content to find line ranges (spans) for inline `#[cfg(test)]` modules.
62
+ * Returns an array of `{ startLine: number; endLine: number }` representing the spans.
101
63
  */
102
- export function fileMatchesGlobs(filePath, globs) {
103
- const positive = globs.filter((g) => !g.startsWith('!'));
104
- const negative = globs.filter((g) => g.startsWith('!')).map((g) => g.slice(1));
105
- const positiveMatch = positive.length === 0 || positive.some((g) => matchesGlob(filePath, g));
106
- const negativeMatch = negative.some((g) => matchesGlob(filePath, g));
107
- return positiveMatch && !negativeMatch;
64
+ export function getRustTestSpans(content) {
65
+ const spans = [];
66
+ // Regex to match #[cfg(test)] with any whitespace
67
+ const CFG_TEST_RE = /#\s*\[\s*cfg\s*\(\s*test\s*\)\s*\]/g;
68
+ let match;
69
+ while ((match = CFG_TEST_RE.exec(content)) !== null) {
70
+ const attributeIndex = match.index;
71
+ const startLine = content.slice(0, attributeIndex).split('\n').length;
72
+ // Scan forward from the end of the #[cfg(test)] attribute to find the mod block
73
+ let idx = attributeIndex + match[0].length;
74
+ let foundModBraceIdx = -1;
75
+ while (idx < content.length) {
76
+ const char = content[idx];
77
+ // Skip whitespace
78
+ if (/\s/.test(char)) {
79
+ idx++;
80
+ continue;
81
+ }
82
+ // Skip line comment
83
+ if (char === '/' && content[idx + 1] === '/') {
84
+ idx = content.indexOf('\n', idx);
85
+ if (idx === -1)
86
+ idx = content.length;
87
+ continue;
88
+ }
89
+ // Skip block comment (Rust block comments NEST — see skipRustBlockComment)
90
+ if (char === '/' && content[idx + 1] === '*') {
91
+ idx = skipRustBlockComment(content, idx);
92
+ continue;
93
+ }
94
+ // Skip other attributes like #[allow(...)]
95
+ if (char === '#') {
96
+ idx++;
97
+ while (idx < content.length) {
98
+ if (content[idx] === ']') {
99
+ idx++;
100
+ break;
101
+ }
102
+ idx++;
103
+ }
104
+ continue;
105
+ }
106
+ // Skip a visibility modifier — `#[cfg(test)] pub mod` / `pub(crate) mod`
107
+ // are valid test modules and must still be spanned.
108
+ if (content.slice(idx).startsWith('pub') && !/[A-Za-z0-9_]/.test(content[idx + 3] ?? '')) {
109
+ idx += 3;
110
+ while (idx < content.length && /\s/.test(content[idx]))
111
+ idx++;
112
+ if (content[idx] === '(') {
113
+ const close = content.indexOf(')', idx);
114
+ idx = close === -1 ? content.length : close + 1;
115
+ }
116
+ continue;
117
+ }
118
+ // Check for 'mod'
119
+ if (content.slice(idx).startsWith('mod') && /\s/.test(content[idx + 3] ?? '')) {
120
+ let braceIdx = idx + 3;
121
+ let isInlineMod = false;
122
+ while (braceIdx < content.length) {
123
+ const bChar = content[braceIdx];
124
+ // A `;` ends a non-inline `mod external;` declaration (no span);
125
+ // a `{` opens an inline module body.
126
+ if (bChar === ';') {
127
+ break;
128
+ }
129
+ if (bChar === '{') {
130
+ isInlineMod = true;
131
+ break;
132
+ }
133
+ braceIdx++;
134
+ }
135
+ // Only the inline case records a brace to scan from. The former
136
+ // `idx = braceIdx` / `idx = braceIdx + 1` / `idx++` assignments were
137
+ // dead stores (CodeQL) — the unconditional `break` below exits the
138
+ // scan loop and `idx` is never read afterward.
139
+ if (isInlineMod) {
140
+ foundModBraceIdx = braceIdx;
141
+ }
142
+ break;
143
+ }
144
+ // If we hit any other character, abort search for mod
145
+ break;
146
+ }
147
+ if (foundModBraceIdx !== -1) {
148
+ // Find matching closing curly brace
149
+ let depth = 1;
150
+ let braceScanIdx = foundModBraceIdx + 1;
151
+ let endLine = startLine;
152
+ while (braceScanIdx < content.length) {
153
+ const char = content[braceScanIdx];
154
+ // Skip line comment
155
+ if (char === '/' && content[braceScanIdx + 1] === '/') {
156
+ braceScanIdx = content.indexOf('\n', braceScanIdx);
157
+ if (braceScanIdx === -1)
158
+ braceScanIdx = content.length;
159
+ continue;
160
+ }
161
+ // Skip block comment (Rust block comments NEST — see skipRustBlockComment)
162
+ if (char === '/' && content[braceScanIdx + 1] === '*') {
163
+ braceScanIdx = skipRustBlockComment(content, braceScanIdx);
164
+ continue;
165
+ }
166
+ // Skip string literal. A quote terminates the string only when the run
167
+ // of backslashes immediately before it is EVEN (each pair is an escaped
168
+ // backslash); an ODD run means the quote itself is escaped. The naive
169
+ // `content[i-1] !== '\\'` check mis-reads a string ending in an escaped
170
+ // backslash (`"...\\"`) as unterminated, over-reading past the closing
171
+ // quote and swallowing braces (over-exemption — real violations after
172
+ // the module get suppressed).
173
+ if (char === '"') {
174
+ braceScanIdx++;
175
+ while (braceScanIdx < content.length) {
176
+ if (content[braceScanIdx] === '"') {
177
+ let backslashes = 0;
178
+ let b = braceScanIdx - 1;
179
+ while (b >= 0 && content[b] === '\\') {
180
+ backslashes++;
181
+ b--;
182
+ }
183
+ if (backslashes % 2 === 0) {
184
+ braceScanIdx++;
185
+ break;
186
+ }
187
+ }
188
+ braceScanIdx++;
189
+ }
190
+ continue;
191
+ }
192
+ // Skip raw string literal
193
+ if (char === 'r' &&
194
+ (content[braceScanIdx + 1] === '"' || content[braceScanIdx + 1] === '#')) {
195
+ let hashes = 0;
196
+ let p = braceScanIdx + 1;
197
+ while (p < content.length && content[p] === '#') {
198
+ hashes++;
199
+ p++;
200
+ }
201
+ if (content[p] === '"') {
202
+ const expectedEnd = `"${'#'.repeat(hashes)}`;
203
+ const endIdx = content.indexOf(expectedEnd, p + 1);
204
+ if (endIdx === -1) {
205
+ braceScanIdx = content.length;
206
+ }
207
+ else {
208
+ braceScanIdx = endIdx + expectedEnd.length;
209
+ }
210
+ continue;
211
+ }
212
+ }
213
+ // Char literal vs LIFETIME: a `'` opens a char literal only when it
214
+ // closes within the char grammar (`'x'`, `'\n'`, `'\u{7FFF}'`).
215
+ // Otherwise it is a lifetime (`'a`, `'static`) — consuming to the next
216
+ // apostrophe would swallow braces and corrupt depth tracking, producing
217
+ // an over-long span (over-EXEMPTION: real violations after the test
218
+ // module suppressed — the unsafe direction for a lint gate).
219
+ if (char === "'") {
220
+ if (content[braceScanIdx + 1] === '\\') {
221
+ // Escaped char literal — scan to its closing quote.
222
+ braceScanIdx += 2;
223
+ while (braceScanIdx < content.length && content[braceScanIdx] !== "'") {
224
+ braceScanIdx++;
225
+ }
226
+ braceScanIdx++;
227
+ }
228
+ else if (content[braceScanIdx + 2] === "'") {
229
+ // Plain char literal `'x'`.
230
+ braceScanIdx += 3;
231
+ }
232
+ else {
233
+ // Lifetime — consume only the tick; the identifier is ordinary code.
234
+ braceScanIdx++;
235
+ }
236
+ continue;
237
+ }
238
+ if (char === '{') {
239
+ depth++;
240
+ }
241
+ else if (char === '}') {
242
+ depth--;
243
+ if (depth === 0) {
244
+ endLine = content.slice(0, braceScanIdx).split('\n').length;
245
+ break;
246
+ }
247
+ }
248
+ braceScanIdx++;
249
+ }
250
+ spans.push({ startLine, endLine });
251
+ }
252
+ }
253
+ return spans;
108
254
  }
109
255
  // ─── Inline suppression ─────────────────────────────
110
256
  const SUPPRESS_MARKER = 'totem-ignore';
@@ -309,7 +455,6 @@ function resolveAstMatchSuppression(ctx, match, addition) {
309
455
  }
310
456
  return { suppressed: false, justification: '', attestation: null };
311
457
  }
312
- // ─── Regex rule execution ───────────────────────────
313
458
  /**
314
459
  * Apply compiled regex-engine rules against pre-extracted diff additions.
315
460
  * Skips additions with non-code AST context (strings, comments, regex).
@@ -322,14 +467,33 @@ function resolveAstMatchSuppression(ctx, match, addition) {
322
467
  * @param additions - The diff additions to evaluate.
323
468
  * @param onRuleEvent - Optional observability callback for metrics collection
324
469
  * on trigger / suppress / failure events.
470
+ * @param workingDirectory - Optional working directory for resolving files on disk
471
+ * when parsing spans.
325
472
  * @returns All regex-based violations found.
326
473
  */
327
- export function applyRulesToAdditions(ctx, rules, additions, onRuleEvent) {
474
+ export function applyRulesToAdditions(ctx, rules, additions, onRuleEvent, workingDirectory) {
328
475
  if (additions.length === 0 || rules.length === 0)
329
476
  return [];
330
477
  const violations = [];
331
478
  // Only process regex-engine rules — AST rules have pattern: '' which would match everything
332
479
  const regexRules = rules.filter((r) => r.engine === 'regex' || !r.engine);
480
+ const rustTestSpansCache = new Map();
481
+ const getRustSpansSync = (file, workDir) => {
482
+ if (rustTestSpansCache.has(file))
483
+ return rustTestSpansCache.get(file);
484
+ try {
485
+ const fullPath = path.resolve(workDir, file);
486
+ const content = fs.readFileSync(fullPath, 'utf-8');
487
+ const spans = getRustTestSpans(content);
488
+ rustTestSpansCache.set(file, spans);
489
+ return spans;
490
+ // totem-context: span-read failure yields no spans → no exemption → the rule still FIRES; the exemption fails toward flagging, never toward suppression.
491
+ }
492
+ catch {
493
+ rustTestSpansCache.set(file, []);
494
+ return [];
495
+ }
496
+ };
333
497
  for (const rule of regexRules) {
334
498
  let re;
335
499
  try {
@@ -365,6 +529,22 @@ export function applyRulesToAdditions(ctx, rules, additions, onRuleEvent) {
365
529
  continue;
366
530
  }
367
531
  if (re.test(addition.line)) {
532
+ // Exempt matches inside inline Rust test modules for production-only Rust rules
533
+ if (isProductionRustRule(rule)) {
534
+ const spans = getRustSpansSync(addition.file, workingDirectory || process.cwd());
535
+ const isExempt = spans.some((s) => addition.lineNumber >= s.startLine && addition.lineNumber <= s.endLine);
536
+ if (isExempt) {
537
+ // Emit a suppress event so metrics distinguish "matched but
538
+ // test-span-exempt" from "never matched" (#2397 / greptile P2).
539
+ onRuleEvent?.('suppress', rule.lessonHash, {
540
+ file: addition.file,
541
+ line: addition.lineNumber,
542
+ justification: 'exempt: inline #[cfg(test)] module span (#2397)',
543
+ immutable: rule.immutable,
544
+ });
545
+ continue;
546
+ }
547
+ }
368
548
  // Record context telemetry for ALL matches (code, string, comment, regex)
369
549
  onRuleEvent?.('trigger', rule.lessonHash, {
370
550
  file: addition.file,
@@ -508,11 +688,40 @@ export async function applyAstRulesToAdditions(ctx, rules, additions, workingDir
508
688
  addedLineNumbers,
509
689
  }));
510
690
  const batchResults = await matchAstQueriesBatch(file, queries, workingDirectory, onWarn, readStrategy);
691
+ // Rust test-span exemption (#2397): resolve spans ONCE per file — not
692
+ // per match — and only when some applicable rule is production-Rust.
693
+ let treeSitterRustSpans = [];
694
+ if (applicableTreeSitter.some(isProductionRustRule)) {
695
+ let fileContent = '';
696
+ try {
697
+ fileContent = readStrategy
698
+ ? ((await readStrategy(file)) ?? '')
699
+ : await fs.promises.readFile(path.resolve(workingDirectory, file), 'utf-8');
700
+ // totem-context: span-read failure yields no spans → no exemption → the rule still FIRES; the exemption fails toward flagging, never toward suppression.
701
+ }
702
+ catch {
703
+ fileContent = '';
704
+ }
705
+ treeSitterRustSpans = getRustTestSpans(fileContent);
706
+ }
511
707
  // Map results back to violations
512
708
  for (let i = 0; i < applicableTreeSitter.length; i++) {
513
709
  const rule = applicableTreeSitter[i];
514
710
  const matches = batchResults[i] ?? [];
515
711
  for (const match of matches) {
712
+ // Exempt matches inside inline Rust test modules (#2397).
713
+ if (isProductionRustRule(rule) &&
714
+ treeSitterRustSpans.some((s) => match.lineNumber >= s.startLine && match.lineNumber <= s.endLine)) {
715
+ // Emit a suppress event so metrics distinguish "matched but
716
+ // test-span-exempt" from "never matched" (#2397 / greptile P2).
717
+ onRuleEvent?.('suppress', rule.lessonHash, {
718
+ file,
719
+ line: match.lineNumber,
720
+ justification: 'exempt: inline #[cfg(test)] module span (#2397)',
721
+ immutable: rule.immutable,
722
+ });
723
+ continue;
724
+ }
516
725
  const addition = fileAdditions.find((a) => a.lineNumber === match.lineNumber);
517
726
  const { suppressed, justification, attestation } = resolveAstMatchSuppression(ctx, match, addition);
518
727
  if (suppressed) {
@@ -597,10 +806,28 @@ export async function applyAstRulesToAdditions(ctx, rules, additions, workingDir
597
806
  failureReason: err.message,
598
807
  });
599
808
  });
809
+ // Rust test-span exemption (#2397): compute once per file, only when
810
+ // some applicable rule is production-Rust (content is already in hand).
811
+ const astGrepRustSpans = applicableAstGrep.some(isProductionRustRule)
812
+ ? getRustTestSpans(content)
813
+ : [];
600
814
  for (let i = 0; i < applicableAstGrep.length; i++) {
601
815
  const rule = applicableAstGrep[i];
602
816
  const matches = batchResults[i] ?? [];
603
817
  for (const match of matches) {
818
+ // Exempt matches inside inline Rust test modules (#2397).
819
+ if (isProductionRustRule(rule) &&
820
+ astGrepRustSpans.some((s) => match.lineNumber >= s.startLine && match.lineNumber <= s.endLine)) {
821
+ // Emit a suppress event so metrics distinguish "matched but
822
+ // test-span-exempt" from "never matched" (#2397 / greptile P2).
823
+ onRuleEvent?.('suppress', rule.lessonHash, {
824
+ file,
825
+ line: match.lineNumber,
826
+ justification: 'exempt: inline #[cfg(test)] module span (#2397)',
827
+ immutable: rule.immutable,
828
+ });
829
+ continue;
830
+ }
604
831
  const addition = fileAdditions.find((a) => a.lineNumber === match.lineNumber);
605
832
  const { suppressed, justification, attestation } = resolveAstMatchSuppression(ctx, match, addition);
606
833
  if (suppressed) {
@@ -1 +1 @@
1
- {"version":3,"file":"rule-engine.js","sourceRoot":"","sources":["../src/rule-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule-engine.js","sourceRoot":"","sources":["../src/rule-engine.ts"],"names":[],"mappings":"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"}