@colbymchenry/codegraph 0.6.8 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +179 -476
- package/dist/bin/codegraph.d.ts +0 -5
- package/dist/bin/codegraph.d.ts.map +1 -1
- package/dist/bin/codegraph.js +217 -237
- package/dist/bin/codegraph.js.map +1 -1
- package/dist/bin/uninstall.d.ts +0 -1
- package/dist/bin/uninstall.d.ts.map +1 -1
- package/dist/bin/uninstall.js +3 -29
- package/dist/bin/uninstall.js.map +1 -1
- package/dist/context/index.d.ts +3 -5
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +497 -46
- package/dist/context/index.js.map +1 -1
- package/dist/db/migrations.d.ts +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +10 -1
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/queries.d.ts +53 -0
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +244 -14
- package/dist/db/queries.js.map +1 -1
- package/dist/db/schema.sql +1 -16
- package/dist/extraction/dfm-extractor.d.ts +31 -0
- package/dist/extraction/dfm-extractor.d.ts.map +1 -0
- package/dist/extraction/dfm-extractor.js +151 -0
- package/dist/extraction/dfm-extractor.js.map +1 -0
- package/dist/extraction/grammars.d.ts +9 -1
- package/dist/extraction/grammars.d.ts.map +1 -1
- package/dist/extraction/grammars.js +34 -2
- package/dist/extraction/grammars.js.map +1 -1
- package/dist/extraction/index.d.ts +7 -1
- package/dist/extraction/index.d.ts.map +1 -1
- package/dist/extraction/index.js +373 -22
- package/dist/extraction/index.js.map +1 -1
- package/dist/extraction/languages/c-cpp.d.ts +4 -0
- package/dist/extraction/languages/c-cpp.d.ts.map +1 -0
- package/dist/extraction/languages/c-cpp.js +126 -0
- package/dist/extraction/languages/c-cpp.js.map +1 -0
- package/dist/extraction/languages/csharp.d.ts +3 -0
- package/dist/extraction/languages/csharp.d.ts.map +1 -0
- package/dist/extraction/languages/csharp.js +72 -0
- package/dist/extraction/languages/csharp.js.map +1 -0
- package/dist/extraction/languages/dart.d.ts +3 -0
- package/dist/extraction/languages/dart.d.ts.map +1 -0
- package/dist/extraction/languages/dart.js +192 -0
- package/dist/extraction/languages/dart.js.map +1 -0
- package/dist/extraction/languages/go.d.ts +3 -0
- package/dist/extraction/languages/go.d.ts.map +1 -0
- package/dist/extraction/languages/go.js +58 -0
- package/dist/extraction/languages/go.js.map +1 -0
- package/dist/extraction/languages/index.d.ts +10 -0
- package/dist/extraction/languages/index.d.ts.map +1 -0
- package/dist/extraction/languages/index.js +43 -0
- package/dist/extraction/languages/index.js.map +1 -0
- package/dist/extraction/languages/java.d.ts +3 -0
- package/dist/extraction/languages/java.d.ts.map +1 -0
- package/dist/extraction/languages/java.js +64 -0
- package/dist/extraction/languages/java.js.map +1 -0
- package/dist/extraction/languages/javascript.d.ts +3 -0
- package/dist/extraction/languages/javascript.d.ts.map +1 -0
- package/dist/extraction/languages/javascript.js +90 -0
- package/dist/extraction/languages/javascript.js.map +1 -0
- package/dist/extraction/languages/kotlin.d.ts +3 -0
- package/dist/extraction/languages/kotlin.d.ts.map +1 -0
- package/dist/extraction/languages/kotlin.js +253 -0
- package/dist/extraction/languages/kotlin.js.map +1 -0
- package/dist/extraction/languages/pascal.d.ts +3 -0
- package/dist/extraction/languages/pascal.d.ts.map +1 -0
- package/dist/extraction/languages/pascal.js +66 -0
- package/dist/extraction/languages/pascal.js.map +1 -0
- package/dist/extraction/languages/php.d.ts +3 -0
- package/dist/extraction/languages/php.d.ts.map +1 -0
- package/dist/extraction/languages/php.js +107 -0
- package/dist/extraction/languages/php.js.map +1 -0
- package/dist/extraction/languages/python.d.ts +3 -0
- package/dist/extraction/languages/python.d.ts.map +1 -0
- package/dist/extraction/languages/python.js +56 -0
- package/dist/extraction/languages/python.js.map +1 -0
- package/dist/extraction/languages/ruby.d.ts +3 -0
- package/dist/extraction/languages/ruby.d.ts.map +1 -0
- package/dist/extraction/languages/ruby.js +114 -0
- package/dist/extraction/languages/ruby.js.map +1 -0
- package/dist/extraction/languages/rust.d.ts +3 -0
- package/dist/extraction/languages/rust.d.ts.map +1 -0
- package/dist/extraction/languages/rust.js +109 -0
- package/dist/extraction/languages/rust.js.map +1 -0
- package/dist/extraction/languages/swift.d.ts +3 -0
- package/dist/extraction/languages/swift.d.ts.map +1 -0
- package/dist/extraction/languages/swift.js +91 -0
- package/dist/extraction/languages/swift.js.map +1 -0
- package/dist/extraction/languages/typescript.d.ts +3 -0
- package/dist/extraction/languages/typescript.d.ts.map +1 -0
- package/dist/extraction/languages/typescript.js +129 -0
- package/dist/extraction/languages/typescript.js.map +1 -0
- package/dist/extraction/liquid-extractor.d.ts +52 -0
- package/dist/extraction/liquid-extractor.d.ts.map +1 -0
- package/dist/extraction/liquid-extractor.js +313 -0
- package/dist/extraction/liquid-extractor.js.map +1 -0
- package/dist/extraction/parse-worker.d.ts +8 -0
- package/dist/extraction/parse-worker.d.ts.map +1 -0
- package/dist/extraction/parse-worker.js +57 -0
- package/dist/extraction/parse-worker.js.map +1 -0
- package/dist/extraction/svelte-extractor.d.ts +47 -0
- package/dist/extraction/svelte-extractor.d.ts.map +1 -0
- package/dist/extraction/svelte-extractor.js +230 -0
- package/dist/extraction/svelte-extractor.js.map +1 -0
- package/dist/extraction/tree-sitter-helpers.d.ts +28 -0
- package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -0
- package/dist/extraction/tree-sitter-helpers.js +103 -0
- package/dist/extraction/tree-sitter-helpers.js.map +1 -0
- package/dist/extraction/tree-sitter-types.d.ts +179 -0
- package/dist/extraction/tree-sitter-types.d.ts.map +1 -0
- package/dist/extraction/tree-sitter-types.js +10 -0
- package/dist/extraction/tree-sitter-types.js.map +1 -0
- package/dist/extraction/tree-sitter.d.ts +67 -125
- package/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.js +1052 -1855
- package/dist/extraction/tree-sitter.js.map +1 -1
- package/dist/graph/traversal.d.ts.map +1 -1
- package/dist/graph/traversal.js +20 -2
- package/dist/graph/traversal.js.map +1 -1
- package/dist/index.d.ts +29 -53
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -114
- package/dist/index.js.map +1 -1
- package/dist/installer/claude-md-template.d.ts +1 -1
- package/dist/installer/claude-md-template.d.ts.map +1 -1
- package/dist/installer/claude-md-template.js +15 -15
- package/dist/installer/config-writer.d.ts +1 -10
- package/dist/installer/config-writer.d.ts.map +1 -1
- package/dist/installer/config-writer.js +0 -79
- package/dist/installer/config-writer.js.map +1 -1
- package/dist/installer/index.d.ts +3 -4
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +118 -116
- package/dist/installer/index.js.map +1 -1
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +25 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/tools.d.ts +33 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +405 -21
- package/dist/mcp/tools.js.map +1 -1
- package/dist/resolution/frameworks/csharp.js +29 -84
- package/dist/resolution/frameworks/csharp.js.map +1 -1
- package/dist/resolution/frameworks/express.js +44 -48
- package/dist/resolution/frameworks/express.js.map +1 -1
- package/dist/resolution/frameworks/go.js +34 -70
- package/dist/resolution/frameworks/go.js.map +1 -1
- package/dist/resolution/frameworks/java.js +29 -87
- package/dist/resolution/frameworks/java.js.map +1 -1
- package/dist/resolution/frameworks/laravel.js +6 -6
- package/dist/resolution/frameworks/laravel.js.map +1 -1
- package/dist/resolution/frameworks/python.js +33 -98
- package/dist/resolution/frameworks/python.js.map +1 -1
- package/dist/resolution/frameworks/react.js +53 -76
- package/dist/resolution/frameworks/react.js.map +1 -1
- package/dist/resolution/frameworks/ruby.js +12 -24
- package/dist/resolution/frameworks/ruby.js.map +1 -1
- package/dist/resolution/frameworks/rust.js +26 -66
- package/dist/resolution/frameworks/rust.js.map +1 -1
- package/dist/resolution/frameworks/svelte.js +11 -31
- package/dist/resolution/frameworks/svelte.js.map +1 -1
- package/dist/resolution/frameworks/swift.js +42 -160
- package/dist/resolution/frameworks/swift.js.map +1 -1
- package/dist/resolution/index.d.ts +19 -6
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +300 -141
- package/dist/resolution/index.js.map +1 -1
- package/dist/resolution/name-matcher.d.ts +5 -0
- package/dist/resolution/name-matcher.d.ts.map +1 -1
- package/dist/resolution/name-matcher.js +148 -8
- package/dist/resolution/name-matcher.js.map +1 -1
- package/dist/resolution/types.d.ts +1 -1
- package/dist/resolution/types.d.ts.map +1 -1
- package/dist/search/query-utils.d.ts +26 -1
- package/dist/search/query-utils.d.ts.map +1 -1
- package/dist/search/query-utils.js +209 -9
- package/dist/search/query-utils.js.map +1 -1
- package/dist/sync/index.d.ts +2 -4
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +4 -3
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/watcher.d.ts +81 -0
- package/dist/sync/watcher.d.ts.map +1 -0
- package/dist/sync/watcher.js +184 -0
- package/dist/sync/watcher.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/ui/shimmer-progress.d.ts +11 -0
- package/dist/ui/shimmer-progress.d.ts.map +1 -0
- package/dist/ui/shimmer-progress.js +90 -0
- package/dist/ui/shimmer-progress.js.map +1 -0
- package/dist/ui/shimmer-worker.d.ts +2 -0
- package/dist/ui/shimmer-worker.d.ts.map +1 -0
- package/dist/ui/shimmer-worker.js +112 -0
- package/dist/ui/shimmer-worker.js.map +1 -0
- package/dist/ui/types.d.ts +17 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +3 -0
- package/dist/ui/types.js.map +1 -0
- package/dist/vectors/embedder.js +1 -1
- package/dist/vectors/embedder.js.map +1 -1
- package/package.json +7 -12
- package/scripts/postinstall.js +0 -68
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"name-matcher.d.ts","sourceRoot":"","sources":["../../src/resolution/name-matcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAExE;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"name-matcher.d.ts","sourceRoot":"","sources":["../../src/resolution/name-matcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAExE;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CA8CpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CAiCpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CAmCpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CA2HpB;AAiGD;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CAyBpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CAyBpB"}
|
|
@@ -5,11 +5,59 @@
|
|
|
5
5
|
* Handles symbol name matching for reference resolution.
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.matchByFilePath = matchByFilePath;
|
|
8
9
|
exports.matchByExactName = matchByExactName;
|
|
9
10
|
exports.matchByQualifiedName = matchByQualifiedName;
|
|
10
11
|
exports.matchMethodCall = matchMethodCall;
|
|
11
12
|
exports.matchFuzzy = matchFuzzy;
|
|
12
13
|
exports.matchReference = matchReference;
|
|
14
|
+
/**
|
|
15
|
+
* Try to resolve a path-like reference (e.g., "snippets/drawer-menu.liquid")
|
|
16
|
+
* by matching the filename against file nodes.
|
|
17
|
+
*/
|
|
18
|
+
function matchByFilePath(ref, context) {
|
|
19
|
+
if (!ref.referenceName.includes('/'))
|
|
20
|
+
return null;
|
|
21
|
+
// Extract the filename from the path
|
|
22
|
+
const fileName = ref.referenceName.split('/').pop();
|
|
23
|
+
if (!fileName)
|
|
24
|
+
return null;
|
|
25
|
+
// Search for file nodes with this name
|
|
26
|
+
const candidates = context.getNodesByName(fileName);
|
|
27
|
+
const fileNodes = candidates.filter(n => n.kind === 'file');
|
|
28
|
+
if (fileNodes.length === 0)
|
|
29
|
+
return null;
|
|
30
|
+
// Prefer exact path match on qualified_name
|
|
31
|
+
const exactMatch = fileNodes.find(n => n.qualifiedName === ref.referenceName || n.filePath === ref.referenceName);
|
|
32
|
+
if (exactMatch) {
|
|
33
|
+
return {
|
|
34
|
+
original: ref,
|
|
35
|
+
targetNodeId: exactMatch.id,
|
|
36
|
+
confidence: 0.95,
|
|
37
|
+
resolvedBy: 'file-path',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Fall back to suffix match (e.g., ref="snippets/foo.liquid" matches "src/snippets/foo.liquid")
|
|
41
|
+
const suffixMatch = fileNodes.find(n => n.qualifiedName.endsWith(ref.referenceName) || n.filePath.endsWith(ref.referenceName));
|
|
42
|
+
if (suffixMatch) {
|
|
43
|
+
return {
|
|
44
|
+
original: ref,
|
|
45
|
+
targetNodeId: suffixMatch.id,
|
|
46
|
+
confidence: 0.85,
|
|
47
|
+
resolvedBy: 'file-path',
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// If only one file node with this name, use it with lower confidence
|
|
51
|
+
if (fileNodes.length === 1) {
|
|
52
|
+
return {
|
|
53
|
+
original: ref,
|
|
54
|
+
targetNodeId: fileNodes[0].id,
|
|
55
|
+
confidence: 0.7,
|
|
56
|
+
resolvedBy: 'file-path',
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
13
61
|
/**
|
|
14
62
|
* Try to resolve a reference by exact name match
|
|
15
63
|
*/
|
|
@@ -18,12 +66,13 @@ function matchByExactName(ref, context) {
|
|
|
18
66
|
if (candidates.length === 0) {
|
|
19
67
|
return null;
|
|
20
68
|
}
|
|
21
|
-
// If only one match, use it
|
|
69
|
+
// If only one match, use it — but penalize cross-language matches
|
|
22
70
|
if (candidates.length === 1) {
|
|
71
|
+
const isCrossLanguage = candidates[0].language !== ref.language;
|
|
23
72
|
return {
|
|
24
73
|
original: ref,
|
|
25
74
|
targetNodeId: candidates[0].id,
|
|
26
|
-
confidence: 0.9,
|
|
75
|
+
confidence: isCrossLanguage ? 0.5 : 0.9,
|
|
27
76
|
resolvedBy: 'exact-match',
|
|
28
77
|
};
|
|
29
78
|
}
|
|
@@ -89,11 +138,13 @@ function matchMethodCall(ref, context) {
|
|
|
89
138
|
return null;
|
|
90
139
|
}
|
|
91
140
|
const [, objectOrClass, methodName] = match;
|
|
92
|
-
//
|
|
141
|
+
// Strategy 1: Direct class name match (existing logic)
|
|
93
142
|
const classCandidates = context.getNodesByName(objectOrClass);
|
|
94
143
|
for (const classNode of classCandidates) {
|
|
95
144
|
if (classNode.kind === 'class' || classNode.kind === 'struct' || classNode.kind === 'interface') {
|
|
96
|
-
//
|
|
145
|
+
// Skip cross-language class matches
|
|
146
|
+
if (classNode.language !== ref.language)
|
|
147
|
+
continue;
|
|
97
148
|
const nodesInFile = context.getNodesInFile(classNode.filePath);
|
|
98
149
|
const methodNode = nodesInFile.find((n) => n.kind === 'method' &&
|
|
99
150
|
n.name === methodName &&
|
|
@@ -108,8 +159,86 @@ function matchMethodCall(ref, context) {
|
|
|
108
159
|
}
|
|
109
160
|
}
|
|
110
161
|
}
|
|
162
|
+
// Strategy 2: Instance variable receiver - try capitalized form to find class
|
|
163
|
+
// e.g., "permissionEngine" → look for classes containing "PermissionEngine"
|
|
164
|
+
const capitalizedReceiver = objectOrClass.charAt(0).toUpperCase() + objectOrClass.slice(1);
|
|
165
|
+
if (capitalizedReceiver !== objectOrClass) {
|
|
166
|
+
const fuzzyClassCandidates = context.getNodesByName(capitalizedReceiver);
|
|
167
|
+
for (const classNode of fuzzyClassCandidates) {
|
|
168
|
+
if (classNode.kind === 'class' || classNode.kind === 'struct' || classNode.kind === 'interface') {
|
|
169
|
+
// Skip cross-language class matches
|
|
170
|
+
if (classNode.language !== ref.language)
|
|
171
|
+
continue;
|
|
172
|
+
const nodesInFile = context.getNodesInFile(classNode.filePath);
|
|
173
|
+
const methodNode = nodesInFile.find((n) => n.kind === 'method' &&
|
|
174
|
+
n.name === methodName &&
|
|
175
|
+
n.qualifiedName.includes(classNode.name));
|
|
176
|
+
if (methodNode) {
|
|
177
|
+
return {
|
|
178
|
+
original: ref,
|
|
179
|
+
targetNodeId: methodNode.id,
|
|
180
|
+
confidence: 0.8,
|
|
181
|
+
resolvedBy: 'instance-method',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Strategy 3: Find methods by name across the codebase, match by receiver
|
|
188
|
+
// name similarity with the containing class. Handles abbreviated variable
|
|
189
|
+
// names like permissionEngine → PermissionRuleEngine.
|
|
190
|
+
if (methodName) {
|
|
191
|
+
const methodCandidates = context.getNodesByName(methodName);
|
|
192
|
+
const methods = methodCandidates.filter((n) => n.kind === 'method' && n.name === methodName);
|
|
193
|
+
// Filter to same-language candidates first
|
|
194
|
+
const sameLanguageMethods = methods.filter(m => m.language === ref.language);
|
|
195
|
+
const targetMethods = sameLanguageMethods.length > 0 ? sameLanguageMethods : methods;
|
|
196
|
+
// If only one same-language method with this name exists, use it
|
|
197
|
+
if (targetMethods.length === 1 && targetMethods[0].language === ref.language) {
|
|
198
|
+
return {
|
|
199
|
+
original: ref,
|
|
200
|
+
targetNodeId: targetMethods[0].id,
|
|
201
|
+
confidence: 0.7,
|
|
202
|
+
resolvedBy: 'instance-method',
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
// Multiple methods: score by receiver name word overlap with class name
|
|
206
|
+
if (targetMethods.length > 1) {
|
|
207
|
+
const receiverWords = splitCamelCase(objectOrClass);
|
|
208
|
+
let bestMatch;
|
|
209
|
+
let bestScore = 0;
|
|
210
|
+
for (const method of targetMethods) {
|
|
211
|
+
const classWords = splitCamelCase(method.qualifiedName);
|
|
212
|
+
let score = receiverWords.filter(w => classWords.some(cw => cw.toLowerCase() === w.toLowerCase())).length;
|
|
213
|
+
// Bonus for same language
|
|
214
|
+
if (method.language === ref.language)
|
|
215
|
+
score += 1;
|
|
216
|
+
if (score > bestScore) {
|
|
217
|
+
bestScore = score;
|
|
218
|
+
bestMatch = method;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (bestMatch && bestScore >= 2) {
|
|
222
|
+
return {
|
|
223
|
+
original: ref,
|
|
224
|
+
targetNodeId: bestMatch.id,
|
|
225
|
+
confidence: 0.65,
|
|
226
|
+
resolvedBy: 'instance-method',
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
111
231
|
return null;
|
|
112
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* Split a camelCase or PascalCase string into words.
|
|
235
|
+
*/
|
|
236
|
+
function splitCamelCase(str) {
|
|
237
|
+
return str.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
238
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
|
|
239
|
+
.split(/[\s._:\/\\]+/)
|
|
240
|
+
.filter(w => w.length > 1);
|
|
241
|
+
}
|
|
113
242
|
/**
|
|
114
243
|
* Compute directory proximity between two file paths.
|
|
115
244
|
* Returns a score based on the number of shared directory segments.
|
|
@@ -150,10 +279,13 @@ function findBestMatch(ref, candidates, _context) {
|
|
|
150
279
|
}
|
|
151
280
|
// Directory proximity bonus — strongly prefer same module/package
|
|
152
281
|
score += computePathProximity(ref.filePath, candidate.filePath);
|
|
153
|
-
//
|
|
282
|
+
// Language matching: strongly prefer same language, penalize cross-language
|
|
154
283
|
if (candidate.language === ref.language) {
|
|
155
284
|
score += 50;
|
|
156
285
|
}
|
|
286
|
+
else {
|
|
287
|
+
score -= 80;
|
|
288
|
+
}
|
|
157
289
|
// For call references, prefer functions/methods
|
|
158
290
|
if (ref.referenceKind === 'calls') {
|
|
159
291
|
if (candidate.kind === 'function' || candidate.kind === 'method') {
|
|
@@ -186,11 +318,15 @@ function matchFuzzy(ref, context) {
|
|
|
186
318
|
// Filter to callable kinds only (function, method, class)
|
|
187
319
|
const callableKinds = new Set(['function', 'method', 'class']);
|
|
188
320
|
const callableCandidates = candidates.filter((n) => callableKinds.has(n.kind));
|
|
189
|
-
|
|
321
|
+
// Prefer same-language matches
|
|
322
|
+
const sameLanguageCandidates = callableCandidates.filter(n => n.language === ref.language);
|
|
323
|
+
const finalCandidates = sameLanguageCandidates.length > 0 ? sameLanguageCandidates : callableCandidates;
|
|
324
|
+
if (finalCandidates.length === 1) {
|
|
325
|
+
const isCrossLanguage = finalCandidates[0].language !== ref.language;
|
|
190
326
|
return {
|
|
191
327
|
original: ref,
|
|
192
|
-
targetNodeId:
|
|
193
|
-
confidence: 0.5,
|
|
328
|
+
targetNodeId: finalCandidates[0].id,
|
|
329
|
+
confidence: isCrossLanguage ? 0.3 : 0.5,
|
|
194
330
|
resolvedBy: 'fuzzy',
|
|
195
331
|
};
|
|
196
332
|
}
|
|
@@ -202,6 +338,10 @@ function matchFuzzy(ref, context) {
|
|
|
202
338
|
function matchReference(ref, context) {
|
|
203
339
|
// Try strategies in order of confidence
|
|
204
340
|
let result;
|
|
341
|
+
// 0. File path match (e.g., "snippets/drawer-menu.liquid" → file node)
|
|
342
|
+
result = matchByFilePath(ref, context);
|
|
343
|
+
if (result)
|
|
344
|
+
return result;
|
|
205
345
|
// 1. Qualified name match (highest confidence)
|
|
206
346
|
result = matchByQualifiedName(ref, context);
|
|
207
347
|
if (result)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"name-matcher.js","sourceRoot":"","sources":["../../src/resolution/name-matcher.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAQH,4CAmCC;AAKD,oDAsCC;AAKD,0CAyCC;AAwFD,gCAuBC;AAKD,wCAwBC;AA3QD;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,GAAkB,EAClB,OAA0B;IAE1B,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE7D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4BAA4B;IAC5B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,QAAQ,EAAE,GAAG;YACb,YAAY,EAAE,UAAU,CAAC,CAAC,CAAE,CAAC,EAAE;YAC/B,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,aAAa;SAC1B,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,SAAS,EAAE,CAAC;QACd,qEAAqE;QACrE,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/C,OAAO;YACL,QAAQ,EAAE,GAAG;YACb,YAAY,EAAE,SAAS,CAAC,EAAE;YAC1B,UAAU;YACV,UAAU,EAAE,aAAa;SAC1B,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,GAAkB,EAClB,OAA0B;IAE1B,iEAAiE;IACjE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAEtE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,QAAQ,EAAE,GAAG;YACb,YAAY,EAAE,UAAU,CAAC,CAAC,CAAE,CAAC,EAAE;YAC/B,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,gBAAgB;SAC7B,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC3D,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE,CAAC;YAC1C,IAAI,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBACxD,OAAO;oBACL,QAAQ,EAAE,GAAG;oBACb,YAAY,EAAE,SAAS,CAAC,EAAE;oBAC1B,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,gBAAgB;iBAC7B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAC7B,GAAkB,EAClB,OAA0B;IAE1B,kEAAkE;IAClE,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAE7D,MAAM,KAAK,GAAG,QAAQ,IAAI,UAAU,CAAC;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;IAE5C,8BAA8B;IAC9B,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,aAAc,CAAC,CAAC;IAE/D,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;QACxC,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAChG,mCAAmC;YACnC,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,QAAQ;gBACnB,CAAC,CAAC,IAAI,KAAK,UAAU;gBACrB,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAC3C,CAAC;YAEF,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO;oBACL,QAAQ,EAAE,GAAG;oBACb,YAAY,EAAE,UAAU,CAAC,EAAE;oBAC3B,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,gBAAgB;iBAC7B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,SAAiB,EAAE,SAAiB;IAChE,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACpB,GAAkB,EAClB,UAAkB,EAClB,QAA2B;IAE3B,wBAAwB;IACxB,gCAAgC;IAChC,kEAAkE;IAClE,wCAAwC;IACxC,6DAA6D;IAC7D,6BAA6B;IAE7B,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,IAAI,QAAQ,GAAgB,IAAI,CAAC;IAEjC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,kBAAkB;QAClB,IAAI,SAAS,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;YACxC,KAAK,IAAI,GAAG,CAAC;QACf,CAAC;QAED,kEAAkE;QAClE,KAAK,IAAI,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEhE,sBAAsB;QACtB,IAAI,SAAS,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;YACxC,KAAK,IAAI,EAAE,CAAC;QACd,CAAC;QAED,gDAAgD;QAChD,IAAI,GAAG,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;YAClC,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACjE,KAAK,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACzB,KAAK,IAAI,EAAE,CAAC;QACd,CAAC;QAED,wCAAwC;QACxC,IAAI,SAAS,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1D,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YACtB,SAAS,GAAG,KAAK,CAAC;YAClB,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CACxB,GAAkB,EAClB,OAA0B;IAE1B,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IAElD,8EAA8E;IAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAE1D,0DAA0D;IAC1D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/E,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,QAAQ,EAAE,GAAG;YACb,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAE,CAAC,EAAE;YACvC,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,OAAO;SACpB,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC5B,GAAkB,EAClB,OAA0B;IAE1B,wCAAwC;IACxC,IAAI,MAA0B,CAAC;IAE/B,+CAA+C;IAC/C,MAAM,GAAG,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,yBAAyB;IACzB,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACvC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,sBAAsB;IACtB,MAAM,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,qCAAqC;IACrC,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"name-matcher.js","sourceRoot":"","sources":["../../src/resolution/name-matcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ export interface ResolvedRef {
|
|
|
36
36
|
/** Confidence score (0-1) */
|
|
37
37
|
confidence: number;
|
|
38
38
|
/** How it was resolved */
|
|
39
|
-
resolvedBy: 'exact-match' | 'import' | 'qualified-name' | 'framework' | 'fuzzy';
|
|
39
|
+
resolvedBy: 'exact-match' | 'import' | 'qualified-name' | 'framework' | 'fuzzy' | 'instance-method' | 'file-path';
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
42
|
* Result of resolution attempt
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resolution/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,aAAa,EAAE,QAAQ,CAAC;IACxB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,QAAQ,EAAE,aAAa,CAAC;IACxB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,UAAU,EAAE,aAAa,GAAG,QAAQ,GAAG,gBAAgB,GAAG,WAAW,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resolution/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,17 +9,42 @@ import { Node } from '../types';
|
|
|
9
9
|
* Includes generic English + code-specific noise words.
|
|
10
10
|
*/
|
|
11
11
|
export declare const STOP_WORDS: Set<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Generate stem variants of a search term by removing common English suffixes.
|
|
14
|
+
* Used for FTS query expansion so "caching" also finds "cache", "eviction" finds "evict", etc.
|
|
15
|
+
* Stems are used as PREFIX matches in FTS, so they don't need to be perfect English words.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getStemVariants(term: string): string[];
|
|
12
18
|
/**
|
|
13
19
|
* Extract meaningful search terms from a natural language query.
|
|
14
20
|
* Splits camelCase, PascalCase, snake_case, SCREAMING_SNAKE, and dot.notation
|
|
15
21
|
* into individual tokens before filtering.
|
|
22
|
+
*
|
|
23
|
+
* Preserves original compound identifiers (e.g., "scrapeLoop") alongside
|
|
24
|
+
* their split parts so that FTS can match both the full symbol name and
|
|
25
|
+
* individual words within it.
|
|
26
|
+
*
|
|
27
|
+
* Also generates stem variants (e.g., "caching"→"cache", "eviction"→"evict")
|
|
28
|
+
* so FTS prefix matching can find related code symbols.
|
|
16
29
|
*/
|
|
17
|
-
export declare function extractSearchTerms(query: string
|
|
30
|
+
export declare function extractSearchTerms(query: string, options?: {
|
|
31
|
+
stems?: boolean;
|
|
32
|
+
}): string[];
|
|
18
33
|
/**
|
|
19
34
|
* Score path relevance to a query
|
|
20
35
|
* Higher score = more relevant path
|
|
21
36
|
*/
|
|
22
37
|
export declare function scorePathRelevance(filePath: string, query: string): number;
|
|
38
|
+
/**
|
|
39
|
+
* Check if a file path looks like a test file
|
|
40
|
+
*/
|
|
41
|
+
export declare function isTestFile(filePath: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Bonus when a node's name matches the search query.
|
|
44
|
+
* Exact matches get the largest boost; prefix matches get smaller boosts.
|
|
45
|
+
* Multi-word queries also check individual term matches against the name.
|
|
46
|
+
*/
|
|
47
|
+
export declare function nameMatchBonus(nodeName: string, query: string): number;
|
|
23
48
|
/**
|
|
24
49
|
* Kind-based bonus for search ranking
|
|
25
50
|
* Functions and classes are typically more relevant than variables/imports
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-utils.d.ts","sourceRoot":"","sources":["../../src/search/query-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"query-utils.d.ts","sourceRoot":"","sources":["../../src/search/query-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,UAAU,aAkBrB,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAyDtD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,EAAE,CA2DzF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA4B1E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgCpD;AAmBD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAuCtE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CA0BpD"}
|
|
@@ -39,8 +39,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
39
39
|
})();
|
|
40
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
41
|
exports.STOP_WORDS = void 0;
|
|
42
|
+
exports.getStemVariants = getStemVariants;
|
|
42
43
|
exports.extractSearchTerms = extractSearchTerms;
|
|
43
44
|
exports.scorePathRelevance = scorePathRelevance;
|
|
45
|
+
exports.isTestFile = isTestFile;
|
|
46
|
+
exports.nameMatchBonus = nameMatchBonus;
|
|
44
47
|
exports.kindBonus = kindBonus;
|
|
45
48
|
const path = __importStar(require("path"));
|
|
46
49
|
/**
|
|
@@ -55,21 +58,104 @@ exports.STOP_WORDS = new Set([
|
|
|
55
58
|
'should', 'may', 'might', 'can', 'shall', 'not', 'no', 'all', 'each',
|
|
56
59
|
'every', 'how', 'what', 'where', 'when', 'who', 'which', 'why',
|
|
57
60
|
'i', 'me', 'my', 'we', 'our', 'you', 'your', 'he', 'she', 'they',
|
|
58
|
-
'
|
|
61
|
+
'show', 'give', 'tell',
|
|
59
62
|
'been', 'done', 'made', 'used', 'using', 'work', 'works', 'found',
|
|
60
63
|
'also', 'into', 'then', 'than', 'just', 'more', 'some', 'such',
|
|
61
|
-
'over', 'only', '
|
|
62
|
-
|
|
64
|
+
'over', 'only', 'out', 'its', 'so', 'up', 'as', 'if',
|
|
65
|
+
'look', 'need', 'needs', 'want', 'happen', 'happens',
|
|
66
|
+
'affect', 'affected', 'break', 'breaks', 'failing',
|
|
67
|
+
'implemented', 'implement',
|
|
68
|
+
// Code-specific noise (avoid filtering common symbol names like get/set/add/build/find/list)
|
|
63
69
|
'code', 'file', 'files', 'function', 'method', 'class', 'type',
|
|
64
|
-
'
|
|
70
|
+
'fix', 'bug', 'called',
|
|
65
71
|
]);
|
|
72
|
+
/**
|
|
73
|
+
* Generate stem variants of a search term by removing common English suffixes.
|
|
74
|
+
* Used for FTS query expansion so "caching" also finds "cache", "eviction" finds "evict", etc.
|
|
75
|
+
* Stems are used as PREFIX matches in FTS, so they don't need to be perfect English words.
|
|
76
|
+
*/
|
|
77
|
+
function getStemVariants(term) {
|
|
78
|
+
const variants = new Set();
|
|
79
|
+
const t = term.toLowerCase();
|
|
80
|
+
// -ing: caching→cach/cache, handling→handl/handle, running→run
|
|
81
|
+
if (t.endsWith('ing') && t.length > 5) {
|
|
82
|
+
const base = t.slice(0, -3);
|
|
83
|
+
variants.add(base);
|
|
84
|
+
variants.add(base + 'e');
|
|
85
|
+
if (base.length >= 2 && base[base.length - 1] === base[base.length - 2]) {
|
|
86
|
+
variants.add(base.slice(0, -1));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// -tion/-sion: eviction→evict, expression→express
|
|
90
|
+
if ((t.endsWith('tion') || t.endsWith('sion')) && t.length > 5) {
|
|
91
|
+
variants.add(t.slice(0, -3));
|
|
92
|
+
}
|
|
93
|
+
// -ment: management→manage
|
|
94
|
+
if (t.endsWith('ment') && t.length > 6) {
|
|
95
|
+
variants.add(t.slice(0, -4));
|
|
96
|
+
}
|
|
97
|
+
// -ies: entries→entry
|
|
98
|
+
if (t.endsWith('ies') && t.length > 4) {
|
|
99
|
+
variants.add(t.slice(0, -3) + 'y');
|
|
100
|
+
}
|
|
101
|
+
// -es: processes→process, classes→class
|
|
102
|
+
else if (t.endsWith('es') && t.length > 4) {
|
|
103
|
+
variants.add(t.slice(0, -2));
|
|
104
|
+
}
|
|
105
|
+
// -s: errors→error (skip -ss endings like "class")
|
|
106
|
+
else if (t.endsWith('s') && !t.endsWith('ss') && t.length > 4) {
|
|
107
|
+
variants.add(t.slice(0, -1));
|
|
108
|
+
}
|
|
109
|
+
// -ed: handled→handle, propagated→propagate, carried→carry
|
|
110
|
+
if (t.endsWith('ed') && !t.endsWith('eed') && t.length > 4) {
|
|
111
|
+
variants.add(t.slice(0, -1));
|
|
112
|
+
variants.add(t.slice(0, -2));
|
|
113
|
+
if (t.endsWith('ied') && t.length > 5) {
|
|
114
|
+
variants.add(t.slice(0, -3) + 'y');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// -er: builder→build/builde, handler→handl/handle, getter→get
|
|
118
|
+
if (t.endsWith('er') && t.length > 4) {
|
|
119
|
+
const base = t.slice(0, -2);
|
|
120
|
+
variants.add(base);
|
|
121
|
+
variants.add(base + 'e');
|
|
122
|
+
if (base.length >= 2 && base[base.length - 1] === base[base.length - 2]) {
|
|
123
|
+
variants.add(base.slice(0, -1));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return [...variants].filter(v => v.length >= 3 && v !== t);
|
|
127
|
+
}
|
|
66
128
|
/**
|
|
67
129
|
* Extract meaningful search terms from a natural language query.
|
|
68
130
|
* Splits camelCase, PascalCase, snake_case, SCREAMING_SNAKE, and dot.notation
|
|
69
131
|
* into individual tokens before filtering.
|
|
132
|
+
*
|
|
133
|
+
* Preserves original compound identifiers (e.g., "scrapeLoop") alongside
|
|
134
|
+
* their split parts so that FTS can match both the full symbol name and
|
|
135
|
+
* individual words within it.
|
|
136
|
+
*
|
|
137
|
+
* Also generates stem variants (e.g., "caching"→"cache", "eviction"→"evict")
|
|
138
|
+
* so FTS prefix matching can find related code symbols.
|
|
70
139
|
*/
|
|
71
|
-
function extractSearchTerms(query) {
|
|
140
|
+
function extractSearchTerms(query, options) {
|
|
141
|
+
const includeStems = options?.stems !== false;
|
|
72
142
|
const tokens = new Set();
|
|
143
|
+
// First, extract and preserve compound identifiers before splitting
|
|
144
|
+
// CamelCase: scrapeLoop, UserService, getCallGraph
|
|
145
|
+
const compoundPattern = /\b([a-zA-Z][a-zA-Z0-9]*(?:[A-Z][a-z]+)+|[A-Z][a-z]+(?:[A-Z][a-z]*)+)\b/g;
|
|
146
|
+
let match;
|
|
147
|
+
while ((match = compoundPattern.exec(query)) !== null) {
|
|
148
|
+
if (match[1] && match[1].length >= 3) {
|
|
149
|
+
tokens.add(match[1].toLowerCase()); // preserve full compound: "scrapeloop"
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// snake_case: scrape_loop, user_service
|
|
153
|
+
const snakePattern = /\b([a-zA-Z][a-zA-Z0-9]*(?:_[a-zA-Z0-9]+)+)\b/g;
|
|
154
|
+
while ((match = snakePattern.exec(query)) !== null) {
|
|
155
|
+
if (match[1] && match[1].length >= 3) {
|
|
156
|
+
tokens.add(match[1].toLowerCase());
|
|
157
|
+
}
|
|
158
|
+
}
|
|
73
159
|
// Split camelCase / PascalCase: "getUserName" → "get User Name"
|
|
74
160
|
const camelSplit = query
|
|
75
161
|
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
@@ -86,6 +172,23 @@ function extractSearchTerms(query) {
|
|
|
86
172
|
continue;
|
|
87
173
|
tokens.add(lower);
|
|
88
174
|
}
|
|
175
|
+
// Generate stem variants for broader FTS matching.
|
|
176
|
+
// "caching" → "cache" finds CacheBuilder; "eviction" → "evict" finds evictEntries.
|
|
177
|
+
// Also enables co-occurrence dampening by increasing term count above 1.
|
|
178
|
+
// Stems are skipped when scoring path relevance (stems inflate path scores).
|
|
179
|
+
if (includeStems) {
|
|
180
|
+
const stems = new Set();
|
|
181
|
+
for (const token of tokens) {
|
|
182
|
+
for (const variant of getStemVariants(token)) {
|
|
183
|
+
if (!tokens.has(variant) && !exports.STOP_WORDS.has(variant)) {
|
|
184
|
+
stems.add(variant);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
for (const stem of stems) {
|
|
189
|
+
tokens.add(stem);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
89
192
|
return [...tokens];
|
|
90
193
|
}
|
|
91
194
|
/**
|
|
@@ -93,7 +196,9 @@ function extractSearchTerms(query) {
|
|
|
93
196
|
* Higher score = more relevant path
|
|
94
197
|
*/
|
|
95
198
|
function scorePathRelevance(filePath, query) {
|
|
96
|
-
|
|
199
|
+
// Use base terms only — stem variants inflate path scores by generating
|
|
200
|
+
// many near-duplicate terms that all match the same path segments.
|
|
201
|
+
const terms = extractSearchTerms(query, { stems: false });
|
|
97
202
|
if (terms.length === 0)
|
|
98
203
|
return 0;
|
|
99
204
|
const pathLower = filePath.toLowerCase();
|
|
@@ -111,8 +216,103 @@ function scorePathRelevance(filePath, query) {
|
|
|
111
216
|
else if (pathLower.includes(term))
|
|
112
217
|
score += 3;
|
|
113
218
|
}
|
|
219
|
+
// Deprioritize test files unless the query is explicitly about tests
|
|
220
|
+
const queryLower = query.toLowerCase();
|
|
221
|
+
const isTestQuery = queryLower.includes('test') || queryLower.includes('spec');
|
|
222
|
+
if (!isTestQuery && isTestFile(filePath)) {
|
|
223
|
+
score -= 15;
|
|
224
|
+
}
|
|
114
225
|
return score;
|
|
115
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Check if a file path looks like a test file
|
|
229
|
+
*/
|
|
230
|
+
function isTestFile(filePath) {
|
|
231
|
+
const lower = filePath.toLowerCase();
|
|
232
|
+
const fileName = path.basename(lower);
|
|
233
|
+
// Common test file patterns
|
|
234
|
+
return (fileName.startsWith('test_') ||
|
|
235
|
+
fileName.startsWith('test.') ||
|
|
236
|
+
fileName.endsWith('.test.ts') ||
|
|
237
|
+
fileName.endsWith('.test.js') ||
|
|
238
|
+
fileName.endsWith('.test.tsx') ||
|
|
239
|
+
fileName.endsWith('.test.jsx') ||
|
|
240
|
+
fileName.endsWith('.spec.ts') ||
|
|
241
|
+
fileName.endsWith('.spec.js') ||
|
|
242
|
+
fileName.endsWith('_test.go') ||
|
|
243
|
+
fileName.endsWith('_test.py') ||
|
|
244
|
+
fileName.endsWith('_test.rs') ||
|
|
245
|
+
fileName.endsWith('Tests.java') ||
|
|
246
|
+
fileName.endsWith('Test.java') ||
|
|
247
|
+
fileName.endsWith('Tester.java') ||
|
|
248
|
+
fileName.endsWith('TestCase.java') ||
|
|
249
|
+
lower.includes('/tests/') ||
|
|
250
|
+
lower.includes('/test/') ||
|
|
251
|
+
lower.includes('/__tests__/') ||
|
|
252
|
+
lower.includes('/spec/') ||
|
|
253
|
+
lower.includes('/testlib/') ||
|
|
254
|
+
lower.includes('/testing/') ||
|
|
255
|
+
// Non-production directories: examples, samples, benchmarks, fixtures, demos.
|
|
256
|
+
// Check both mid-path (/integration/) and start-of-path (integration/) since
|
|
257
|
+
// file paths may be stored as relative paths without a leading slash.
|
|
258
|
+
matchesNonProductionDir(lower));
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Check if a path is in a non-production directory (integration, sample, example, etc.)
|
|
262
|
+
* Handles both absolute paths (/foo/integration/bar) and relative paths (integration/bar).
|
|
263
|
+
*/
|
|
264
|
+
function matchesNonProductionDir(lowerPath) {
|
|
265
|
+
const dirs = [
|
|
266
|
+
'integration', 'sample', 'samples', 'example', 'examples',
|
|
267
|
+
'fixture', 'fixtures', 'benchmark', 'benchmarks', 'demo', 'demos',
|
|
268
|
+
];
|
|
269
|
+
for (const dir of dirs) {
|
|
270
|
+
if (lowerPath.includes('/' + dir + '/') || lowerPath.startsWith(dir + '/')) {
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return false;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Bonus when a node's name matches the search query.
|
|
278
|
+
* Exact matches get the largest boost; prefix matches get smaller boosts.
|
|
279
|
+
* Multi-word queries also check individual term matches against the name.
|
|
280
|
+
*/
|
|
281
|
+
function nameMatchBonus(nodeName, query) {
|
|
282
|
+
const nameLower = nodeName.toLowerCase();
|
|
283
|
+
// Split query into word-level terms (handles "CacheBuilder build" → ["cache","builder","build"])
|
|
284
|
+
const rawTerms = query
|
|
285
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
286
|
+
.split(/[\s_.\-]+/)
|
|
287
|
+
.map(t => t.toLowerCase())
|
|
288
|
+
.filter(t => t.length >= 2);
|
|
289
|
+
// Also keep original space-separated tokens for exact-term matching
|
|
290
|
+
const queryTokens = query.split(/\s+/).map(t => t.toLowerCase()).filter(t => t.length >= 2);
|
|
291
|
+
// Full query as a single token (for compound identifiers like "CacheBuilder")
|
|
292
|
+
const queryLower = query.replace(/[\s]+/g, '').toLowerCase();
|
|
293
|
+
// Exact match: query exactly equals the node name
|
|
294
|
+
if (nameLower === queryLower)
|
|
295
|
+
return 80;
|
|
296
|
+
// Exact match on a query token: "CacheBuilder build" and node name is "build"
|
|
297
|
+
if (queryTokens.length > 1 && queryTokens.includes(nameLower))
|
|
298
|
+
return 60;
|
|
299
|
+
// Name starts with query — scale by length ratio so "Pod"→"Pod" (exact, handled above)
|
|
300
|
+
// scores much higher than "Pod"→"PodGCControllerOptions" (ratio 0.125).
|
|
301
|
+
if (nameLower.startsWith(queryLower)) {
|
|
302
|
+
const ratio = queryLower.length / nameLower.length;
|
|
303
|
+
return Math.round(10 + 30 * ratio);
|
|
304
|
+
}
|
|
305
|
+
// All camelCase-split terms appear in the name
|
|
306
|
+
if (rawTerms.length > 1) {
|
|
307
|
+
const allMatch = rawTerms.every(t => nameLower.includes(t));
|
|
308
|
+
if (allMatch)
|
|
309
|
+
return 15;
|
|
310
|
+
}
|
|
311
|
+
// Name contains the full query as substring
|
|
312
|
+
if (nameLower.includes(queryLower))
|
|
313
|
+
return 10;
|
|
314
|
+
return 0;
|
|
315
|
+
}
|
|
116
316
|
/**
|
|
117
317
|
* Kind-based bonus for search ranking
|
|
118
318
|
* Functions and classes are typically more relevant than variables/imports
|
|
@@ -122,10 +322,10 @@ function kindBonus(kind) {
|
|
|
122
322
|
function: 10,
|
|
123
323
|
method: 10,
|
|
124
324
|
class: 8,
|
|
125
|
-
interface:
|
|
325
|
+
interface: 9,
|
|
126
326
|
type_alias: 6,
|
|
127
327
|
struct: 6,
|
|
128
|
-
trait:
|
|
328
|
+
trait: 9,
|
|
129
329
|
enum: 5,
|
|
130
330
|
component: 8,
|
|
131
331
|
route: 9,
|
|
@@ -139,7 +339,7 @@ function kindBonus(kind) {
|
|
|
139
339
|
parameter: 0,
|
|
140
340
|
namespace: 4,
|
|
141
341
|
file: 0,
|
|
142
|
-
protocol:
|
|
342
|
+
protocol: 9,
|
|
143
343
|
enum_member: 3,
|
|
144
344
|
};
|
|
145
345
|
return bonuses[kind] ?? 0;
|