codebase-context 1.6.2 → 1.8.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.
- package/LICENSE +21 -21
- package/README.md +417 -282
- package/dist/analyzers/angular/index.d.ts.map +1 -1
- package/dist/analyzers/angular/index.js +91 -40
- package/dist/analyzers/angular/index.js.map +1 -1
- package/dist/analyzers/generic/index.d.ts +1 -0
- package/dist/analyzers/generic/index.d.ts.map +1 -1
- package/dist/analyzers/generic/index.js +94 -14
- package/dist/analyzers/generic/index.js.map +1 -1
- package/dist/cli-formatters.d.ts +47 -0
- package/dist/cli-formatters.d.ts.map +1 -0
- package/dist/cli-formatters.js +803 -0
- package/dist/cli-formatters.js.map +1 -0
- package/dist/cli-memory.d.ts +5 -0
- package/dist/cli-memory.d.ts.map +1 -0
- package/dist/cli-memory.js +218 -0
- package/dist/cli-memory.js.map +1 -0
- package/dist/cli.d.ts +3 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +317 -88
- package/dist/cli.js.map +1 -1
- package/dist/constants/codebase-context.d.ts +13 -0
- package/dist/constants/codebase-context.d.ts.map +1 -1
- package/dist/constants/codebase-context.js +13 -0
- package/dist/constants/codebase-context.js.map +1 -1
- package/dist/core/auto-refresh.d.ts +16 -0
- package/dist/core/auto-refresh.d.ts.map +1 -0
- package/dist/core/auto-refresh.js +25 -0
- package/dist/core/auto-refresh.js.map +1 -0
- package/dist/core/file-watcher.d.ts +15 -0
- package/dist/core/file-watcher.d.ts.map +1 -0
- package/dist/core/file-watcher.js +59 -0
- package/dist/core/file-watcher.js.map +1 -0
- package/dist/core/index-meta.d.ts +27 -0
- package/dist/core/index-meta.d.ts.map +1 -0
- package/dist/core/index-meta.js +212 -0
- package/dist/core/index-meta.js.map +1 -0
- package/dist/core/indexer.d.ts.map +1 -1
- package/dist/core/indexer.js +324 -26
- package/dist/core/indexer.js.map +1 -1
- package/dist/core/reranker.d.ts.map +1 -1
- package/dist/core/reranker.js +3 -0
- package/dist/core/reranker.js.map +1 -1
- package/dist/core/search-quality.js +2 -2
- package/dist/core/search-quality.js.map +1 -1
- package/dist/core/search.d.ts +1 -0
- package/dist/core/search.d.ts.map +1 -1
- package/dist/core/search.js +79 -11
- package/dist/core/search.js.map +1 -1
- package/dist/core/symbol-references.d.ts +20 -0
- package/dist/core/symbol-references.d.ts.map +1 -0
- package/dist/core/symbol-references.js +186 -0
- package/dist/core/symbol-references.js.map +1 -0
- package/dist/embeddings/index.d.ts +8 -0
- package/dist/embeddings/index.d.ts.map +1 -1
- package/dist/embeddings/index.js +17 -2
- package/dist/embeddings/index.js.map +1 -1
- package/dist/embeddings/openai.d.ts +1 -1
- package/dist/embeddings/openai.d.ts.map +1 -1
- package/dist/embeddings/openai.js +3 -1
- package/dist/embeddings/openai.js.map +1 -1
- package/dist/embeddings/transformers.d.ts +6 -0
- package/dist/embeddings/transformers.d.ts.map +1 -1
- package/dist/embeddings/transformers.js +12 -5
- package/dist/embeddings/transformers.js.map +1 -1
- package/dist/embeddings/types.d.ts +1 -0
- package/dist/embeddings/types.d.ts.map +1 -1
- package/dist/embeddings/types.js +7 -1
- package/dist/embeddings/types.js.map +1 -1
- package/dist/eval/harness.d.ts +5 -0
- package/dist/eval/harness.d.ts.map +1 -0
- package/dist/eval/harness.js +153 -0
- package/dist/eval/harness.js.map +1 -0
- package/dist/eval/types.d.ts +59 -0
- package/dist/eval/types.d.ts.map +1 -0
- package/dist/eval/types.js +2 -0
- package/dist/eval/types.js.map +1 -0
- package/dist/grammars/manifest.d.ts +26 -0
- package/dist/grammars/manifest.d.ts.map +1 -0
- package/dist/grammars/manifest.js +64 -0
- package/dist/grammars/manifest.js.map +1 -0
- package/dist/index.d.ts +16 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +181 -1300
- package/dist/index.js.map +1 -1
- package/dist/patterns/semantics.d.ts +2 -1
- package/dist/patterns/semantics.d.ts.map +1 -1
- package/dist/patterns/semantics.js +0 -2
- package/dist/patterns/semantics.js.map +1 -1
- package/dist/preflight/evidence-lock.d.ts +6 -0
- package/dist/preflight/evidence-lock.d.ts.map +1 -1
- package/dist/preflight/evidence-lock.js +33 -1
- package/dist/preflight/evidence-lock.js.map +1 -1
- package/dist/storage/index.d.ts +4 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +2 -2
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/lancedb.d.ts +11 -1
- package/dist/storage/lancedb.d.ts.map +1 -1
- package/dist/storage/lancedb.js +45 -11
- package/dist/storage/lancedb.js.map +1 -1
- package/dist/storage/types.d.ts +4 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js.map +1 -1
- package/dist/tools/detect-circular-dependencies.d.ts +5 -0
- package/dist/tools/detect-circular-dependencies.d.ts.map +1 -0
- package/dist/tools/detect-circular-dependencies.js +117 -0
- package/dist/tools/detect-circular-dependencies.js.map +1 -0
- package/dist/tools/get-codebase-metadata.d.ts +5 -0
- package/dist/tools/get-codebase-metadata.d.ts.map +1 -0
- package/dist/tools/get-codebase-metadata.js +53 -0
- package/dist/tools/get-codebase-metadata.js.map +1 -0
- package/dist/tools/get-indexing-status.d.ts +5 -0
- package/dist/tools/get-indexing-status.d.ts.map +1 -0
- package/dist/tools/get-indexing-status.js +44 -0
- package/dist/tools/get-indexing-status.js.map +1 -0
- package/dist/tools/get-memory.d.ts +5 -0
- package/dist/tools/get-memory.d.ts.map +1 -0
- package/dist/tools/get-memory.js +89 -0
- package/dist/tools/get-memory.js.map +1 -0
- package/dist/tools/get-style-guide.d.ts +5 -0
- package/dist/tools/get-style-guide.d.ts.map +1 -0
- package/dist/tools/get-style-guide.js +151 -0
- package/dist/tools/get-style-guide.js.map +1 -0
- package/dist/tools/get-symbol-references.d.ts +5 -0
- package/dist/tools/get-symbol-references.d.ts.map +1 -0
- package/dist/tools/get-symbol-references.js +70 -0
- package/dist/tools/get-symbol-references.js.map +1 -0
- package/dist/tools/get-team-patterns.d.ts +5 -0
- package/dist/tools/get-team-patterns.d.ts.map +1 -0
- package/dist/tools/get-team-patterns.js +147 -0
- package/dist/tools/get-team-patterns.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +41 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/refresh-index.d.ts +5 -0
- package/dist/tools/refresh-index.d.ts.map +1 -0
- package/dist/tools/refresh-index.js +40 -0
- package/dist/tools/refresh-index.js.map +1 -0
- package/dist/tools/remember.d.ts +5 -0
- package/dist/tools/remember.d.ts.map +1 -0
- package/dist/tools/remember.js +101 -0
- package/dist/tools/remember.js.map +1 -0
- package/dist/tools/search-codebase.d.ts +5 -0
- package/dist/tools/search-codebase.d.ts.map +1 -0
- package/dist/tools/search-codebase.js +745 -0
- package/dist/tools/search-codebase.js.map +1 -0
- package/dist/tools/types.d.ts +223 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/types/index.d.ts +79 -11
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +0 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/ast-chunker.d.ts +71 -0
- package/dist/utils/ast-chunker.d.ts.map +1 -0
- package/dist/utils/ast-chunker.js +453 -0
- package/dist/utils/ast-chunker.js.map +1 -0
- package/dist/utils/chunking.d.ts.map +1 -1
- package/dist/utils/chunking.js +10 -3
- package/dist/utils/chunking.js.map +1 -1
- package/dist/utils/language-detection.d.ts.map +1 -1
- package/dist/utils/language-detection.js +26 -1
- package/dist/utils/language-detection.js.map +1 -1
- package/dist/utils/tree-sitter.d.ts +28 -0
- package/dist/utils/tree-sitter.d.ts.map +1 -0
- package/dist/utils/tree-sitter.js +422 -0
- package/dist/utils/tree-sitter.js.map +1 -0
- package/dist/utils/usage-tracker.d.ts +30 -40
- package/dist/utils/usage-tracker.d.ts.map +1 -1
- package/dist/utils/usage-tracker.js +66 -8
- package/dist/utils/usage-tracker.js.map +1 -1
- package/docs/capabilities.md +183 -92
- package/docs/cli.md +196 -0
- package/grammars/.gitkeep +0 -0
- package/grammars/tree-sitter-c.wasm +0 -0
- package/grammars/tree-sitter-c_sharp.wasm +0 -0
- package/grammars/tree-sitter-cpp.wasm +0 -0
- package/grammars/tree-sitter-go.wasm +0 -0
- package/grammars/tree-sitter-java.wasm +0 -0
- package/grammars/tree-sitter-javascript.wasm +0 -0
- package/grammars/tree-sitter-kotlin.wasm +0 -0
- package/grammars/tree-sitter-python.wasm +0 -0
- package/grammars/tree-sitter-rust.wasm +0 -0
- package/grammars/tree-sitter-tsx.wasm +0 -0
- package/grammars/tree-sitter-typescript.wasm +0 -0
- package/package.json +153 -157
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-sitter.d.ts","sourceRoot":"","sources":["../../src/utils/tree-sitter.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAmGD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5D;AA2KD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAqF5C;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAqCD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,CAmFxC"}
|
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
import { createRequire } from 'module';
|
|
2
|
+
import { Language, Parser } from 'web-tree-sitter';
|
|
3
|
+
import { CURATED_LANGUAGE_TO_WASM, supportsCuratedTreeSitter, resolveGrammarPath } from '../grammars/manifest.js';
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
const CORE_WASM_PATH = require.resolve('web-tree-sitter/tree-sitter.wasm');
|
|
6
|
+
const SYMBOL_CANDIDATE_NODE_TYPES = [
|
|
7
|
+
'class_declaration',
|
|
8
|
+
'class_definition',
|
|
9
|
+
'class_specifier',
|
|
10
|
+
'constructor_declaration',
|
|
11
|
+
'enum_declaration',
|
|
12
|
+
'enum_item',
|
|
13
|
+
'function_declaration',
|
|
14
|
+
'function_definition',
|
|
15
|
+
'function_item',
|
|
16
|
+
'generator_function_declaration',
|
|
17
|
+
'interface_declaration',
|
|
18
|
+
'lexical_declaration',
|
|
19
|
+
'method',
|
|
20
|
+
'method_declaration',
|
|
21
|
+
'method_definition',
|
|
22
|
+
'struct_item',
|
|
23
|
+
'struct_specifier',
|
|
24
|
+
'trait_item',
|
|
25
|
+
'type_alias_declaration',
|
|
26
|
+
'type_declaration',
|
|
27
|
+
'type_spec',
|
|
28
|
+
'variable_declarator'
|
|
29
|
+
];
|
|
30
|
+
const NAME_FIELD_CANDIDATES = ['name', 'declarator', 'property', 'path'];
|
|
31
|
+
const NAME_NODE_TYPE_HINTS = [
|
|
32
|
+
'identifier',
|
|
33
|
+
'type_identifier',
|
|
34
|
+
'property_identifier',
|
|
35
|
+
'scoped_identifier',
|
|
36
|
+
'constant',
|
|
37
|
+
'name'
|
|
38
|
+
];
|
|
39
|
+
const MAX_TREE_SITTER_PARSE_BYTES = 1024 * 1024;
|
|
40
|
+
const TREE_SITTER_PARSE_TIMEOUT_MICROS = 30000000n;
|
|
41
|
+
let initPromise = null;
|
|
42
|
+
const languageCache = new Map();
|
|
43
|
+
const parserCache = new Map();
|
|
44
|
+
function maybeResetParser(parser) {
|
|
45
|
+
const maybeReset = parser.reset;
|
|
46
|
+
if (typeof maybeReset === 'function') {
|
|
47
|
+
maybeReset.call(parser);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function evictParser(language, parser) {
|
|
51
|
+
if (parser) {
|
|
52
|
+
maybeResetParser(parser);
|
|
53
|
+
}
|
|
54
|
+
parserCache.delete(language);
|
|
55
|
+
}
|
|
56
|
+
function setParseTimeout(parser) {
|
|
57
|
+
const maybeSetTimeout = parser.setTimeoutMicros;
|
|
58
|
+
if (typeof maybeSetTimeout === 'function') {
|
|
59
|
+
try {
|
|
60
|
+
maybeSetTimeout.call(parser, TREE_SITTER_PARSE_TIMEOUT_MICROS);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
try {
|
|
64
|
+
maybeSetTimeout.call(parser, Number(TREE_SITTER_PARSE_TIMEOUT_MICROS));
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Ignore timeout wiring failures; parser execution still proceeds.
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function sliceUtf8(content, startIndex, endIndex) {
|
|
73
|
+
const utf8 = Buffer.from(content, 'utf8');
|
|
74
|
+
return utf8.subarray(startIndex, endIndex).toString('utf8');
|
|
75
|
+
}
|
|
76
|
+
function extractNodeContent(node, content) {
|
|
77
|
+
const byteSlice = sliceUtf8(content, node.startIndex, node.endIndex);
|
|
78
|
+
const codeUnitSlice = content.slice(node.startIndex, node.endIndex);
|
|
79
|
+
if (node.text === codeUnitSlice && node.text !== byteSlice) {
|
|
80
|
+
return codeUnitSlice;
|
|
81
|
+
}
|
|
82
|
+
return byteSlice;
|
|
83
|
+
}
|
|
84
|
+
function isTreeSitterDebugEnabled() {
|
|
85
|
+
return Boolean(process.env.CODEBASE_CONTEXT_DEBUG);
|
|
86
|
+
}
|
|
87
|
+
export function supportsTreeSitter(language) {
|
|
88
|
+
return supportsCuratedTreeSitter(language);
|
|
89
|
+
}
|
|
90
|
+
async function ensureParserInitialized() {
|
|
91
|
+
if (!initPromise) {
|
|
92
|
+
initPromise = Parser.init({
|
|
93
|
+
locateFile(scriptName) {
|
|
94
|
+
if (scriptName === 'tree-sitter.wasm') {
|
|
95
|
+
return CORE_WASM_PATH;
|
|
96
|
+
}
|
|
97
|
+
return scriptName;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
await initPromise;
|
|
102
|
+
}
|
|
103
|
+
async function loadLanguage(language) {
|
|
104
|
+
const wasmFile = CURATED_LANGUAGE_TO_WASM[language];
|
|
105
|
+
if (!wasmFile) {
|
|
106
|
+
throw new Error(`Tree-sitter grammar is not configured for '${language}'.`);
|
|
107
|
+
}
|
|
108
|
+
let cachedLanguage = languageCache.get(language);
|
|
109
|
+
if (!cachedLanguage) {
|
|
110
|
+
const { wasmPath } = resolveGrammarPath(language, import.meta.url);
|
|
111
|
+
cachedLanguage = Language.load(wasmPath).catch((err) => {
|
|
112
|
+
// Evict failed entry so later calls can retry after fixes
|
|
113
|
+
languageCache.delete(language);
|
|
114
|
+
throw err;
|
|
115
|
+
});
|
|
116
|
+
languageCache.set(language, cachedLanguage);
|
|
117
|
+
}
|
|
118
|
+
return cachedLanguage;
|
|
119
|
+
}
|
|
120
|
+
async function getParserForLanguage(language) {
|
|
121
|
+
let cachedParser = parserCache.get(language);
|
|
122
|
+
if (!cachedParser) {
|
|
123
|
+
cachedParser = (async () => {
|
|
124
|
+
await ensureParserInitialized();
|
|
125
|
+
const parser = new Parser();
|
|
126
|
+
try {
|
|
127
|
+
parser.setLanguage(await loadLanguage(language));
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
// setLanguage failed — evict both caches so retry is possible
|
|
131
|
+
parserCache.delete(language);
|
|
132
|
+
languageCache.delete(language);
|
|
133
|
+
throw err;
|
|
134
|
+
}
|
|
135
|
+
return parser;
|
|
136
|
+
})();
|
|
137
|
+
parserCache.set(language, cachedParser);
|
|
138
|
+
}
|
|
139
|
+
return cachedParser;
|
|
140
|
+
}
|
|
141
|
+
function getNodeKind(nodeType) {
|
|
142
|
+
if (nodeType.includes('class'))
|
|
143
|
+
return 'class';
|
|
144
|
+
if (nodeType.includes('interface'))
|
|
145
|
+
return 'interface';
|
|
146
|
+
if (nodeType.includes('enum'))
|
|
147
|
+
return 'enum';
|
|
148
|
+
if (nodeType.includes('struct'))
|
|
149
|
+
return 'struct';
|
|
150
|
+
if (nodeType.includes('trait'))
|
|
151
|
+
return 'trait';
|
|
152
|
+
if (nodeType.includes('constructor'))
|
|
153
|
+
return 'method';
|
|
154
|
+
if (nodeType.includes('method'))
|
|
155
|
+
return 'method';
|
|
156
|
+
if (nodeType.includes('type_alias') || nodeType === 'type_spec')
|
|
157
|
+
return 'type';
|
|
158
|
+
return 'function';
|
|
159
|
+
}
|
|
160
|
+
function normalizeSymbolName(rawName) {
|
|
161
|
+
return rawName
|
|
162
|
+
.replace(/[\s\n\t]+/g, ' ')
|
|
163
|
+
.trim()
|
|
164
|
+
.replace(/^[:@#]+/, '');
|
|
165
|
+
}
|
|
166
|
+
function maybeGetNameNode(node) {
|
|
167
|
+
for (const fieldName of NAME_FIELD_CANDIDATES) {
|
|
168
|
+
const field = node.childForFieldName(fieldName);
|
|
169
|
+
if (field) {
|
|
170
|
+
return field;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
for (const child of node.namedChildren) {
|
|
174
|
+
if (!child)
|
|
175
|
+
continue;
|
|
176
|
+
if (NAME_NODE_TYPE_HINTS.some((hint) => child.type.includes(hint))) {
|
|
177
|
+
return child;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
function extractNodeName(node) {
|
|
183
|
+
const nameNode = maybeGetNameNode(node);
|
|
184
|
+
if (nameNode?.text) {
|
|
185
|
+
const normalized = normalizeSymbolName(nameNode.text);
|
|
186
|
+
if (normalized) {
|
|
187
|
+
return normalized;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const compact = node.text.slice(0, 120).replace(/\s+/g, ' ').trim();
|
|
191
|
+
const match = compact.match(/(?:class|interface|enum|struct|trait|function|def|fn)\s+([A-Za-z_][\w$]*)/);
|
|
192
|
+
if (match?.[1]) {
|
|
193
|
+
return match[1];
|
|
194
|
+
}
|
|
195
|
+
return 'anonymous';
|
|
196
|
+
}
|
|
197
|
+
function isFunctionVariableDeclarator(node) {
|
|
198
|
+
if (node.type !== 'variable_declarator') {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
const valueNode = node.childForFieldName('value');
|
|
202
|
+
if (!valueNode) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
return valueNode.type === 'arrow_function' || valueNode.type === 'function_expression';
|
|
206
|
+
}
|
|
207
|
+
function shouldSkipNode(language, node) {
|
|
208
|
+
if (node.type === 'variable_declarator') {
|
|
209
|
+
return (!['javascript', 'javascriptreact', 'typescript', 'typescriptreact'].includes(language) ||
|
|
210
|
+
!isFunctionVariableDeclarator(node));
|
|
211
|
+
}
|
|
212
|
+
if (node.type === 'lexical_declaration') {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
if (node.type === 'type_declaration') {
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
function getSymbolRangeNode(node) {
|
|
221
|
+
const parent = node.parent;
|
|
222
|
+
if (parent?.type === 'export_statement') {
|
|
223
|
+
return parent;
|
|
224
|
+
}
|
|
225
|
+
return node;
|
|
226
|
+
}
|
|
227
|
+
function buildSymbol(node, content) {
|
|
228
|
+
const rangeNode = getSymbolRangeNode(node);
|
|
229
|
+
return {
|
|
230
|
+
name: extractNodeName(node),
|
|
231
|
+
kind: getNodeKind(node.type),
|
|
232
|
+
startLine: rangeNode.startPosition.row + 1,
|
|
233
|
+
endLine: rangeNode.endPosition.row + 1,
|
|
234
|
+
startIndex: rangeNode.startIndex,
|
|
235
|
+
endIndex: rangeNode.endIndex,
|
|
236
|
+
content: extractNodeContent(rangeNode, content),
|
|
237
|
+
nodeType: node.type
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
export async function extractTreeSitterSymbols(content, language) {
|
|
241
|
+
if (!supportsTreeSitter(language) || !content.trim()) {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
if (Buffer.byteLength(content, 'utf8') > MAX_TREE_SITTER_PARSE_BYTES) {
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
const parser = await getParserForLanguage(language);
|
|
249
|
+
setParseTimeout(parser);
|
|
250
|
+
let tree;
|
|
251
|
+
try {
|
|
252
|
+
tree = parser.parse(content);
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
evictParser(language, parser);
|
|
256
|
+
throw error;
|
|
257
|
+
}
|
|
258
|
+
if (!tree) {
|
|
259
|
+
evictParser(language, parser);
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
try {
|
|
263
|
+
const hasErrorValue = tree.rootNode.hasError;
|
|
264
|
+
const rootHasError = typeof hasErrorValue === 'function'
|
|
265
|
+
? Boolean(hasErrorValue())
|
|
266
|
+
: Boolean(hasErrorValue);
|
|
267
|
+
if (rootHasError) {
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
const nodes = tree.rootNode.descendantsOfType([...SYMBOL_CANDIDATE_NODE_TYPES]);
|
|
271
|
+
const seen = new Set();
|
|
272
|
+
const symbols = [];
|
|
273
|
+
for (const node of nodes) {
|
|
274
|
+
if (!node || !node.isNamed || shouldSkipNode(language, node)) {
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
const symbol = buildSymbol(node, content);
|
|
278
|
+
if (symbol.name === 'anonymous') {
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
const key = `${symbol.kind}:${symbol.name}:${symbol.startLine}:${symbol.endLine}`;
|
|
282
|
+
if (seen.has(key)) {
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
seen.add(key);
|
|
286
|
+
symbols.push(symbol);
|
|
287
|
+
}
|
|
288
|
+
symbols.sort((a, b) => {
|
|
289
|
+
if (a.startLine !== b.startLine) {
|
|
290
|
+
return a.startLine - b.startLine;
|
|
291
|
+
}
|
|
292
|
+
return a.endLine - b.endLine;
|
|
293
|
+
});
|
|
294
|
+
return {
|
|
295
|
+
grammarFile: CURATED_LANGUAGE_TO_WASM[language] ?? language,
|
|
296
|
+
symbols
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
finally {
|
|
300
|
+
tree.delete();
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
evictParser(language);
|
|
305
|
+
if (isTreeSitterDebugEnabled()) {
|
|
306
|
+
console.error(`[DEBUG] Tree-sitter symbol extraction failed for '${language}':`, error instanceof Error ? error.message : String(error));
|
|
307
|
+
}
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
const IDENTIFIER_NODE_TYPES = [
|
|
312
|
+
'identifier',
|
|
313
|
+
'type_identifier',
|
|
314
|
+
'property_identifier',
|
|
315
|
+
'field_identifier',
|
|
316
|
+
'shorthand_property_identifier_pattern',
|
|
317
|
+
'shorthand_property_identifier',
|
|
318
|
+
'jsx_identifier',
|
|
319
|
+
'scoped_identifier'
|
|
320
|
+
];
|
|
321
|
+
const NON_CODE_ANCESTOR_TYPE_FRAGMENTS = [
|
|
322
|
+
'comment',
|
|
323
|
+
'string',
|
|
324
|
+
'template_string',
|
|
325
|
+
'regex',
|
|
326
|
+
'jsx_text'
|
|
327
|
+
];
|
|
328
|
+
function isInsideNonCodeContext(node) {
|
|
329
|
+
let cursor = node;
|
|
330
|
+
let depth = 0;
|
|
331
|
+
while (cursor && depth < 40) {
|
|
332
|
+
const cursorType = cursor.type;
|
|
333
|
+
for (const fragment of NON_CODE_ANCESTOR_TYPE_FRAGMENTS) {
|
|
334
|
+
if (cursorType.includes(fragment)) {
|
|
335
|
+
return true;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
cursor = cursor.parent;
|
|
339
|
+
depth += 1;
|
|
340
|
+
}
|
|
341
|
+
return false;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Find identifier occurrences of `symbol` in `content` using Tree-sitter.
|
|
345
|
+
* Returns null when Tree-sitter isn't available/supported, so callers can fall back safely.
|
|
346
|
+
*/
|
|
347
|
+
export async function findIdentifierOccurrences(content, language, symbol) {
|
|
348
|
+
const normalizedSymbol = symbol.trim();
|
|
349
|
+
if (!normalizedSymbol) {
|
|
350
|
+
return [];
|
|
351
|
+
}
|
|
352
|
+
if (!supportsTreeSitter(language) || !content.trim()) {
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
if (Buffer.byteLength(content, 'utf8') > MAX_TREE_SITTER_PARSE_BYTES) {
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
358
|
+
try {
|
|
359
|
+
const parser = await getParserForLanguage(language);
|
|
360
|
+
setParseTimeout(parser);
|
|
361
|
+
let tree;
|
|
362
|
+
try {
|
|
363
|
+
tree = parser.parse(content);
|
|
364
|
+
}
|
|
365
|
+
catch (error) {
|
|
366
|
+
evictParser(language, parser);
|
|
367
|
+
throw error;
|
|
368
|
+
}
|
|
369
|
+
if (!tree) {
|
|
370
|
+
evictParser(language, parser);
|
|
371
|
+
return null;
|
|
372
|
+
}
|
|
373
|
+
try {
|
|
374
|
+
const hasErrorValue = tree.rootNode.hasError;
|
|
375
|
+
const rootHasError = typeof hasErrorValue === 'function'
|
|
376
|
+
? Boolean(hasErrorValue())
|
|
377
|
+
: Boolean(hasErrorValue);
|
|
378
|
+
if (rootHasError) {
|
|
379
|
+
return null;
|
|
380
|
+
}
|
|
381
|
+
const nodes = tree.rootNode.descendantsOfType([...IDENTIFIER_NODE_TYPES]);
|
|
382
|
+
const occurrences = [];
|
|
383
|
+
const seen = new Set();
|
|
384
|
+
for (const node of nodes) {
|
|
385
|
+
if (!node || !node.isNamed)
|
|
386
|
+
continue;
|
|
387
|
+
if (node.text !== normalizedSymbol)
|
|
388
|
+
continue;
|
|
389
|
+
if (isInsideNonCodeContext(node))
|
|
390
|
+
continue;
|
|
391
|
+
const occ = {
|
|
392
|
+
line: node.startPosition.row + 1,
|
|
393
|
+
startIndex: node.startIndex,
|
|
394
|
+
endIndex: node.endIndex,
|
|
395
|
+
nodeType: node.type
|
|
396
|
+
};
|
|
397
|
+
const key = `${occ.line}:${occ.startIndex}:${occ.endIndex}:${occ.nodeType}`;
|
|
398
|
+
if (seen.has(key))
|
|
399
|
+
continue;
|
|
400
|
+
seen.add(key);
|
|
401
|
+
occurrences.push(occ);
|
|
402
|
+
}
|
|
403
|
+
occurrences.sort((a, b) => {
|
|
404
|
+
if (a.line !== b.line)
|
|
405
|
+
return a.line - b.line;
|
|
406
|
+
return a.startIndex - b.startIndex;
|
|
407
|
+
});
|
|
408
|
+
return occurrences;
|
|
409
|
+
}
|
|
410
|
+
finally {
|
|
411
|
+
tree.delete();
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
catch (error) {
|
|
415
|
+
evictParser(language);
|
|
416
|
+
if (isTreeSitterDebugEnabled()) {
|
|
417
|
+
console.error(`[DEBUG] Tree-sitter identifier occurrence scan failed for '${language}':`, error instanceof Error ? error.message : String(error));
|
|
418
|
+
}
|
|
419
|
+
return null;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=tree-sitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-sitter.js","sourceRoot":"","sources":["../../src/utils/tree-sitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAa,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAkBjC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;AAE3E,MAAM,2BAA2B,GAAG;IAClC,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,yBAAyB;IACzB,kBAAkB;IAClB,WAAW;IACX,sBAAsB;IACtB,qBAAqB;IACrB,eAAe;IACf,gCAAgC;IAChC,uBAAuB;IACvB,qBAAqB;IACrB,QAAQ;IACR,oBAAoB;IACpB,mBAAmB;IACnB,aAAa;IACb,kBAAkB;IAClB,YAAY;IACZ,wBAAwB;IACxB,kBAAkB;IAClB,WAAW;IACX,qBAAqB;CACb,CAAC;AAEX,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,CAAU,CAAC;AAClF,MAAM,oBAAoB,GAAG;IAC3B,YAAY;IACZ,iBAAiB;IACjB,qBAAqB;IACrB,mBAAmB;IACnB,UAAU;IACV,MAAM;CACE,CAAC;AAEX,MAAM,2BAA2B,GAAG,IAAI,GAAG,IAAI,CAAC;AAChD,MAAM,gCAAgC,GAAG,SAAW,CAAC;AAErD,IAAI,WAAW,GAAyB,IAAI,CAAC;AAC7C,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;AAC3D,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEvD,SAAS,gBAAgB,CAAC,MAAc;IACtC,MAAM,UAAU,GAAI,MAA0C,CAAC,KAAK,CAAC;IACrE,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;QACrC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,MAAe;IACpD,IAAI,MAAM,EAAE,CAAC;QACX,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IACD,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe,CAAC,MAAc;IACrC,MAAM,eAAe,GACnB,MACD,CAAC,gBAAgB,CAAC;IACnB,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC;gBACH,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;YACzE,CAAC;YAAC,MAAM,CAAC;gBACP,mEAAmE;YACrE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,UAAkB,EAAE,QAAgB;IACtE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAU,EAAE,OAAe;IACrD,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEpE,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3D,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,wBAAwB;IAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;YACxB,UAAU,CAAC,UAAkB;gBAC3B,IAAI,UAAU,KAAK,kBAAkB,EAAE,CAAC;oBACtC,OAAO,cAAc,CAAC;gBACxB,CAAC;gBACD,OAAO,UAAU,CAAC;YACpB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8CAA8C,QAAQ,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACrD,0DAA0D;YAC1D,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,QAAgB;IAClD,IAAI,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE;YACzB,MAAM,uBAAuB,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,CAAC,WAAW,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,8DAA8D;gBAC9D,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC7B,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC/B,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE,CAAC;QACL,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/C,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,WAAW,CAAC;IACvD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7C,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACjD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/C,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACjD,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC;IAC/E,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,OAAO,OAAO;SACX,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;SAC1B,IAAI,EAAE;SACN,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAU;IAClC,KAAK,MAAM,SAAS,IAAI,qBAAqB,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACnE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,IAAU;IACjC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CACzB,2EAA2E,CAC5E,CAAC;IACF,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACf,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAU;IAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,SAAS,CAAC,IAAI,KAAK,gBAAgB,IAAI,SAAS,CAAC,IAAI,KAAK,qBAAqB,CAAC;AACzF,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,IAAU;IAClD,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACxC,OAAO,CACL,CAAC,CAAC,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACtF,CAAC,4BAA4B,CAAC,IAAI,CAAC,CACpC,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAU;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,MAAM,EAAE,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,IAAU,EAAE,OAAe;IAC9C,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE3C,OAAO;QACL,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;QAC3B,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,SAAS,EAAE,SAAS,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;QAC1C,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;QACtC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,OAAO,EAAE,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC;QAC/C,QAAQ,EAAE,IAAI,CAAC,IAAI;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAe,EACf,QAAgB;IAEhB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,2BAA2B,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACpD,eAAe,CAAC,MAAM,CAAC,CAAC;QAExB,IAAI,IAAiC,CAAC;QACtC,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAmB,CAAC;YACxD,MAAM,YAAY,GAChB,OAAO,aAAa,KAAK,UAAU;gBACjC,CAAC,CAAC,OAAO,CAAE,aAA+B,EAAE,CAAC;gBAC7C,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAE7B,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,GAAG,2BAA2B,CAAC,CAAC,CAAC;YAChF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,MAAM,OAAO,GAAuB,EAAE,CAAC;YAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;oBAC7D,SAAS;gBACX,CAAC;gBAED,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC1C,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAChC,SAAS;gBACX,CAAC;gBAED,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClF,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpB,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;oBAChC,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;gBACnC,CAAC;gBACD,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,WAAW,EAAE,wBAAwB,CAAC,QAAQ,CAAC,IAAI,QAAQ;gBAC3D,OAAO;aACR,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEtB,IAAI,wBAAwB,EAAE,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CACX,qDAAqD,QAAQ,IAAI,EACjE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AASD,MAAM,qBAAqB,GAAG;IAC5B,YAAY;IACZ,iBAAiB;IACjB,qBAAqB;IACrB,kBAAkB;IAClB,uCAAuC;IACvC,+BAA+B;IAC/B,gBAAgB;IAChB,mBAAmB;CACX,CAAC;AAEX,MAAM,gCAAgC,GAAG;IACvC,SAAS;IACT,QAAQ;IACR,iBAAiB;IACjB,OAAO;IACP,UAAU;CACF,CAAC;AAEX,SAAS,sBAAsB,CAAC,IAAU;IACxC,IAAI,MAAM,GAAgB,IAAI,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,MAAM,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QAC/B,KAAK,MAAM,QAAQ,IAAI,gCAAgC,EAAE,CAAC;YACxD,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAe,EACf,QAAgB,EAChB,MAAc;IAEd,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,2BAA2B,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACpD,eAAe,CAAC,MAAM,CAAC,CAAC;QAExB,IAAI,IAAiC,CAAC;QACtC,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9B,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAmB,CAAC;YACxD,MAAM,YAAY,GAChB,OAAO,aAAa,KAAK,UAAU;gBACjC,CAAC,CAAC,OAAO,CAAE,aAA+B,EAAE,CAAC;gBAC7C,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAE7B,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;YAC1E,MAAM,WAAW,GAA2B,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACrC,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB;oBAAE,SAAS;gBAC7C,IAAI,sBAAsB,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAE3C,MAAM,GAAG,GAAyB;oBAChC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;oBAChC,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,QAAQ,EAAE,IAAI,CAAC,IAAI;iBACpB,CAAC;gBACF,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC5E,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;YAED,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;oBAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC9C,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;YACrC,CAAC,CAAC,CAAC;YAEH,OAAO,WAAW,CAAC;QACrB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEtB,IAAI,wBAAwB,EAAE,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CACX,8DAA8D,QAAQ,IAAI,EAC1E,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -2,44 +2,34 @@
|
|
|
2
2
|
* Library Usage Tracker & Pattern Detector
|
|
3
3
|
* Tracks what libraries are used and detects common coding patterns
|
|
4
4
|
*/
|
|
5
|
+
import type { PatternTrend, PatternCandidateBase, IntelligenceGoldenFile, UsageLocation } from '../types/index.js';
|
|
6
|
+
export type { PatternTrend };
|
|
5
7
|
export interface LibraryUsageStats {
|
|
6
8
|
[libraryPath: string]: {
|
|
7
9
|
count: number;
|
|
8
10
|
examples: string[];
|
|
9
11
|
};
|
|
10
12
|
}
|
|
11
|
-
|
|
13
|
+
/** Runtime pattern candidate — extends the base with fields only needed during indexing */
|
|
14
|
+
type RuntimePatternPrimary = PatternCandidateBase & {
|
|
15
|
+
count: number;
|
|
16
|
+
examples: string[];
|
|
17
|
+
canonicalExample?: {
|
|
18
|
+
file: string;
|
|
19
|
+
snippet: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
12
22
|
export interface PatternUsageStats {
|
|
13
23
|
[patternName: string]: {
|
|
14
|
-
primary:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
frequency: string;
|
|
18
|
-
examples: string[];
|
|
19
|
-
canonicalExample?: {
|
|
20
|
-
file: string;
|
|
21
|
-
snippet: string;
|
|
22
|
-
};
|
|
23
|
-
newestFileDate?: string;
|
|
24
|
-
trend?: PatternTrend;
|
|
25
|
-
/** Actionable guidance: "USE: X" or "CAUTION: Y" */
|
|
26
|
-
guidance?: string;
|
|
27
|
-
};
|
|
28
|
-
alsoDetected?: Array<{
|
|
29
|
-
name: string;
|
|
24
|
+
primary: RuntimePatternPrimary;
|
|
25
|
+
/** Actionable guidance for alternative patterns */
|
|
26
|
+
alsoDetected?: Array<PatternCandidateBase & {
|
|
30
27
|
count: number;
|
|
31
|
-
frequency: string;
|
|
32
|
-
newestFileDate?: string;
|
|
33
|
-
trend?: PatternTrend;
|
|
34
|
-
/** Actionable guidance for alternative patterns */
|
|
35
|
-
guidance?: string;
|
|
36
28
|
}>;
|
|
37
29
|
};
|
|
38
30
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
line: number;
|
|
42
|
-
}
|
|
31
|
+
/** File + line reference for tracked imports */
|
|
32
|
+
export type ImportUsage = UsageLocation;
|
|
43
33
|
export interface ComponentUsageInfo {
|
|
44
34
|
definedIn?: string;
|
|
45
35
|
usedIn: ImportUsage[];
|
|
@@ -82,17 +72,11 @@ interface TestFrameworkConfig {
|
|
|
82
72
|
indicators: string[];
|
|
83
73
|
priority: number;
|
|
84
74
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
signals: boolean;
|
|
91
|
-
computed: boolean;
|
|
92
|
-
effect: boolean;
|
|
93
|
-
standalone: boolean;
|
|
94
|
-
signalInputs: boolean;
|
|
95
|
-
};
|
|
75
|
+
/** Runtime golden file — extends the serialized shape with generic pattern detection flags.
|
|
76
|
+
* Keys are "category:name" strings (e.g. "dependencyInjection:inject() function").
|
|
77
|
+
* Framework-specific field names never appear here — they stay in their analyzer. */
|
|
78
|
+
export interface GoldenFile extends IntelligenceGoldenFile {
|
|
79
|
+
patterns: Record<string, boolean>;
|
|
96
80
|
}
|
|
97
81
|
export declare class PatternDetector {
|
|
98
82
|
private patterns;
|
|
@@ -108,7 +92,7 @@ export declare class PatternDetector {
|
|
|
108
92
|
/**
|
|
109
93
|
* Track a file as a potential "Golden File" - a file that demonstrates multiple modern patterns
|
|
110
94
|
*/
|
|
111
|
-
trackGoldenFile(file: string, score: number, patterns:
|
|
95
|
+
trackGoldenFile(file: string, score: number, patterns: Record<string, boolean>): void;
|
|
112
96
|
/**
|
|
113
97
|
* Get top N Golden Files - files that best demonstrate all modern patterns together
|
|
114
98
|
*/
|
|
@@ -164,10 +148,15 @@ export interface UnusedExport {
|
|
|
164
148
|
file: string;
|
|
165
149
|
exports: string[];
|
|
166
150
|
}
|
|
151
|
+
export interface ImportEdgeDetail {
|
|
152
|
+
line?: number;
|
|
153
|
+
importedSymbols?: string[];
|
|
154
|
+
}
|
|
167
155
|
export declare class InternalFileGraph {
|
|
168
156
|
private imports;
|
|
169
157
|
private exports;
|
|
170
158
|
private importedSymbols;
|
|
159
|
+
private importDetails;
|
|
171
160
|
private rootPath;
|
|
172
161
|
constructor(rootPath: string);
|
|
173
162
|
/**
|
|
@@ -178,7 +167,7 @@ export declare class InternalFileGraph {
|
|
|
178
167
|
* Track that importingFile imports importedFile
|
|
179
168
|
* Both should be absolute paths; they will be normalized internally.
|
|
180
169
|
*/
|
|
181
|
-
trackImport(importingFile: string, importedFile: string, importedSymbols?: string[]): void;
|
|
170
|
+
trackImport(importingFile: string, importedFile: string, line?: number, importedSymbols?: string[]): void;
|
|
182
171
|
/**
|
|
183
172
|
* Track exports from a file
|
|
184
173
|
*/
|
|
@@ -211,6 +200,7 @@ export declare class InternalFileGraph {
|
|
|
211
200
|
toJSON(): {
|
|
212
201
|
imports: Record<string, string[]>;
|
|
213
202
|
exports: Record<string, FileExport[]>;
|
|
203
|
+
importDetails?: Record<string, Record<string, ImportEdgeDetail>>;
|
|
214
204
|
stats: {
|
|
215
205
|
files: number;
|
|
216
206
|
edges: number;
|
|
@@ -223,7 +213,7 @@ export declare class InternalFileGraph {
|
|
|
223
213
|
static fromJSON(data: {
|
|
224
214
|
imports?: Record<string, string[]>;
|
|
225
215
|
exports?: Record<string, FileExport[]>;
|
|
216
|
+
importDetails?: Record<string, Record<string, ImportEdgeDetail>>;
|
|
226
217
|
}, rootPath: string): InternalFileGraph;
|
|
227
218
|
}
|
|
228
|
-
export {};
|
|
229
219
|
//# sourceMappingURL=usage-tracker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/usage-tracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,
|
|
1
|
+
{"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/usage-tracker.ts"],"names":[],"mappings":"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"}
|