code-auditor-mcp 3.4.12 → 3.4.14
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.
- package/CHANGELOG.md +74 -1
- package/dist/analyzers/__verify_self_probe.d.ts +2 -0
- package/dist/analyzers/__verify_self_probe.d.ts.map +1 -0
- package/dist/analyzers/__verify_self_probe.js +5 -0
- package/dist/analyzers/__verify_self_probe.js.map +1 -0
- package/dist/analyzers/analyzerUtils.d.ts +34 -1
- package/dist/analyzers/analyzerUtils.d.ts.map +1 -1
- package/dist/analyzers/analyzerUtils.js +61 -22
- package/dist/analyzers/analyzerUtils.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +18 -23
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +198 -186
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +78 -55
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +244 -243
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts +27 -37
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js +314 -275
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +17 -46
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +620 -523
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
- package/dist/analyzers/documentationAnalyzer.d.ts +7 -2
- package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +259 -198
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.js +57 -50
- package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
- package/dist/analyzers/orm/adapterRegistry.d.ts +10 -0
- package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -1
- package/dist/analyzers/orm/adapterRegistry.js +10 -0
- package/dist/analyzers/orm/adapterRegistry.js.map +1 -1
- package/dist/analyzers/orm/drizzleAdapter.d.ts +22 -0
- package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -1
- package/dist/analyzers/orm/drizzleAdapter.js +42 -44
- package/dist/analyzers/orm/drizzleAdapter.js.map +1 -1
- package/dist/analyzers/orm/prismaAdapter.d.ts +30 -0
- package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -1
- package/dist/analyzers/orm/prismaAdapter.js +30 -0
- package/dist/analyzers/orm/prismaAdapter.js.map +1 -1
- package/dist/analyzers/provenance.d.ts +62 -2
- package/dist/analyzers/provenance.d.ts.map +1 -1
- package/dist/analyzers/provenance.js +443 -349
- package/dist/analyzers/provenance.js.map +1 -1
- package/dist/analyzers/reactAnalyzer.d.ts +11 -0
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +188 -125
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/ruleRegistry.d.ts +110 -1
- package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
- package/dist/analyzers/ruleRegistry.js +1714 -124
- package/dist/analyzers/ruleRegistry.js.map +1 -1
- package/dist/analyzers/ruleTiming.d.ts +54 -0
- package/dist/analyzers/ruleTiming.d.ts.map +1 -0
- package/dist/analyzers/ruleTiming.js +71 -0
- package/dist/analyzers/ruleTiming.js.map +1 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +13 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +362 -283
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +26 -68
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +430 -391
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +17 -202
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +1073 -1121
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +3 -49
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +414 -340
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +48 -5
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +262 -134
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +23 -214
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +139 -1521
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +78 -79
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +613 -480
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts +307 -0
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/codeAnalysis.js +965 -0
- package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -0
- package/dist/analyzers/universal/schema/config.d.ts +31 -0
- package/dist/analyzers/universal/schema/config.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/config.js +57 -0
- package/dist/analyzers/universal/schema/config.js.map +1 -0
- package/dist/analyzers/universal/schema/discovery.d.ts +167 -0
- package/dist/analyzers/universal/schema/discovery.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/discovery.js +616 -0
- package/dist/analyzers/universal/schema/discovery.js.map +1 -0
- package/dist/analyzers/universal/schema/jsonSchema.d.ts +27 -0
- package/dist/analyzers/universal/schema/jsonSchema.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/jsonSchema.js +368 -0
- package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -0
- package/dist/analyzers/universal/schema/migrations.d.ts +90 -0
- package/dist/analyzers/universal/schema/migrations.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/migrations.js +238 -0
- package/dist/analyzers/universal/schema/migrations.js.map +1 -0
- package/dist/analyzers/universal/schema/types.d.ts +131 -0
- package/dist/analyzers/universal/schema/types.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/types.js +10 -0
- package/dist/analyzers/universal/schema/types.js.map +1 -0
- package/dist/analyzers/universal/schema/violations.d.ts +44 -0
- package/dist/analyzers/universal/schema/violations.d.ts.map +1 -0
- package/dist/analyzers/universal/schema/violations.js +54 -0
- package/dist/analyzers/universal/schema/violations.js.map +1 -0
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +89 -13
- package/dist/auditRunner.js.map +1 -1
- package/dist/cli.js +315 -40
- package/dist/cli.js.map +1 -1
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +9 -7
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts +12 -3
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +16 -6
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/effectiveConfig.d.ts +75 -0
- package/dist/config/effectiveConfig.d.ts.map +1 -0
- package/dist/config/effectiveConfig.js +213 -0
- package/dist/config/effectiveConfig.js.map +1 -0
- package/dist/config/pathProfiles.d.ts +7 -4
- package/dist/config/pathProfiles.d.ts.map +1 -1
- package/dist/config/pathProfiles.js +8 -10
- package/dist/config/pathProfiles.js.map +1 -1
- package/dist/config/thresholdRationales.d.ts +45 -0
- package/dist/config/thresholdRationales.d.ts.map +1 -0
- package/dist/config/thresholdRationales.js +67 -0
- package/dist/config/thresholdRationales.js.map +1 -0
- package/dist/conventions/conventionMiner.d.ts.map +1 -1
- package/dist/conventions/conventionMiner.js +6 -2
- package/dist/conventions/conventionMiner.js.map +1 -1
- package/dist/enforcement/diffGate.d.ts +55 -0
- package/dist/enforcement/diffGate.d.ts.map +1 -0
- package/dist/enforcement/diffGate.js +136 -0
- package/dist/enforcement/diffGate.js.map +1 -0
- package/dist/enforcement/gate.d.ts +36 -0
- package/dist/enforcement/gate.d.ts.map +1 -0
- package/dist/enforcement/gate.js +72 -0
- package/dist/enforcement/gate.js.map +1 -0
- package/dist/enforcement/suppressions.d.ts +41 -0
- package/dist/enforcement/suppressions.d.ts.map +1 -0
- package/dist/enforcement/suppressions.js +170 -0
- package/dist/enforcement/suppressions.js.map +1 -0
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +4 -1
- package/dist/fingerprint.js.map +1 -1
- package/dist/invariants/ruleEngine.d.ts +3 -4
- package/dist/invariants/ruleEngine.d.ts.map +1 -1
- package/dist/invariants/ruleEngine.js +2 -2
- package/dist/invariants/ruleEngine.js.map +1 -1
- package/dist/languages/LanguageOrchestrator.d.ts +14 -0
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.js +93 -55
- package/dist/languages/LanguageOrchestrator.js.map +1 -1
- package/dist/languages/LanguageRegistry.d.ts +8 -0
- package/dist/languages/LanguageRegistry.d.ts.map +1 -1
- package/dist/languages/LanguageRegistry.js +8 -0
- package/dist/languages/LanguageRegistry.js.map +1 -1
- package/dist/languages/RuntimeManager.d.ts +82 -60
- package/dist/languages/RuntimeManager.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.js +404 -349
- package/dist/languages/RuntimeManager.js.map +1 -1
- package/dist/languages/UniversalAnalyzer.d.ts +51 -6
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
- package/dist/languages/UniversalAnalyzer.js +127 -88
- package/dist/languages/UniversalAnalyzer.js.map +1 -1
- package/dist/languages/adapterBridge.d.ts +36 -0
- package/dist/languages/adapterBridge.d.ts.map +1 -1
- package/dist/languages/adapterBridge.js +89 -35
- package/dist/languages/adapterBridge.js.map +1 -1
- package/dist/languages/go/GoAdapter.d.ts +66 -23
- package/dist/languages/go/GoAdapter.d.ts.map +1 -1
- package/dist/languages/go/GoAdapter.js +553 -474
- package/dist/languages/go/GoAdapter.js.map +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +33 -4
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +101 -66
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
- package/dist/languages/tree-sitter/converter.d.ts +18 -0
- package/dist/languages/tree-sitter/converter.d.ts.map +1 -1
- package/dist/languages/tree-sitter/converter.js +18 -0
- package/dist/languages/tree-sitter/converter.js.map +1 -1
- package/dist/languages/tree-sitter/parser.d.ts +39 -2
- package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
- package/dist/languages/tree-sitter/parser.js +93 -12
- package/dist/languages/tree-sitter/parser.js.map +1 -1
- package/dist/languages/types.d.ts +67 -2
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +253 -72
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +1419 -923
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
- package/dist/mcp-tools-shared.d.ts.map +1 -1
- package/dist/mcp-tools-shared.js.map +1 -1
- package/dist/pipeline.d.ts +13 -5
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +381 -200
- package/dist/pipeline.js.map +1 -1
- package/dist/pipelineAdapters.d.ts +3 -8
- package/dist/pipelineAdapters.d.ts.map +1 -1
- package/dist/pipelineAdapters.js +149 -94
- package/dist/pipelineAdapters.js.map +1 -1
- package/dist/presets/presets.d.ts +54 -0
- package/dist/presets/presets.d.ts.map +1 -0
- package/dist/presets/presets.js +181 -0
- package/dist/presets/presets.js.map +1 -0
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.js +6 -3
- package/dist/reporting/sarifReportGenerator.js.map +1 -1
- package/dist/ruleAliases.d.ts +67 -0
- package/dist/ruleAliases.d.ts.map +1 -0
- package/dist/ruleAliases.js +102 -0
- package/dist/ruleAliases.js.map +1 -0
- package/dist/styles/cssAstExtractor.d.ts.map +1 -1
- package/dist/styles/cssAstExtractor.js +78 -18
- package/dist/styles/cssAstExtractor.js.map +1 -1
- package/dist/styles/styleIndexer.d.ts +6 -0
- package/dist/styles/styleIndexer.d.ts.map +1 -1
- package/dist/styles/styleIndexer.js +26 -4
- package/dist/styles/styleIndexer.js.map +1 -1
- package/dist/styles/tailwindConfigLoader.d.ts +8 -6
- package/dist/styles/tailwindConfigLoader.d.ts.map +1 -1
- package/dist/styles/tailwindConfigLoader.js +61 -15
- package/dist/styles/tailwindConfigLoader.js.map +1 -1
- package/dist/styles/tailwindProbe.d.ts +31 -0
- package/dist/styles/tailwindProbe.d.ts.map +1 -1
- package/dist/styles/tailwindProbe.js +145 -4
- package/dist/styles/tailwindProbe.js.map +1 -1
- package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
- package/dist/styles/tailwindUtilityExpander.js +13 -1
- package/dist/styles/tailwindUtilityExpander.js.map +1 -1
- package/dist/types.d.ts +181 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/fileDiscovery.d.ts +9 -0
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js +21 -0
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/package.json +5 -3
- package/plugin/hooks/hooks.json +1 -1
- package/plugin/scripts/hook-audit.sh +25 -7
- package/plugin/skills/code-auditor/SKILL.md +5 -5
|
@@ -6,8 +6,21 @@
|
|
|
6
6
|
* before any adapterBridge use. Adapter calls to getParser() on an uninitialized
|
|
7
7
|
* parser throw with a clear message — this is a programmer error, not a runtime
|
|
8
8
|
* condition to recover from.
|
|
9
|
+
*
|
|
10
|
+
* Spec 32 — WASM Abort recovery:
|
|
11
|
+
* `parser.parse()` can throw a `WebAssembly.RuntimeError` with the Emscripten
|
|
12
|
+
* `Aborted()` signature when the shared WASM runtime's arena reaches its ceiling.
|
|
13
|
+
* Once `ABORT` is set, the runtime singleton is dead and every subsequent parse
|
|
14
|
+
* fails. We therefore:
|
|
15
|
+
* - hold the `Parser`/`Language` classes in mutable bindings (not static imports)
|
|
16
|
+
* so a fresh runtime can be swapped in,
|
|
17
|
+
* - expose `parseWithRecovery()` which detects an abort, reinstantiates the module
|
|
18
|
+
* (cache-busted dynamic import), retries the file once, and otherwise rethrows
|
|
19
|
+
* so the caller records the file as unparsed (never silently dropped).
|
|
9
20
|
*/
|
|
10
|
-
import
|
|
21
|
+
import * as webTreeSitter from 'web-tree-sitter';
|
|
22
|
+
import type { Tree } from 'web-tree-sitter';
|
|
23
|
+
declare let Parser: typeof webTreeSitter.Parser;
|
|
11
24
|
/**
|
|
12
25
|
* Initialize tree-sitter parsers for all supported languages.
|
|
13
26
|
* MUST be called once before any adapterBridge or adapter use.
|
|
@@ -15,16 +28,39 @@ import { Parser } from 'web-tree-sitter';
|
|
|
15
28
|
* WASM paths are resolved relative to this module's location via import.meta.url,
|
|
16
29
|
* NOT process.cwd(). This ensures the grammars are found regardless of the
|
|
17
30
|
* working directory at runtime (critical for npx-invoked hooks).
|
|
31
|
+
* @returns
|
|
18
32
|
*/
|
|
19
33
|
export declare function initParsers(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Reinstantiate the tree-sitter runtime after an abort. Dynamically re-imports
|
|
36
|
+
* a fresh `web-tree-sitter` module instance (cache-busted) so the dead shared
|
|
37
|
+
* WASM singleton is replaced, then rebuilds all grammars and parsers from it.
|
|
38
|
+
* @returns
|
|
39
|
+
*/
|
|
40
|
+
export declare function recoverParsers(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Parse content with abort recovery. On an abort, reinstantiates the runtime
|
|
43
|
+
* and retries the file once. A second abort propagates to the caller so the
|
|
44
|
+
* file is recorded as unparsed rather than silently dropped.
|
|
45
|
+
*
|
|
46
|
+
* @param lang - Language identifier ('typescript', 'javascript', 'go', ...)
|
|
47
|
+
* @param isTsx - If true, use the TSX grammar
|
|
48
|
+
* @param content - Source text to parse
|
|
49
|
+
* @param recover - Fault-injection seam. Defaults to the real `recoverParsers`;
|
|
50
|
+
* tests may pass a stub to exercise the retry orchestration without hitting
|
|
51
|
+
* `import.meta.resolve` (which vitest's SSR transform rewrites away).
|
|
52
|
+
* @returns the parsed tree, or null if the parser produced no tree.
|
|
53
|
+
*/
|
|
54
|
+
export declare function parseWithRecovery(lang: string, isTsx: boolean, content: string, recover?: () => Promise<void>): Promise<Tree | null>;
|
|
20
55
|
/**
|
|
21
56
|
* Get a tree-sitter Parser for the given language.
|
|
22
57
|
* Throws if initParsers() has not been called.
|
|
23
58
|
*
|
|
24
59
|
* @param lang - Language identifier ('typescript', 'javascript', 'go')
|
|
25
60
|
* @param isTsx - If true and lang is 'typescript', use the TSX grammar
|
|
61
|
+
* @returns
|
|
26
62
|
*/
|
|
27
|
-
export declare function getParser(lang: string, isTsx?: boolean): Parser;
|
|
63
|
+
export declare function getParser(lang: string, isTsx?: boolean): typeof Parser.prototype;
|
|
28
64
|
/**
|
|
29
65
|
* Returns true if parsers have been initialized.
|
|
30
66
|
*/
|
|
@@ -33,4 +69,5 @@ export declare function isInitialized(): boolean;
|
|
|
33
69
|
* Get available language identifiers.
|
|
34
70
|
*/
|
|
35
71
|
export declare function getAvailableLanguages(): string[];
|
|
72
|
+
export {};
|
|
36
73
|
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/languages/tree-sitter/parser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/languages/tree-sitter/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAG5C,QAAA,IAAI,MAAM,EAAE,OAAO,aAAa,CAAC,MAA6B,CAAC;AAiD/D;;;;;;;;GAQG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD;AAuDD;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAOpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,OAAO,CAAC,IAAI,CAAkB,GAC5C,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAWtB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,MAAM,CAAC,SAAS,CAgBvF;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD"}
|
|
@@ -6,15 +6,36 @@
|
|
|
6
6
|
* before any adapterBridge use. Adapter calls to getParser() on an uninitialized
|
|
7
7
|
* parser throw with a clear message — this is a programmer error, not a runtime
|
|
8
8
|
* condition to recover from.
|
|
9
|
+
*
|
|
10
|
+
* Spec 32 — WASM Abort recovery:
|
|
11
|
+
* `parser.parse()` can throw a `WebAssembly.RuntimeError` with the Emscripten
|
|
12
|
+
* `Aborted()` signature when the shared WASM runtime's arena reaches its ceiling.
|
|
13
|
+
* Once `ABORT` is set, the runtime singleton is dead and every subsequent parse
|
|
14
|
+
* fails. We therefore:
|
|
15
|
+
* - hold the `Parser`/`Language` classes in mutable bindings (not static imports)
|
|
16
|
+
* so a fresh runtime can be swapped in,
|
|
17
|
+
* - expose `parseWithRecovery()` which detects an abort, reinstantiates the module
|
|
18
|
+
* (cache-busted dynamic import), retries the file once, and otherwise rethrows
|
|
19
|
+
* so the caller records the file as unparsed (never silently dropped).
|
|
9
20
|
*/
|
|
10
21
|
import { readFileSync } from 'node:fs';
|
|
11
|
-
import
|
|
22
|
+
import * as webTreeSitter from 'web-tree-sitter';
|
|
23
|
+
// Mutable bindings — a recovery swaps these to a fresh module's classes.
|
|
24
|
+
let Parser = webTreeSitter.Parser;
|
|
25
|
+
let Language = webTreeSitter.Language;
|
|
12
26
|
// ---------------------------------------------------------------------------
|
|
13
27
|
// State
|
|
14
28
|
// ---------------------------------------------------------------------------
|
|
15
29
|
let initialized = false;
|
|
16
30
|
const parsers = new Map();
|
|
17
31
|
const languages = new Map();
|
|
32
|
+
/**
|
|
33
|
+
* Cache-buster for recovering from an Emscripten Abort(). Each recovery bumps
|
|
34
|
+
* this and dynamically re-imports `web-tree-sitter` with `?gen=N` appended so
|
|
35
|
+
* Node's module cache treats it as a distinct module instance with a fresh,
|
|
36
|
+
* non-aborted runtime singleton.
|
|
37
|
+
*/
|
|
38
|
+
let recoveryGeneration = 0;
|
|
18
39
|
/**
|
|
19
40
|
* Mapping from adapter language ID to the grammar WASM filename.
|
|
20
41
|
* Keyed by the strings adapters use internally (not file extensions).
|
|
@@ -33,6 +54,7 @@ const GRAMMAR_FILES = {
|
|
|
33
54
|
*/
|
|
34
55
|
const LANGUAGE_GRAMMAR_MAP = {
|
|
35
56
|
typescript: 'typescript',
|
|
57
|
+
tsx: 'tsx',
|
|
36
58
|
javascript: 'javascript',
|
|
37
59
|
go: 'go',
|
|
38
60
|
css: 'css',
|
|
@@ -48,21 +70,33 @@ const LANGUAGE_GRAMMAR_MAP = {
|
|
|
48
70
|
* WASM paths are resolved relative to this module's location via import.meta.url,
|
|
49
71
|
* NOT process.cwd(). This ensures the grammars are found regardless of the
|
|
50
72
|
* working directory at runtime (critical for npx-invoked hooks).
|
|
73
|
+
* @returns
|
|
51
74
|
*/
|
|
52
75
|
export async function initParsers() {
|
|
53
76
|
if (initialized)
|
|
54
77
|
return;
|
|
78
|
+
await loadGrammarsAndParsers();
|
|
79
|
+
initialized = true;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Shared grammar + parser construction, used by both initial startup and
|
|
83
|
+
* post-abort recovery. Clears the singleton maps and rebuilds them from the
|
|
84
|
+
* current (possibly freshly-imported) Parser/Language classes.
|
|
85
|
+
*/
|
|
86
|
+
async function loadGrammarsAndParsers() {
|
|
55
87
|
// Initialize the tree-sitter runtime (loads the tree-sitter C library WASM)
|
|
56
88
|
await Parser.init();
|
|
57
89
|
// Resolve the grammars directory relative to this module
|
|
58
90
|
// At runtime: dist/languages/tree-sitter/parser.js → ../../grammars/
|
|
59
91
|
const grammarsDir = new URL('../../grammars/', import.meta.url);
|
|
92
|
+
languages.clear();
|
|
60
93
|
for (const [grammarKey, wasmFile] of Object.entries(GRAMMAR_FILES)) {
|
|
61
94
|
const wasmUrl = new URL(wasmFile, grammarsDir);
|
|
62
95
|
const wasmBuffer = readFileSync(wasmUrl);
|
|
63
96
|
const language = await Language.load(wasmBuffer);
|
|
64
97
|
languages.set(grammarKey, language);
|
|
65
98
|
}
|
|
99
|
+
parsers.clear();
|
|
66
100
|
// Create parser instances for each primary language
|
|
67
101
|
for (const [lang, grammarKey] of Object.entries(LANGUAGE_GRAMMAR_MAP)) {
|
|
68
102
|
const language = languages.get(grammarKey);
|
|
@@ -74,7 +108,61 @@ export async function initParsers() {
|
|
|
74
108
|
parser.setLanguage(language);
|
|
75
109
|
parsers.set(lang, parser);
|
|
76
110
|
}
|
|
77
|
-
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Detect an Emscripten Abort() surfaced as a thrown WebAssembly.RuntimeError.
|
|
114
|
+
* These errors are the signature of a dead WASM runtime — not a per-file parse
|
|
115
|
+
* failure — and must trigger module recovery rather than a per-file skip.
|
|
116
|
+
*/
|
|
117
|
+
function detectAbort(err) {
|
|
118
|
+
if (!(err instanceof Error))
|
|
119
|
+
return false;
|
|
120
|
+
const name = err.name ?? '';
|
|
121
|
+
const message = err.message ?? '';
|
|
122
|
+
return (name === 'RuntimeError' ||
|
|
123
|
+
message.includes('Aborted(') ||
|
|
124
|
+
message.includes('abort('));
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Reinstantiate the tree-sitter runtime after an abort. Dynamically re-imports
|
|
128
|
+
* a fresh `web-tree-sitter` module instance (cache-busted) so the dead shared
|
|
129
|
+
* WASM singleton is replaced, then rebuilds all grammars and parsers from it.
|
|
130
|
+
* @returns
|
|
131
|
+
*/
|
|
132
|
+
export async function recoverParsers() {
|
|
133
|
+
recoveryGeneration++;
|
|
134
|
+
const baseUrl = import.meta.resolve('web-tree-sitter');
|
|
135
|
+
const fresh = await import(`${baseUrl}?gen=${recoveryGeneration}`);
|
|
136
|
+
Parser = fresh.Parser;
|
|
137
|
+
Language = fresh.Language;
|
|
138
|
+
await loadGrammarsAndParsers();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Parse content with abort recovery. On an abort, reinstantiates the runtime
|
|
142
|
+
* and retries the file once. A second abort propagates to the caller so the
|
|
143
|
+
* file is recorded as unparsed rather than silently dropped.
|
|
144
|
+
*
|
|
145
|
+
* @param lang - Language identifier ('typescript', 'javascript', 'go', ...)
|
|
146
|
+
* @param isTsx - If true, use the TSX grammar
|
|
147
|
+
* @param content - Source text to parse
|
|
148
|
+
* @param recover - Fault-injection seam. Defaults to the real `recoverParsers`;
|
|
149
|
+
* tests may pass a stub to exercise the retry orchestration without hitting
|
|
150
|
+
* `import.meta.resolve` (which vitest's SSR transform rewrites away).
|
|
151
|
+
* @returns the parsed tree, or null if the parser produced no tree.
|
|
152
|
+
*/
|
|
153
|
+
export async function parseWithRecovery(lang, isTsx, content, recover = recoverParsers) {
|
|
154
|
+
try {
|
|
155
|
+
const parser = getParser(lang, isTsx);
|
|
156
|
+
return parser.parse(content);
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
if (!detectAbort(err))
|
|
160
|
+
throw err;
|
|
161
|
+
// Abort killed the shared runtime — reinstantiate and retry the file once.
|
|
162
|
+
await recover();
|
|
163
|
+
const parser = getParser(lang, isTsx);
|
|
164
|
+
return parser.parse(content); // a second abort propagates to the caller
|
|
165
|
+
}
|
|
78
166
|
}
|
|
79
167
|
/**
|
|
80
168
|
* Get a tree-sitter Parser for the given language.
|
|
@@ -82,23 +170,16 @@ export async function initParsers() {
|
|
|
82
170
|
*
|
|
83
171
|
* @param lang - Language identifier ('typescript', 'javascript', 'go')
|
|
84
172
|
* @param isTsx - If true and lang is 'typescript', use the TSX grammar
|
|
173
|
+
* @returns
|
|
85
174
|
*/
|
|
86
175
|
export function getParser(lang, isTsx = false) {
|
|
87
176
|
if (!initialized) {
|
|
88
177
|
throw new Error('Tree-sitter parsers not initialized. Call initParsers() before using any adapter.');
|
|
89
178
|
}
|
|
90
179
|
const key = isTsx ? 'tsx' : lang;
|
|
91
|
-
|
|
92
|
-
if (isTsx && languages.has('tsx')) {
|
|
93
|
-
// Return a one-off parser with TSX grammar
|
|
94
|
-
const tsxLang = languages.get('tsx');
|
|
95
|
-
const p = new Parser();
|
|
96
|
-
p.setLanguage(tsxLang);
|
|
97
|
-
return p;
|
|
98
|
-
}
|
|
99
|
-
const parser = parsers.get(lang);
|
|
180
|
+
const parser = parsers.get(key);
|
|
100
181
|
if (!parser) {
|
|
101
|
-
throw new Error(`No tree-sitter parser for language "${
|
|
182
|
+
throw new Error(`No tree-sitter parser for language "${key}". ` +
|
|
102
183
|
`Supported: ${[...parsers.keys()].join(', ')}`);
|
|
103
184
|
}
|
|
104
185
|
return parser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/languages/tree-sitter/parser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/languages/tree-sitter/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AAGjD,yEAAyE;AACzE,IAAI,MAAM,GAAgC,aAAa,CAAC,MAAM,CAAC;AAC/D,IAAI,QAAQ,GAAkC,aAAa,CAAC,QAAQ,CAAC;AAErE,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAC;AAC3D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqC,CAAC;AAE/D;;;;;GAKG;AACH,IAAI,kBAAkB,GAAG,CAAC,CAAC;AAE3B;;;GAGG;AACH,MAAM,aAAa,GAA2B;IAC5C,UAAU,EAAE,6BAA6B;IACzC,GAAG,EAAE,sBAAsB;IAC3B,UAAU,EAAE,6BAA6B;IACzC,EAAE,EAAE,qBAAqB;IACzB,GAAG,EAAE,sBAAsB;IAC3B,IAAI,EAAE,uBAAuB;CAC9B,CAAC;AAEF;;;GAGG;AACH,MAAM,oBAAoB,GAA2B;IACnD,UAAU,EAAE,YAAY;IACxB,GAAG,EAAE,KAAK;IACV,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,IAAI;IACR,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,WAAW;QAAE,OAAO;IACxB,MAAM,sBAAsB,EAAE,CAAC;IAC/B,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,sBAAsB;IACnC,4EAA4E;IAC5E,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IAEpB,yDAAyD;IACzD,qEAAqE;IACrE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAEhE,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,oDAAoD;IACpD,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACtE,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,YAAY,UAAU,6BAA6B,IAAI,KAAK;gBAC5D,uBAAuB,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1D,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,IAAI,GAAI,GAAyB,CAAC,IAAI,IAAI,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,OAAO,CACL,IAAI,KAAK,cAAc;QACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,kBAAkB,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,OAAO,QAAQ,kBAAkB,EAAE,CAAC,CAAC;IACnE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACtB,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1B,MAAM,sBAAsB,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,KAAc,EACd,OAAe,EACf,OAAO,GAAwB,cAAc;IAE7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;QACjC,2EAA2E;QAC3E,MAAM,OAAO,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0CAA0C;IAC1E,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAK,GAAY,KAAK;IAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,mFAAmF,CACpF,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,uCAAuC,GAAG,KAAK;YAC/C,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/C,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -9,6 +9,8 @@ export interface AST {
|
|
|
9
9
|
language: string;
|
|
10
10
|
filePath: string;
|
|
11
11
|
errors: ParseError[];
|
|
12
|
+
/** Called by the pipeline after all visitors process a file to reclaim WASM tree memory. */
|
|
13
|
+
dispose?: () => void;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* Generic AST node that can represent nodes from any language
|
|
@@ -153,9 +155,9 @@ export interface ResolvedConstant {
|
|
|
153
155
|
declLine: number;
|
|
154
156
|
}
|
|
155
157
|
/**
|
|
156
|
-
*
|
|
158
|
+
* Parser role: file detection and AST production.
|
|
157
159
|
*/
|
|
158
|
-
export interface
|
|
160
|
+
export interface LanguageParser {
|
|
159
161
|
readonly name: string;
|
|
160
162
|
readonly fileExtensions: string[];
|
|
161
163
|
/**
|
|
@@ -166,18 +168,38 @@ export interface LanguageAdapter {
|
|
|
166
168
|
* Check if this adapter supports a file
|
|
167
169
|
*/
|
|
168
170
|
supportsFile(filePath: string): boolean;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* AST navigation role: structural traversal of the parsed tree.
|
|
174
|
+
*/
|
|
175
|
+
export interface AstNavigation {
|
|
169
176
|
findNodes(ast: AST, pattern: NodePattern): ASTNode[];
|
|
170
177
|
getParent(node: ASTNode): ASTNode | null;
|
|
171
178
|
getChildren(node: ASTNode): ASTNode[];
|
|
172
179
|
getSiblings(node: ASTNode): ASTNode[];
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Node information role: reading type/text/name/location off a node.
|
|
183
|
+
*/
|
|
184
|
+
export interface NodeIntrospection {
|
|
173
185
|
getNodeType(node: ASTNode): string;
|
|
174
186
|
getNodeText(node: ASTNode, sourceCode: string): string;
|
|
175
187
|
getNodeName(node: ASTNode): string | null;
|
|
176
188
|
getNodeLocation(node: ASTNode): SourceLocation;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Language-specific extraction role: pull structured entities out of an AST.
|
|
192
|
+
*/
|
|
193
|
+
export interface LanguageExtraction {
|
|
177
194
|
extractFunctions(ast: AST): FunctionInfo[];
|
|
178
195
|
extractClasses(ast: AST): ClassInfo[];
|
|
179
196
|
extractImports(ast: AST): ImportInfo[];
|
|
180
197
|
extractExports(ast: AST): ExportInfo[];
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Node predicate role: classify AST nodes by kind.
|
|
201
|
+
*/
|
|
202
|
+
export interface NodePredicates {
|
|
181
203
|
isClass(node: ASTNode): boolean;
|
|
182
204
|
isFunction(node: ASTNode): boolean;
|
|
183
205
|
isMethod(node: ASTNode): boolean;
|
|
@@ -187,10 +209,29 @@ export interface LanguageAdapter {
|
|
|
187
209
|
isLoop(node: ASTNode): boolean;
|
|
188
210
|
isConditional(node: ASTNode): boolean;
|
|
189
211
|
isVariableDeclaration(node: ASTNode): boolean;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Advanced analysis role: type info, documentation, and complexity.
|
|
215
|
+
*/
|
|
216
|
+
export interface AdvancedAnalysis {
|
|
190
217
|
getTypeInfo(node: ASTNode): string | null;
|
|
191
218
|
getDocumentation(node: ASTNode): string | null;
|
|
192
219
|
getComplexity(node: ASTNode): number;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Optional capabilities a language may or may not provide.
|
|
223
|
+
*
|
|
224
|
+
* String-construction capabilities replace text-pattern heuristics for SQL
|
|
225
|
+
* injection detection with AST-level knowledge of how each host language
|
|
226
|
+
* constructs dynamic strings. When a language adapter does not implement
|
|
227
|
+
* these, the caller falls back to the legacy text-pattern approach (Legacy
|
|
228
|
+
* check disabled in v3.4.7 — if no adapter capability is present, no
|
|
229
|
+
* injection risk is flagged).
|
|
230
|
+
*/
|
|
231
|
+
export interface OptionalCapabilities {
|
|
232
|
+
/** Extract interfaces (for languages that support them). */
|
|
193
233
|
extractInterfaces?(ast: AST): InterfaceInfo[];
|
|
234
|
+
/** Extract raw import info including dynamic/require forms. */
|
|
194
235
|
extractRawImports?(filePath: string, content: string): Array<{
|
|
195
236
|
moduleSpecifier: string;
|
|
196
237
|
isStatic: boolean;
|
|
@@ -198,6 +239,7 @@ export interface LanguageAdapter {
|
|
|
198
239
|
isRequire: boolean;
|
|
199
240
|
line: number;
|
|
200
241
|
}>;
|
|
242
|
+
/** Extract exported symbol names from an AST. */
|
|
201
243
|
extractExportedSymbols?(ast: AST): Array<{
|
|
202
244
|
name: string;
|
|
203
245
|
line: number;
|
|
@@ -228,6 +270,29 @@ export interface LanguageAdapter {
|
|
|
228
270
|
* @param sourceCode - The source text
|
|
229
271
|
*/
|
|
230
272
|
resolveLocalConstant?(identifierNode: ASTNode, ast: AST, sourceCode: string): ResolvedConstant | null;
|
|
273
|
+
/**
|
|
274
|
+
* Returns true if an interpolated expression is provably safe to embed in a
|
|
275
|
+
* SQL string — a compile-time constant, quote-escaped sanitizer, ternary of
|
|
276
|
+
* safe branches, static-array `.map().join()`, local function call with a
|
|
277
|
+
* safe body and safe call sites, or a guard-validated parameter. Used to
|
|
278
|
+
* clear cross-function false positives without weakening raw-input detection.
|
|
279
|
+
*
|
|
280
|
+
* @param node - The expression node inside a ${…} substitution (or operand).
|
|
281
|
+
* @param ast - The full AST for scope traversal.
|
|
282
|
+
* @param sourceCode - The source text.
|
|
283
|
+
*/
|
|
284
|
+
isSafeInterpolation?(node: ASTNode, ast: AST, sourceCode: string): boolean;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Language adapter interface - must be implemented for each language.
|
|
288
|
+
*
|
|
289
|
+
* Composed from role interfaces (Spec-33 interface-segregation): a single
|
|
290
|
+
* 35-member interface once forced every adapter to implement all members at
|
|
291
|
+
* once, bloating each adapter class (the TypeScript adapter grew to 78
|
|
292
|
+
* methods, Go to 53). Splitting into roles lets adapters implement the
|
|
293
|
+
* capabilities they support and compose them back into a full adapter.
|
|
294
|
+
*/
|
|
295
|
+
export interface LanguageAdapter extends LanguageParser, AstNavigation, NodeIntrospection, LanguageExtraction, NodePredicates, AdvancedAnalysis, OptionalCapabilities {
|
|
231
296
|
}
|
|
232
297
|
/**
|
|
233
298
|
* Interface information extracted from AST
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/languages/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/languages/types.ts"],"names":[],"mappings":"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"}
|