projscan 1.0.0 → 1.1.0

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 (32) hide show
  1. package/README.md +18 -3
  2. package/dist/core/fixSuggest.js +50 -0
  3. package/dist/core/fixSuggest.js.map +1 -1
  4. package/dist/core/languages/LanguageAdapter.d.ts +1 -1
  5. package/dist/core/languages/registry.js +2 -1
  6. package/dist/core/languages/registry.js.map +1 -1
  7. package/dist/core/languages/rustAdapter.d.ts +2 -0
  8. package/dist/core/languages/rustAdapter.js +165 -0
  9. package/dist/core/languages/rustAdapter.js.map +1 -0
  10. package/dist/core/languages/rustCallSites.d.ts +17 -0
  11. package/dist/core/languages/rustCallSites.js +60 -0
  12. package/dist/core/languages/rustCallSites.js.map +1 -0
  13. package/dist/core/languages/rustCyclomatic.d.ts +24 -0
  14. package/dist/core/languages/rustCyclomatic.js +67 -0
  15. package/dist/core/languages/rustCyclomatic.js.map +1 -0
  16. package/dist/core/languages/rustExports.d.ts +25 -0
  17. package/dist/core/languages/rustExports.js +74 -0
  18. package/dist/core/languages/rustExports.js.map +1 -0
  19. package/dist/core/languages/rustFunctions.d.ts +27 -0
  20. package/dist/core/languages/rustFunctions.js +131 -0
  21. package/dist/core/languages/rustFunctions.js.map +1 -0
  22. package/dist/core/languages/rustImports.d.ts +31 -0
  23. package/dist/core/languages/rustImports.js +196 -0
  24. package/dist/core/languages/rustImports.js.map +1 -0
  25. package/dist/core/languages/rustManifests.d.ts +26 -0
  26. package/dist/core/languages/rustManifests.js +99 -0
  27. package/dist/core/languages/rustManifests.js.map +1 -0
  28. package/dist/core/languages/treeSitterLoader.js +2 -1
  29. package/dist/core/languages/treeSitterLoader.js.map +1 -1
  30. package/dist/grammars/tree-sitter-rust.wasm +0 -0
  31. package/dist/tool-manifest.json +2 -2
  32. package/package.json +4 -2
package/README.md CHANGED
@@ -242,8 +242,20 @@ For real-world numbers against larger codebases, `npm run bench:references` shal
242
242
 
243
243
  Run `npm run bench` against your own machine to recalibrate.
244
244
 
245
- - **Zero network requests** - everything runs locally
246
- - **11 runtime dependencies** - still minimal (the five tree-sitter grammars bring ~3.3 MB of vendored wasm: web-tree-sitter ~190 KB, tree-sitter-python ~450 KB, tree-sitter-go ~210 KB, tree-sitter-java ~405 KB, tree-sitter-ruby ~2.0 MB)
245
+ - **Zero network requests** everything runs locally
246
+ - **12 runtime dependencies** still minimal
247
+ - **~4.5 MB of vendored tree-sitter grammars**, broken down:
248
+
249
+ | Grammar | Size | Languages |
250
+ |---|---:|---|
251
+ | `web-tree-sitter` | ~190 KB | runtime, all tree-sitter languages |
252
+ | `tree-sitter-python` | ~450 KB | Python |
253
+ | `tree-sitter-go` | ~210 KB | Go |
254
+ | `tree-sitter-java` | ~405 KB | Java |
255
+ | `tree-sitter-ruby` | ~2.0 MB | Ruby |
256
+ | `tree-sitter-rust` | ~1.1 MB | Rust |
257
+
258
+ JavaScript and TypeScript use the bundled `@babel/parser` instead of a tree-sitter grammar, so they don't appear in this table.
247
259
 
248
260
  ## Optional features
249
261
 
@@ -332,7 +344,7 @@ jobs:
332
344
  with: { fetch-depth: 0 } # needed for --changed-only
333
345
  - uses: actions/setup-node@v4
334
346
  with: { node-version: 20 }
335
- - uses: abhiyoheswaran1/projscan@v0.3.0
347
+ - uses: abhiyoheswaran1/projscan@v1
336
348
  with:
337
349
  min-score: '70'
338
350
  changed-only: 'true'
@@ -374,6 +386,9 @@ Fields:
374
386
  - `disableRules` - silence rules by id; supports wildcard `prefix-*`
375
387
  - `severityOverrides` - remap a rule's severity (`info` / `warning` / `error`)
376
388
  - `hotspots.limit` / `hotspots.since` - defaults for the `hotspots` command
389
+ - `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos *(0.14+)*
390
+
391
+ See [`docs/GUIDE.md` → Configuration](docs/GUIDE.md#configuration-projscanrc) for the full reference (field types, validation behavior, embedding config in `package.json`, monorepo `importPolicy` semantics).
377
392
 
378
393
  ## Tracking Health Over Time
379
394
 
@@ -187,6 +187,50 @@ const TEMPLATES = [
187
187
  '(c) widen the .projscanrc importPolicy `allow` list if this edge is intentional. Prefer (a) or (b) - the policy exists to keep refactoring options open.',
188
188
  }),
189
189
  },
190
+ // ── ESLint rule failures (1.1.0) ─────────────────────────
191
+ {
192
+ match: (i) => i.id.startsWith('eslint-'),
193
+ render: (i) => {
194
+ const ruleName = i.id.slice('eslint-'.length);
195
+ return {
196
+ issueId: i.id,
197
+ severity: i.severity,
198
+ category: i.category,
199
+ headline: `ESLint rule failed: \`${ruleName}\``,
200
+ why: 'ESLint rules represent codified team agreement about how the codebase should look and behave. A failing rule means either the code is wrong by the team\'s own standard, or the rule itself is wrong for this project — both deserve resolution rather than silencing.',
201
+ where: i.locations ?? [],
202
+ instruction: `Three valid moves, in order of preference: ` +
203
+ `(a) fix the violation per the rule's documented intent — start at the docs link below; ` +
204
+ `(b) if this specific occurrence is justified, add \`// eslint-disable-next-line ${ruleName}\` ON the offending line with a one-sentence comment explaining why the local exception holds; ` +
205
+ `(c) if the rule itself is wrong for this project, propose a config change in \`eslint.config.js\` (or the legacy \`.eslintrc\`) and run \`npm run lint -- --fix\` to baseline. ` +
206
+ `Don't reach for (b) or (c) without reading the docs first.`,
207
+ suggestedTest: `After: \`npm run lint\` should not flag this rule on this file.`,
208
+ references: [`https://eslint.org/docs/latest/rules/${ruleName}`],
209
+ };
210
+ },
211
+ },
212
+ // ── Python type errors (1.1.0) ────────────────────────────
213
+ {
214
+ match: (i) => i.id.startsWith('python-type-error-'),
215
+ render: (i) => ({
216
+ issueId: i.id,
217
+ severity: i.severity,
218
+ category: i.category,
219
+ headline: `Python type error: ${i.title}`,
220
+ why: 'Type errors flagged by mypy / pyright catch bugs the runtime would only catch later — `None` reaching code that expects a concrete value, mismatched return types, callers passing the wrong shape. Fixing the type usually fixes the latent bug.',
221
+ where: i.locations ?? [],
222
+ instruction: 'Three valid moves, in order of preference: ' +
223
+ '(a) add or refine the type annotation on the offending name so the checker sees what you mean (often the right move when the function signature was incomplete); ' +
224
+ '(b) narrow the type at the call site with an `assert isinstance(x, T)` / `if x is not None` guard so the checker can prove the case is safe; ' +
225
+ '(c) if the checker is genuinely wrong, add `# type: ignore[<error-code>]` on the line with a comment explaining why. ' +
226
+ 'Avoid bare `# type: ignore` (no error code) — pinning the code keeps the ignore narrow.',
227
+ suggestedTest: 'After: `mypy <file>` (or `pyright <file>`) should not flag this line.',
228
+ references: [
229
+ 'https://mypy.readthedocs.io/en/stable/error_code_list.html',
230
+ 'https://microsoft.github.io/pyright/#/configuration',
231
+ ],
232
+ }),
233
+ },
190
234
  ];
191
235
  const FALLBACK = {
192
236
  match: () => true,
@@ -270,6 +314,12 @@ function staticHeadlineFor(issue) {
270
314
  return issue.id.includes('python') ? 'Add ruff and run `ruff check . --fix` once.' : 'Add eslint + prettier; baseline with `--fix`.';
271
315
  if (issue.id.startsWith('cross-package-violation-'))
272
316
  return 'Use the package\'s public entry, or widen the importPolicy.';
317
+ if (issue.id.startsWith('eslint-')) {
318
+ const ruleName = issue.id.slice('eslint-'.length);
319
+ return `Fix per docs, or scope a disable to the line with a reason: \`${ruleName}\`.`;
320
+ }
321
+ if (issue.id.startsWith('python-type-error-'))
322
+ return 'Refine the annotation, narrow at the call site, or pin a `# type: ignore[code]`.';
273
323
  return null;
274
324
  }
275
325
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fixSuggest.js","sourceRoot":"","sources":["../../src/core/fixSuggest.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAwBlC,MAAM,SAAS,GAAe;IAC5B,6DAA6D;IAC7D;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACnD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,sBAAsB,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YACpD,GAAG,EACD,yIAAyI;gBACzI,gFAAgF;YAClF,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;YACxB,WAAW,EACT,sBAAsB,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,0EAA0E;gBAClH,kIAAkI,CAAC,CAAC,EAAE,OAAO;gBAC7I,+EAA+E;YACjF,aAAa,EAAE,sGAAsG;SACtH,CAAC;KACH;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,sBAAsB;QAC7C,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,mBAAmB;YAC7B,GAAG,EACD,mJAAmJ;gBACnJ,oDAAoD;YACtD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;YACjC,WAAW,EACT,+JAA+J;gBAC/J,yGAAyG;YAC3G,aAAa,EAAE,+GAA+G;SAC/H,CAAC;KACH;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,iCAAiC,IAAI,CAAC,CAAC,EAAE,KAAK,4BAA4B;QACjG,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,KAAK;YACjB,GAAG,EACD,gMAAgM;YAClM,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;YACjC,WAAW,EACT,oHAAoH;gBACpH,4JAA4J;gBAC5J,mIAAmI;SACtI,CAAC;KACH;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CACX,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;YAC5B,CAAC,CAAC,sBAAsB,EAAE,iCAAiC,EAAE,4BAA4B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3G,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACZ,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC5C,OAAO;gBACL,OAAO,EAAE,CAAC,CAAC,EAAE;gBACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,KAAK;gBACjB,GAAG,EAAE,CAAC,CAAC,WAAW;gBAClB,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;gBAChD,WAAW,EACT,UAAU,IAAI,uEAAuE,IAAI,+BAA+B;oBACxH,2KAA2K;aAC9K,CAAC;QACJ,CAAC;KACF;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACZ,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,CAAC,CAAC,EAAE;gBACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,KAAK;gBACjB,GAAG,EACD,2JAA2J;oBAC3J,2CAA2C;gBAC7C,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;gBAChD,WAAW,EACT,mJAAmJ,IAAI,uCAAuC;oBAC9L,sJAAsJ;aACzJ,CAAC;QACJ,CAAC;KACF;IACD,6DAA6D;IAC7D;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAChD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,iBAAiB;YAC3B,GAAG,EACD,wJAAwJ;gBACxJ,qFAAqF;YACvF,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;YACxB,WAAW,EACT,sFAAsF;gBACtF,gHAAgH;gBAChH,wGAAwG;gBACxG,iJAAiJ;YACnJ,aAAa,EAAE,uEAAuE;SACvF,CAAC;KACH;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,KAAK;YACjB,GAAG,EACD,iMAAiM;YACnM,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;YACxB,WAAW,EACT,oKAAoK;gBACpK,6LAA6L;SAChM,CAAC;KACH;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QACnE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,4BAA4B;YACtC,GAAG,EACD,gLAAgL;gBAChL,8EAA8E;YAChF,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;YACxB,WAAW,EACT,qGAAqG;gBACrG,+HAA+H;gBAC/H,mJAAmJ;SACtJ,CAAC;KACH;IACD,6DAA6D;IAC7D;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,wBAAwB,IAAI,CAAC,CAAC,EAAE,KAAK,+BAA+B;QAC3F,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,KAAK;YACjB,GAAG,EACD,8MAA8M;YAChN,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;YACjC,WAAW,EACT,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACrB,CAAC,CAAC,wQAAwQ;gBAC1Q,CAAC,CAAC,6LAA6L;YACnM,aAAa,EAAE,yFAAyF;SACzG,CAAC;KACH;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,eAAe,IAAI,CAAC,CAAC,EAAE,KAAK,sBAAsB;QACzE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,KAAK;YACjB,GAAG,EACD,qGAAqG;YACvG,KAAK,EAAE,EAAE;YACT,WAAW,EACT,+QAA+Q;SAClR,CAAC;KACH;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CACX,CAAC,CAAC,EAAE,KAAK,gBAAgB;YACzB,CAAC,CAAC,EAAE,KAAK,uBAAuB;YAChC,CAAC,CAAC,EAAE,KAAK,mBAAmB;YAC5B,CAAC,CAAC,EAAE,KAAK,0BAA0B;QACrC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,KAAK;YACjB,GAAG,EACD,+LAA+L;YACjM,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;YACjC,WAAW,EACT,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACrB,CAAC,CAAC,iMAAiM;gBACnM,CAAC,CAAC,oPAAoP;YAC1P,aAAa,EAAE,yEAAyE;SACzF,CAAC;KACH;IACD,4DAA4D;IAC5D;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,0BAA0B,CAAC;QACzD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,KAAK;YACjB,GAAG,EACD,iOAAiO;YACnO,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;YACxB,WAAW,EACT,mLAAmL;gBACnL,0JAA0J;SAC7J,CAAC;KACH;CACF,CAAC;AAEF,MAAM,QAAQ,GAAa;IACzB,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI;IACjB,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,EAAE;QACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,QAAQ,EAAE,CAAC,CAAC,KAAK;QACjB,GAAG,EAAE,CAAC,CAAC,WAAW;QAClB,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;QACxB,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC;KACpC,CAAC;CACH,CAAC;AAEF,SAAS,mBAAmB,CAAC,CAAQ;IACnC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,WAAW,CAAC,CAAC,KAAK,iKAAiK,CAAC,CAAC,EAAE,sBAAsB,CAAC;QACvN,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,CAAC,KAAK,8JAA8J,CAAC,CAAC,EAAE,wDAAwD,CAAC;QACtP;YACE,OAAO,kBAAkB,CAAC,CAAC,KAAK,gGAAgG,CAAC,CAAC,EAAE,mCAAmC,CAAC;IAC5K,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,4DAA4D;IAC5D,6EAA6E;IAC7E,yEAAyE;IACzE,gDAAgD;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,IAAI,IAAI,WAAW,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAY,EACZ,QAAgB;IAEhB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAY;IACpD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAY;IACrC,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC;QAAE,OAAO,sBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC;IACvG,IAAI,KAAK,CAAC,EAAE,KAAK,sBAAsB;QAAE,OAAO,4CAA4C,CAAC;IAC7F,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,UAAU,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,+BAA+B,CAAC;IACzH,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,oDAAoD,CAAC;IAC/F,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAO,gDAAgD,CAAC;IACpG,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,gCAAgC,CAAC;IACxG,IAAI,KAAK,CAAC,EAAE,KAAK,WAAW,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,gEAAgE,CAAC;IAC3I,IAAI,KAAK,CAAC,EAAE,KAAK,wBAAwB,IAAI,KAAK,CAAC,EAAE,KAAK,+BAA+B;QACvF,OAAO,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,wCAAwC,CAAC;IAC3H,IAAI,KAAK,CAAC,EAAE,KAAK,eAAe,IAAI,KAAK,CAAC,EAAE,KAAK,sBAAsB;QAAE,OAAO,gDAAgD,CAAC;IACjI,IACE,KAAK,CAAC,EAAE,KAAK,gBAAgB;QAC7B,KAAK,CAAC,EAAE,KAAK,uBAAuB;QACpC,KAAK,CAAC,EAAE,KAAK,mBAAmB;QAChC,KAAK,CAAC,EAAE,KAAK,0BAA0B;QAEvC,OAAO,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,+CAA+C,CAAC;IACvI,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,0BAA0B,CAAC;QAAE,OAAO,6DAA6D,CAAC;IAC1H,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,MAAe,EAAE,OAAe;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY,EAAE,WAAyC,SAAS;IAC3G,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,6BAA6B,IAAI,cAAc,IAAI,IAAI;QACpE,QAAQ;QACR,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;QACzC,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KACzC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,GAAkB,EAClB,UAAkB,CAAC;IAEnB,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACjF,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;IACpE,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,GAAG;QACZ,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;KACjC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"fixSuggest.js","sourceRoot":"","sources":["../../src/core/fixSuggest.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { FileEntry } from '../../types.js';
2
2
  import type { AstResult } from '../ast.js';
3
- export type LanguageId = 'javascript' | 'python' | 'go' | 'java' | 'ruby';
3
+ export type LanguageId = 'javascript' | 'python' | 'go' | 'java' | 'ruby' | 'rust';
4
4
  export interface LanguageResolveContext {
5
5
  /** Language-specific root dirs used during import resolution. */
6
6
  packageRoots?: string[];
@@ -4,7 +4,8 @@ import { pythonAdapter } from './pythonAdapter.js';
4
4
  import { goAdapter } from './goAdapter.js';
5
5
  import { javaAdapter } from './javaAdapter.js';
6
6
  import { rubyAdapter } from './rubyAdapter.js';
7
- const adapters = [javascriptAdapter, pythonAdapter, goAdapter, javaAdapter, rubyAdapter];
7
+ import { rustAdapter } from './rustAdapter.js';
8
+ const adapters = [javascriptAdapter, pythonAdapter, goAdapter, javaAdapter, rubyAdapter, rustAdapter];
8
9
  const byExtension = new Map();
9
10
  function rebuildIndex() {
10
11
  byExtension.clear();
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/languages/registry.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,QAAQ,GAAsB,CAAC,iBAAiB,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAC5G,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEvD,SAAS,YAAY;IACnB,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC;AACD,YAAY,EAAE,CAAC;AAEf,MAAM,UAAU,eAAe,CAAC,OAAwB;IACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,YAAY,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/languages/registry.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,QAAQ,GAAsB,CAAC,iBAAiB,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AACzH,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEvD,SAAS,YAAY;IACnB,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC;AACD,YAAY,EAAE,CAAC;AAEf,MAAM,UAAU,eAAe,CAAC,OAAwB;IACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,YAAY,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { LanguageAdapter } from './LanguageAdapter.js';
2
+ export declare const rustAdapter: LanguageAdapter;
@@ -0,0 +1,165 @@
1
+ import path from 'node:path';
2
+ import { createParserFor } from './treeSitterLoader.js';
3
+ import { extractRustImports } from './rustImports.js';
4
+ import { extractRustExports } from './rustExports.js';
5
+ import { extractRustCyclomatic } from './rustCyclomatic.js';
6
+ import { extractRustFunctions } from './rustFunctions.js';
7
+ import { extractRustCallSites } from './rustCallSites.js';
8
+ import { detectRustProject } from './rustManifests.js';
9
+ const RUST_EXTENSIONS = new Set(['.rs']);
10
+ const MAX_RUST_FILE = 1024 * 1024;
11
+ let parserPromise = null;
12
+ async function getParser() {
13
+ if (!parserPromise)
14
+ parserPromise = createParserFor('tree-sitter-rust.wasm');
15
+ return parserPromise;
16
+ }
17
+ export const rustAdapter = {
18
+ id: 'rust',
19
+ extensions: RUST_EXTENSIONS,
20
+ sourceExtensions: RUST_EXTENSIONS,
21
+ // Rust has no barrel-file convention. mod.rs is closest but it's a module
22
+ // root, not a re-export hub in the JS sense.
23
+ barrelBasenames: new Set(),
24
+ maxFileSize: MAX_RUST_FILE,
25
+ async parse(_filePath, content) {
26
+ try {
27
+ const parser = await getParser();
28
+ const tree = parser.parse(content);
29
+ if (!tree || !tree.rootNode) {
30
+ return {
31
+ ok: false,
32
+ reason: 'tree-sitter returned null tree',
33
+ imports: [],
34
+ exports: [],
35
+ callSites: [],
36
+ lineCount: content ? content.split('\n').length : 0,
37
+ cyclomaticComplexity: 0,
38
+ functions: [],
39
+ };
40
+ }
41
+ const root = tree.rootNode;
42
+ const imports = extractRustImports(root);
43
+ const exports = extractRustExports(root);
44
+ const cyclomaticComplexity = extractRustCyclomatic(root);
45
+ const callSites = extractRustCallSites(root);
46
+ const functions = extractRustFunctions(root);
47
+ return {
48
+ ok: true,
49
+ imports,
50
+ exports,
51
+ callSites,
52
+ lineCount: content ? content.split('\n').length : 0,
53
+ cyclomaticComplexity,
54
+ functions,
55
+ };
56
+ }
57
+ catch (err) {
58
+ const msg = err instanceof Error ? err.message : String(err);
59
+ return {
60
+ ok: false,
61
+ reason: `rust parse failure: ${msg.slice(0, 120)}`,
62
+ imports: [],
63
+ exports: [],
64
+ callSites: [],
65
+ lineCount: content ? content.split('\n').length : 0,
66
+ cyclomaticComplexity: 0,
67
+ functions: [],
68
+ };
69
+ }
70
+ },
71
+ resolveImport(importingFile, source, graphFiles, context) {
72
+ return resolveRustImport(importingFile, source, graphFiles, context);
73
+ },
74
+ toPackageName(source) {
75
+ if (!source)
76
+ return null;
77
+ if (source.startsWith('crate::') || source === 'crate')
78
+ return null;
79
+ if (source.startsWith('self::') || source === 'self')
80
+ return null;
81
+ if (source.startsWith('super::') || source === 'super')
82
+ return null;
83
+ return source.split('::')[0];
84
+ },
85
+ async preparePackageRoots(rootPath, files) {
86
+ const info = await detectRustProject(rootPath, files);
87
+ return {
88
+ packageRoots: info ? [path.relative(rootPath, info.crateRoot) || '.'] : [],
89
+ meta: info ? { rustProject: info } : undefined,
90
+ };
91
+ },
92
+ };
93
+ /**
94
+ * Resolve a Rust `use` path to a repo-local file, or null if the import
95
+ * targets the standard library / a third-party crate.
96
+ *
97
+ * crate::foo::bar → resolve against the crate's `src/` root.
98
+ * self::foo → resolve against the importing file's directory.
99
+ * super::foo → resolve against the importing file's parent.
100
+ * <crateName>::… → same as crate:: for the project's own crate.
101
+ * anything else → null (external).
102
+ *
103
+ * Probes are file-flavoured: `foo` resolves to `foo.rs` or `foo/mod.rs`.
104
+ */
105
+ function resolveRustImport(importingFile, source, graphFiles, context) {
106
+ if (!source)
107
+ return null;
108
+ const segments = source.split('::').filter(Boolean);
109
+ if (segments.length === 0)
110
+ return null;
111
+ const project = context.meta?.rustProject;
112
+ // self:: / super::… - relative to the importing file.
113
+ if (segments[0] === 'self' || segments[0] === 'super') {
114
+ const importingDir = path.posix.dirname(importingFile);
115
+ let dir = importingDir;
116
+ let i = 0;
117
+ while (i < segments.length && segments[i] === 'super') {
118
+ dir = path.posix.dirname(dir);
119
+ if (dir === '.' || dir === '/' || dir === '') {
120
+ dir = '';
121
+ break;
122
+ }
123
+ i++;
124
+ }
125
+ if (segments[i] === 'self')
126
+ i++;
127
+ const tail = segments.slice(i, segments.length - 1); // drop final symbol
128
+ const moduleName = tail[tail.length - 1] ?? '';
129
+ if (!moduleName)
130
+ return null;
131
+ const base = [dir, ...tail.slice(0, -1)].filter(Boolean).join('/');
132
+ return probeRustModule(base, moduleName, graphFiles);
133
+ }
134
+ // crate:: or <crateName>::…
135
+ const isCrate = segments[0] === 'crate' || (project && segments[0] === project.crateName);
136
+ if (isCrate && project) {
137
+ const tail = segments.slice(1, segments.length - 1); // drop final symbol
138
+ const moduleName = tail[tail.length - 1] ?? '';
139
+ if (!moduleName)
140
+ return null;
141
+ const packageRoots = context.packageRoots ?? ['.'];
142
+ for (const root of packageRoots) {
143
+ const rootSegs = root === '.' || root === '' ? [] : root.split('/').filter(Boolean);
144
+ const base = [...rootSegs, 'src', ...tail.slice(0, -1)].filter(Boolean).join('/');
145
+ const hit = probeRustModule(base, moduleName, graphFiles);
146
+ if (hit)
147
+ return hit;
148
+ }
149
+ return null;
150
+ }
151
+ return null;
152
+ }
153
+ function probeRustModule(baseDir, moduleName, graphFiles) {
154
+ if (!moduleName)
155
+ return null;
156
+ const stem = baseDir ? `${baseDir}/${moduleName}` : moduleName;
157
+ const asFile = `${stem}.rs`;
158
+ if (graphFiles.has(asFile))
159
+ return asFile;
160
+ const asMod = `${stem}/mod.rs`;
161
+ if (graphFiles.has(asMod))
162
+ return asMod;
163
+ return null;
164
+ }
165
+ //# sourceMappingURL=rustAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rustAdapter.js","sourceRoot":"","sources":["../../../src/core/languages/rustAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ interface TsNode {
2
+ type: string;
3
+ text: string;
4
+ namedChildren: TsNode[];
5
+ childForFieldName?: (name: string) => TsNode | null;
6
+ }
7
+ /**
8
+ * Extract the called identifier from each `call_expression` in a
9
+ * tree-sitter-rust AST. Mirrors the existing JS/TS, Python, Go, Java, Ruby
10
+ * adapter behaviour: we deduplicate names and strip qualification so that
11
+ * `foo::bar()` and `obj.bar()` both produce `bar`. Macro invocations
12
+ * (`println!`, `vec!`) are NOT call expressions in Rust's grammar — they're
13
+ * `macro_invocation` nodes; we currently don't include them as callSites
14
+ * to avoid false positives across the macro-expansion boundary.
15
+ */
16
+ export declare function extractRustCallSites(root: TsNode): string[];
17
+ export {};
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Extract the called identifier from each `call_expression` in a
3
+ * tree-sitter-rust AST. Mirrors the existing JS/TS, Python, Go, Java, Ruby
4
+ * adapter behaviour: we deduplicate names and strip qualification so that
5
+ * `foo::bar()` and `obj.bar()` both produce `bar`. Macro invocations
6
+ * (`println!`, `vec!`) are NOT call expressions in Rust's grammar — they're
7
+ * `macro_invocation` nodes; we currently don't include them as callSites
8
+ * to avoid false positives across the macro-expansion boundary.
9
+ */
10
+ export function extractRustCallSites(root) {
11
+ const seen = new Set();
12
+ walk(root, (n) => {
13
+ if (n.type !== 'call_expression')
14
+ return;
15
+ const fn = n.childForFieldName ? n.childForFieldName('function') : null;
16
+ if (!fn)
17
+ return;
18
+ const name = bareName(fn);
19
+ if (name)
20
+ seen.add(name);
21
+ });
22
+ return [...seen];
23
+ }
24
+ function bareName(node) {
25
+ switch (node.type) {
26
+ case 'identifier':
27
+ case 'type_identifier':
28
+ case 'field_identifier':
29
+ return node.text;
30
+ case 'scoped_identifier': {
31
+ // `foo::bar::baz` - take the last segment.
32
+ const name = node.childForFieldName ? node.childForFieldName('name') : null;
33
+ if (name)
34
+ return bareName(name);
35
+ const last = node.namedChildren[node.namedChildren.length - 1];
36
+ return last ? bareName(last) : null;
37
+ }
38
+ case 'field_expression': {
39
+ // `obj.foo` - take the field name.
40
+ const field = node.childForFieldName ? node.childForFieldName('field') : null;
41
+ if (field)
42
+ return bareName(field);
43
+ return null;
44
+ }
45
+ case 'generic_function': {
46
+ // `foo::<T>` - drill down to the underlying function path.
47
+ const inner = node.namedChildren[0];
48
+ return inner ? bareName(inner) : null;
49
+ }
50
+ default:
51
+ // Closures, blocks, parenthesized expressions etc. - no useful name.
52
+ return null;
53
+ }
54
+ }
55
+ function walk(node, visit) {
56
+ visit(node);
57
+ for (const child of node.namedChildren)
58
+ walk(child, visit);
59
+ }
60
+ //# sourceMappingURL=rustCallSites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rustCallSites.js","sourceRoot":"","sources":["../../../src/core/languages/rustCallSites.ts"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;QACf,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB;YAAE,OAAO;QACzC,MAAM,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,IAAI;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,YAAY,CAAC;QAClB,KAAK,iBAAiB,CAAC;QACvB,KAAK,kBAAkB;YACrB,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,2CAA2C;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5E,IAAI,IAAI;gBAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,mCAAmC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9E,IAAI,KAAK;gBAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,2DAA2D;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxC,CAAC;QACD;YACE,qEAAqE;YACrE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,KAA0B;IACpD,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa;QAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,24 @@
1
+ interface TsNode {
2
+ type: string;
3
+ text: string;
4
+ namedChildren: TsNode[];
5
+ }
6
+ /**
7
+ * File-level McCabe cyclomatic complexity for a tree-sitter-rust AST.
8
+ *
9
+ * Decision points in Rust:
10
+ * if_expression +1 (the `if` itself; `else` does not count)
11
+ * else_clause with `if` +1 (the chained `else if`)
12
+ * for_expression +1
13
+ * while_expression +1
14
+ * loop_expression +1 (an unconditional `loop` is still one branch with
15
+ * its `break` exits)
16
+ * match_arm +1 per non-wildcard arm; the `_` arm does NOT count
17
+ * try_expression +1 (the `?` operator: success vs error path)
18
+ * binary_expression with `&&` / `||` +1 each (short-circuit)
19
+ *
20
+ * The arrow `=>` between match arm patterns and bodies is the actual branch.
21
+ * Wildcard arms (`_ =>`) are the fall-through and don't add a path.
22
+ */
23
+ export declare function extractRustCyclomatic(root: TsNode): number;
24
+ export {};
@@ -0,0 +1,67 @@
1
+ /**
2
+ * File-level McCabe cyclomatic complexity for a tree-sitter-rust AST.
3
+ *
4
+ * Decision points in Rust:
5
+ * if_expression +1 (the `if` itself; `else` does not count)
6
+ * else_clause with `if` +1 (the chained `else if`)
7
+ * for_expression +1
8
+ * while_expression +1
9
+ * loop_expression +1 (an unconditional `loop` is still one branch with
10
+ * its `break` exits)
11
+ * match_arm +1 per non-wildcard arm; the `_` arm does NOT count
12
+ * try_expression +1 (the `?` operator: success vs error path)
13
+ * binary_expression with `&&` / `||` +1 each (short-circuit)
14
+ *
15
+ * The arrow `=>` between match arm patterns and bodies is the actual branch.
16
+ * Wildcard arms (`_ =>`) are the fall-through and don't add a path.
17
+ */
18
+ export function extractRustCyclomatic(root) {
19
+ let decisions = 0;
20
+ walk(root, (n) => {
21
+ if (isDecisionPoint(n))
22
+ decisions++;
23
+ });
24
+ return decisions + 1;
25
+ }
26
+ function isDecisionPoint(n) {
27
+ switch (n.type) {
28
+ case 'if_expression':
29
+ case 'for_expression':
30
+ case 'while_expression':
31
+ case 'loop_expression':
32
+ case 'try_expression':
33
+ return true;
34
+ case 'match_arm': {
35
+ // Non-wildcard arms count. tree-sitter-rust wraps the pattern in a
36
+ // `match_pattern` node whose inner is the actual pattern; a bare `_`
37
+ // arm has no named children inside `match_pattern` (the `_` is an
38
+ // anonymous token), so we also fall back to the text-equality check.
39
+ const arm = n.namedChildren[0];
40
+ if (!arm)
41
+ return true;
42
+ if (arm.type === 'wildcard_pattern')
43
+ return false;
44
+ if (arm.type === 'match_pattern') {
45
+ const inner = arm.namedChildren[0];
46
+ if (!inner)
47
+ return arm.text.trim() !== '_';
48
+ if (inner.type === 'wildcard_pattern')
49
+ return false;
50
+ }
51
+ return true;
52
+ }
53
+ case 'binary_expression': {
54
+ // tree-sitter-rust exposes the operator as text within the binary_expression.
55
+ // Match `&&` / `||` with whitespace boundaries to avoid catching them inside strings.
56
+ return /(\s|^)(\|\||&&)(\s|$)/.test(n.text);
57
+ }
58
+ default:
59
+ return false;
60
+ }
61
+ }
62
+ function walk(node, visit) {
63
+ visit(node);
64
+ for (const child of node.namedChildren)
65
+ walk(child, visit);
66
+ }
67
+ //# sourceMappingURL=rustCyclomatic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rustCyclomatic.js","sourceRoot":"","sources":["../../../src/core/languages/rustCyclomatic.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;QACf,IAAI,eAAe,CAAC,CAAC,CAAC;YAAE,SAAS,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,eAAe,CAAC,CAAS;IAChC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,eAAe,CAAC;QACrB,KAAK,gBAAgB,CAAC;QACtB,KAAK,kBAAkB,CAAC;QACxB,KAAK,iBAAiB,CAAC;QACvB,KAAK,gBAAgB;YACnB,OAAO,IAAI,CAAC;QACd,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,mEAAmE;YACnE,qEAAqE;YACrE,kEAAkE;YAClE,qEAAqE;YACrE,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YACtB,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB;gBAAE,OAAO,KAAK,CAAC;YAClD,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK;oBAAE,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC;gBAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB;oBAAE,OAAO,KAAK,CAAC;YACtD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,8EAA8E;YAC9E,sFAAsF;YACtF,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,KAA0B;IACpD,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa;QAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { AstExport } from '../ast.js';
2
+ interface TsNode {
3
+ type: string;
4
+ text: string;
5
+ startPosition: {
6
+ row: number;
7
+ column: number;
8
+ };
9
+ namedChildren: TsNode[];
10
+ childForFieldName?: (name: string) => TsNode | null;
11
+ }
12
+ /**
13
+ * Extract public top-level items from a tree-sitter-rust AST. We descend
14
+ * into `mod foo { ... }` blocks because `pub fn` declared inside an inline
15
+ * module is still part of the crate's surface; the qualified name reported
16
+ * is the bare item name (the module is captured separately as its own
17
+ * export).
18
+ *
19
+ * Visibility detection: any direct child of type `visibility_modifier`
20
+ * (which includes `pub`, `pub(crate)`, `pub(super)`, `pub(in path::to)`)
21
+ * counts as exported. We do NOT distinguish between `pub` and `pub(crate)`
22
+ * here — both are public to the crate's consumers in the graph sense.
23
+ */
24
+ export declare function extractRustExports(root: TsNode): AstExport[];
25
+ export {};