@mduenas/codegraph 0.4.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 -0
- package/README.md +641 -0
- package/dist/bin/codegraph.d.ts +20 -0
- package/dist/bin/codegraph.d.ts.map +1 -0
- package/dist/bin/codegraph.js +704 -0
- package/dist/bin/codegraph.js.map +1 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +291 -0
- package/dist/config.js.map +1 -0
- package/dist/context/formatter.d.ts +30 -0
- package/dist/context/formatter.d.ts.map +1 -0
- package/dist/context/formatter.js +244 -0
- package/dist/context/formatter.js.map +1 -0
- package/dist/context/index.d.ts +86 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +402 -0
- package/dist/context/index.js.map +1 -0
- package/dist/db/index.d.ts +64 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +170 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +44 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +105 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/queries.d.ts +148 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +669 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/directory.d.ts +45 -0
- package/dist/directory.d.ts.map +1 -0
- package/dist/directory.js +191 -0
- package/dist/directory.js.map +1 -0
- package/dist/errors.d.ts +136 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +219 -0
- package/dist/errors.js.map +1 -0
- package/dist/extraction/grammars.d.ts +36 -0
- package/dist/extraction/grammars.d.ts.map +1 -0
- package/dist/extraction/grammars.js +181 -0
- package/dist/extraction/grammars.js.map +1 -0
- package/dist/extraction/index.d.ts +91 -0
- package/dist/extraction/index.d.ts.map +1 -0
- package/dist/extraction/index.js +493 -0
- package/dist/extraction/index.js.map +1 -0
- package/dist/extraction/tree-sitter.d.ts +176 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -0
- package/dist/extraction/tree-sitter.js +1798 -0
- package/dist/extraction/tree-sitter.js.map +1 -0
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +13 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/queries.d.ts +106 -0
- package/dist/graph/queries.d.ts.map +1 -0
- package/dist/graph/queries.js +355 -0
- package/dist/graph/queries.js.map +1 -0
- package/dist/graph/traversal.d.ts +127 -0
- package/dist/graph/traversal.d.ts.map +1 -0
- package/dist/graph/traversal.js +465 -0
- package/dist/graph/traversal.js.map +1 -0
- package/dist/index.d.ts +496 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +818 -0
- package/dist/index.js.map +1 -0
- package/dist/installer/banner.d.ts +40 -0
- package/dist/installer/banner.d.ts.map +1 -0
- package/dist/installer/banner.js +162 -0
- package/dist/installer/banner.js.map +1 -0
- package/dist/installer/claude-md-template.d.ts +10 -0
- package/dist/installer/claude-md-template.d.ts.map +1 -0
- package/dist/installer/claude-md-template.js +46 -0
- package/dist/installer/claude-md-template.js.map +1 -0
- package/dist/installer/config-writer.d.ts +36 -0
- package/dist/installer/config-writer.d.ts.map +1 -0
- package/dist/installer/config-writer.js +282 -0
- package/dist/installer/config-writer.js.map +1 -0
- package/dist/installer/index.d.ts +13 -0
- package/dist/installer/index.d.ts.map +1 -0
- package/dist/installer/index.js +155 -0
- package/dist/installer/index.js.map +1 -0
- package/dist/installer/prompts.d.ts +18 -0
- package/dist/installer/prompts.d.ts.map +1 -0
- package/dist/installer/prompts.js +113 -0
- package/dist/installer/prompts.js.map +1 -0
- package/dist/mcp/index.d.ts +64 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +207 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools.d.ts +93 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +442 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/transport.d.ts +89 -0
- package/dist/mcp/transport.d.ts.map +1 -0
- package/dist/mcp/transport.js +170 -0
- package/dist/mcp/transport.js.map +1 -0
- package/dist/resolution/frameworks/csharp.d.ts +8 -0
- package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
- package/dist/resolution/frameworks/csharp.js +274 -0
- package/dist/resolution/frameworks/csharp.js.map +1 -0
- package/dist/resolution/frameworks/express.d.ts +8 -0
- package/dist/resolution/frameworks/express.d.ts.map +1 -0
- package/dist/resolution/frameworks/express.js +208 -0
- package/dist/resolution/frameworks/express.js.map +1 -0
- package/dist/resolution/frameworks/go.d.ts +8 -0
- package/dist/resolution/frameworks/go.d.ts.map +1 -0
- package/dist/resolution/frameworks/go.js +225 -0
- package/dist/resolution/frameworks/go.js.map +1 -0
- package/dist/resolution/frameworks/index.d.ts +33 -0
- package/dist/resolution/frameworks/index.d.ts.map +1 -0
- package/dist/resolution/frameworks/index.js +113 -0
- package/dist/resolution/frameworks/index.js.map +1 -0
- package/dist/resolution/frameworks/java.d.ts +8 -0
- package/dist/resolution/frameworks/java.d.ts.map +1 -0
- package/dist/resolution/frameworks/java.js +239 -0
- package/dist/resolution/frameworks/java.js.map +1 -0
- package/dist/resolution/frameworks/laravel.d.ts +13 -0
- package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
- package/dist/resolution/frameworks/laravel.js +198 -0
- package/dist/resolution/frameworks/laravel.js.map +1 -0
- package/dist/resolution/frameworks/python.d.ts +10 -0
- package/dist/resolution/frameworks/python.d.ts.map +1 -0
- package/dist/resolution/frameworks/python.js +331 -0
- package/dist/resolution/frameworks/python.js.map +1 -0
- package/dist/resolution/frameworks/react.d.ts +8 -0
- package/dist/resolution/frameworks/react.d.ts.map +1 -0
- package/dist/resolution/frameworks/react.js +294 -0
- package/dist/resolution/frameworks/react.js.map +1 -0
- package/dist/resolution/frameworks/ruby.d.ts +8 -0
- package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
- package/dist/resolution/frameworks/ruby.js +262 -0
- package/dist/resolution/frameworks/ruby.js.map +1 -0
- package/dist/resolution/frameworks/rust.d.ts +8 -0
- package/dist/resolution/frameworks/rust.d.ts.map +1 -0
- package/dist/resolution/frameworks/rust.js +222 -0
- package/dist/resolution/frameworks/rust.js.map +1 -0
- package/dist/resolution/frameworks/swift.d.ts +10 -0
- package/dist/resolution/frameworks/swift.d.ts.map +1 -0
- package/dist/resolution/frameworks/swift.js +486 -0
- package/dist/resolution/frameworks/swift.js.map +1 -0
- package/dist/resolution/import-resolver.d.ts +20 -0
- package/dist/resolution/import-resolver.d.ts.map +1 -0
- package/dist/resolution/import-resolver.js +445 -0
- package/dist/resolution/import-resolver.js.map +1 -0
- package/dist/resolution/index.d.ts +72 -0
- package/dist/resolution/index.d.ts.map +1 -0
- package/dist/resolution/index.js +301 -0
- package/dist/resolution/index.js.map +1 -0
- package/dist/resolution/name-matcher.d.ts +27 -0
- package/dist/resolution/name-matcher.d.ts.map +1 -0
- package/dist/resolution/name-matcher.js +210 -0
- package/dist/resolution/name-matcher.js.map +1 -0
- package/dist/resolution/types.d.ts +108 -0
- package/dist/resolution/types.d.ts.map +1 -0
- package/dist/resolution/types.js +8 -0
- package/dist/resolution/types.js.map +1 -0
- package/dist/sync/git-hooks.d.ts +66 -0
- package/dist/sync/git-hooks.d.ts.map +1 -0
- package/dist/sync/git-hooks.js +281 -0
- package/dist/sync/git-hooks.js.map +1 -0
- package/dist/sync/index.d.ts +13 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +18 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/types.d.ts +410 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +165 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +116 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +295 -0
- package/dist/utils.js.map +1 -0
- package/dist/vectors/embedder.d.ts +140 -0
- package/dist/vectors/embedder.d.ts.map +1 -0
- package/dist/vectors/embedder.js +336 -0
- package/dist/vectors/embedder.js.map +1 -0
- package/dist/vectors/index.d.ts +9 -0
- package/dist/vectors/index.d.ts.map +1 -0
- package/dist/vectors/index.js +20 -0
- package/dist/vectors/index.js.map +1 -0
- package/dist/vectors/manager.d.ts +119 -0
- package/dist/vectors/manager.d.ts.map +1 -0
- package/dist/vectors/manager.js +274 -0
- package/dist/vectors/manager.js.map +1 -0
- package/dist/vectors/search.d.ts +134 -0
- package/dist/vectors/search.d.ts.map +1 -0
- package/dist/vectors/search.js +409 -0
- package/dist/vectors/search.js.map +1 -0
- package/package.json +67 -0
- package/scripts/postinstall.js +68 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Reference Resolution Orchestrator
|
|
4
|
+
*
|
|
5
|
+
* Coordinates all reference resolution strategies.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
41
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
42
|
+
};
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.ReferenceResolver = void 0;
|
|
45
|
+
exports.createResolver = createResolver;
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const name_matcher_1 = require("./name-matcher");
|
|
49
|
+
const import_resolver_1 = require("./import-resolver");
|
|
50
|
+
const frameworks_1 = require("./frameworks");
|
|
51
|
+
const errors_1 = require("../errors");
|
|
52
|
+
// Re-export types
|
|
53
|
+
__exportStar(require("./types"), exports);
|
|
54
|
+
/**
|
|
55
|
+
* Reference Resolver
|
|
56
|
+
*
|
|
57
|
+
* Orchestrates reference resolution using multiple strategies.
|
|
58
|
+
*/
|
|
59
|
+
class ReferenceResolver {
|
|
60
|
+
projectRoot;
|
|
61
|
+
queries;
|
|
62
|
+
context;
|
|
63
|
+
frameworks = [];
|
|
64
|
+
nodeCache = new Map();
|
|
65
|
+
fileCache = new Map();
|
|
66
|
+
constructor(projectRoot, queries) {
|
|
67
|
+
this.projectRoot = projectRoot;
|
|
68
|
+
this.queries = queries;
|
|
69
|
+
this.context = this.createContext();
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Initialize the resolver (detect frameworks, etc.)
|
|
73
|
+
*/
|
|
74
|
+
initialize() {
|
|
75
|
+
this.frameworks = (0, frameworks_1.detectFrameworks)(this.context);
|
|
76
|
+
this.clearCaches();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Clear internal caches
|
|
80
|
+
*/
|
|
81
|
+
clearCaches() {
|
|
82
|
+
this.nodeCache.clear();
|
|
83
|
+
this.fileCache.clear();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create the resolution context
|
|
87
|
+
*/
|
|
88
|
+
createContext() {
|
|
89
|
+
return {
|
|
90
|
+
getNodesInFile: (filePath) => {
|
|
91
|
+
if (!this.nodeCache.has(filePath)) {
|
|
92
|
+
this.nodeCache.set(filePath, this.queries.getNodesByFile(filePath));
|
|
93
|
+
}
|
|
94
|
+
return this.nodeCache.get(filePath);
|
|
95
|
+
},
|
|
96
|
+
getNodesByName: (name) => {
|
|
97
|
+
return this.queries.searchNodes(name, { limit: 100 }).map((r) => r.node);
|
|
98
|
+
},
|
|
99
|
+
getNodesByQualifiedName: (qualifiedName) => {
|
|
100
|
+
// Search for exact qualified name match
|
|
101
|
+
return this.queries
|
|
102
|
+
.searchNodes(qualifiedName, { limit: 50 })
|
|
103
|
+
.filter((r) => r.node.qualifiedName === qualifiedName)
|
|
104
|
+
.map((r) => r.node);
|
|
105
|
+
},
|
|
106
|
+
getNodesByKind: (kind) => {
|
|
107
|
+
return this.queries.getNodesByKind(kind);
|
|
108
|
+
},
|
|
109
|
+
fileExists: (filePath) => {
|
|
110
|
+
const fullPath = path.join(this.projectRoot, filePath);
|
|
111
|
+
try {
|
|
112
|
+
return fs.existsSync(fullPath);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
(0, errors_1.logDebug)('Error checking file existence', { filePath, error: String(error) });
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
readFile: (filePath) => {
|
|
120
|
+
if (this.fileCache.has(filePath)) {
|
|
121
|
+
return this.fileCache.get(filePath);
|
|
122
|
+
}
|
|
123
|
+
const fullPath = path.join(this.projectRoot, filePath);
|
|
124
|
+
try {
|
|
125
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
126
|
+
this.fileCache.set(filePath, content);
|
|
127
|
+
return content;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
(0, errors_1.logDebug)('Failed to read file for resolution', { filePath, error: String(error) });
|
|
131
|
+
this.fileCache.set(filePath, null);
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
getProjectRoot: () => this.projectRoot,
|
|
136
|
+
getAllFiles: () => {
|
|
137
|
+
return this.queries.getAllFiles().map((f) => f.path);
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolve all unresolved references
|
|
143
|
+
*/
|
|
144
|
+
resolveAll(unresolvedRefs) {
|
|
145
|
+
const resolved = [];
|
|
146
|
+
const unresolved = [];
|
|
147
|
+
const byMethod = {};
|
|
148
|
+
// Convert to our internal format
|
|
149
|
+
const refs = unresolvedRefs.map((ref) => ({
|
|
150
|
+
fromNodeId: ref.fromNodeId,
|
|
151
|
+
referenceName: ref.referenceName,
|
|
152
|
+
referenceKind: ref.referenceKind,
|
|
153
|
+
line: ref.line,
|
|
154
|
+
column: ref.column,
|
|
155
|
+
filePath: this.getFilePathFromNodeId(ref.fromNodeId),
|
|
156
|
+
language: this.getLanguageFromNodeId(ref.fromNodeId),
|
|
157
|
+
}));
|
|
158
|
+
for (const ref of refs) {
|
|
159
|
+
const result = this.resolveOne(ref);
|
|
160
|
+
if (result) {
|
|
161
|
+
resolved.push(result);
|
|
162
|
+
byMethod[result.resolvedBy] = (byMethod[result.resolvedBy] || 0) + 1;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
unresolved.push(ref);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
resolved,
|
|
170
|
+
unresolved,
|
|
171
|
+
stats: {
|
|
172
|
+
total: refs.length,
|
|
173
|
+
resolved: resolved.length,
|
|
174
|
+
unresolved: unresolved.length,
|
|
175
|
+
byMethod,
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Resolve a single reference
|
|
181
|
+
*/
|
|
182
|
+
resolveOne(ref) {
|
|
183
|
+
// Skip built-in/external references
|
|
184
|
+
if (this.isBuiltInOrExternal(ref)) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
// Strategy 1: Try framework-specific resolution first
|
|
188
|
+
for (const framework of this.frameworks) {
|
|
189
|
+
const result = framework.resolve(ref, this.context);
|
|
190
|
+
if (result) {
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Strategy 2: Try import-based resolution
|
|
195
|
+
const importResult = (0, import_resolver_1.resolveViaImport)(ref, this.context);
|
|
196
|
+
if (importResult) {
|
|
197
|
+
return importResult;
|
|
198
|
+
}
|
|
199
|
+
// Strategy 3: Try name matching
|
|
200
|
+
const nameResult = (0, name_matcher_1.matchReference)(ref, this.context);
|
|
201
|
+
if (nameResult) {
|
|
202
|
+
return nameResult;
|
|
203
|
+
}
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Create edges from resolved references
|
|
208
|
+
*/
|
|
209
|
+
createEdges(resolved) {
|
|
210
|
+
return resolved.map((ref) => ({
|
|
211
|
+
source: ref.original.fromNodeId,
|
|
212
|
+
target: ref.targetNodeId,
|
|
213
|
+
kind: ref.original.referenceKind,
|
|
214
|
+
line: ref.original.line,
|
|
215
|
+
column: ref.original.column,
|
|
216
|
+
metadata: {
|
|
217
|
+
confidence: ref.confidence,
|
|
218
|
+
resolvedBy: ref.resolvedBy,
|
|
219
|
+
},
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Resolve and persist edges to database
|
|
224
|
+
*/
|
|
225
|
+
resolveAndPersist(unresolvedRefs) {
|
|
226
|
+
const result = this.resolveAll(unresolvedRefs);
|
|
227
|
+
// Create edges from resolved references
|
|
228
|
+
const edges = this.createEdges(result.resolved);
|
|
229
|
+
// Insert edges into database
|
|
230
|
+
if (edges.length > 0) {
|
|
231
|
+
this.queries.insertEdges(edges);
|
|
232
|
+
}
|
|
233
|
+
return result;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Get detected frameworks
|
|
237
|
+
*/
|
|
238
|
+
getDetectedFrameworks() {
|
|
239
|
+
return this.frameworks.map((f) => f.name);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Check if reference is to a built-in or external symbol
|
|
243
|
+
*/
|
|
244
|
+
isBuiltInOrExternal(ref) {
|
|
245
|
+
const name = ref.referenceName;
|
|
246
|
+
// JavaScript/TypeScript built-ins
|
|
247
|
+
const jsBuiltIns = [
|
|
248
|
+
'console', 'window', 'document', 'global', 'process',
|
|
249
|
+
'Promise', 'Array', 'Object', 'String', 'Number', 'Boolean',
|
|
250
|
+
'Date', 'Math', 'JSON', 'RegExp', 'Error', 'Map', 'Set',
|
|
251
|
+
'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval',
|
|
252
|
+
'fetch', 'require', 'module', 'exports', '__dirname', '__filename',
|
|
253
|
+
];
|
|
254
|
+
if (jsBuiltIns.includes(name)) {
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
// Common library calls
|
|
258
|
+
if (name.startsWith('console.') || name.startsWith('Math.') || name.startsWith('JSON.')) {
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
// React hooks from React itself
|
|
262
|
+
const reactHooks = ['useState', 'useEffect', 'useContext', 'useReducer', 'useCallback', 'useMemo', 'useRef', 'useLayoutEffect', 'useImperativeHandle', 'useDebugValue'];
|
|
263
|
+
if (reactHooks.includes(name)) {
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
// Python built-ins
|
|
267
|
+
const pythonBuiltIns = [
|
|
268
|
+
'print', 'len', 'range', 'str', 'int', 'float', 'list', 'dict', 'set', 'tuple',
|
|
269
|
+
'open', 'input', 'type', 'isinstance', 'hasattr', 'getattr', 'setattr',
|
|
270
|
+
'super', 'self', 'cls', 'None', 'True', 'False',
|
|
271
|
+
];
|
|
272
|
+
if (ref.language === 'python' && pythonBuiltIns.includes(name)) {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get file path from node ID
|
|
279
|
+
*/
|
|
280
|
+
getFilePathFromNodeId(nodeId) {
|
|
281
|
+
const node = this.queries.getNodeById(nodeId);
|
|
282
|
+
return node?.filePath || '';
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Get language from node ID
|
|
286
|
+
*/
|
|
287
|
+
getLanguageFromNodeId(nodeId) {
|
|
288
|
+
const node = this.queries.getNodeById(nodeId);
|
|
289
|
+
return node?.language || 'unknown';
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
exports.ReferenceResolver = ReferenceResolver;
|
|
293
|
+
/**
|
|
294
|
+
* Create a reference resolver instance
|
|
295
|
+
*/
|
|
296
|
+
function createResolver(projectRoot, queries) {
|
|
297
|
+
const resolver = new ReferenceResolver(projectRoot, queries);
|
|
298
|
+
resolver.initialize();
|
|
299
|
+
return resolver;
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolution/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Name Matcher
|
|
3
|
+
*
|
|
4
|
+
* Handles symbol name matching for reference resolution.
|
|
5
|
+
*/
|
|
6
|
+
import { UnresolvedRef, ResolvedRef, ResolutionContext } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Try to resolve a reference by exact name match
|
|
9
|
+
*/
|
|
10
|
+
export declare function matchByExactName(ref: UnresolvedRef, context: ResolutionContext): ResolvedRef | null;
|
|
11
|
+
/**
|
|
12
|
+
* Try to resolve by qualified name
|
|
13
|
+
*/
|
|
14
|
+
export declare function matchByQualifiedName(ref: UnresolvedRef, context: ResolutionContext): ResolvedRef | null;
|
|
15
|
+
/**
|
|
16
|
+
* Try to resolve by method name on a class/object
|
|
17
|
+
*/
|
|
18
|
+
export declare function matchMethodCall(ref: UnresolvedRef, context: ResolutionContext): ResolvedRef | null;
|
|
19
|
+
/**
|
|
20
|
+
* Fuzzy match - last resort with lower confidence
|
|
21
|
+
*/
|
|
22
|
+
export declare function matchFuzzy(ref: UnresolvedRef, context: ResolutionContext): ResolvedRef | null;
|
|
23
|
+
/**
|
|
24
|
+
* Match all strategies in order of confidence
|
|
25
|
+
*/
|
|
26
|
+
export declare function matchReference(ref: UnresolvedRef, context: ResolutionContext): ResolvedRef | null;
|
|
27
|
+
//# sourceMappingURL=name-matcher.d.ts.map
|
|
@@ -0,0 +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,CA6BpB;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,CAsCpB;AA2DD;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CAuCpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CAqBpB"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Name Matcher
|
|
4
|
+
*
|
|
5
|
+
* Handles symbol name matching for reference resolution.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.matchByExactName = matchByExactName;
|
|
9
|
+
exports.matchByQualifiedName = matchByQualifiedName;
|
|
10
|
+
exports.matchMethodCall = matchMethodCall;
|
|
11
|
+
exports.matchFuzzy = matchFuzzy;
|
|
12
|
+
exports.matchReference = matchReference;
|
|
13
|
+
/**
|
|
14
|
+
* Try to resolve a reference by exact name match
|
|
15
|
+
*/
|
|
16
|
+
function matchByExactName(ref, context) {
|
|
17
|
+
const candidates = context.getNodesByName(ref.referenceName);
|
|
18
|
+
if (candidates.length === 0) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
// If only one match, use it
|
|
22
|
+
if (candidates.length === 1) {
|
|
23
|
+
return {
|
|
24
|
+
original: ref,
|
|
25
|
+
targetNodeId: candidates[0].id,
|
|
26
|
+
confidence: 0.9,
|
|
27
|
+
resolvedBy: 'exact-match',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Multiple matches - try to narrow down
|
|
31
|
+
const bestMatch = findBestMatch(ref, candidates, context);
|
|
32
|
+
if (bestMatch) {
|
|
33
|
+
return {
|
|
34
|
+
original: ref,
|
|
35
|
+
targetNodeId: bestMatch.id,
|
|
36
|
+
confidence: 0.7,
|
|
37
|
+
resolvedBy: 'exact-match',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Try to resolve by qualified name
|
|
44
|
+
*/
|
|
45
|
+
function matchByQualifiedName(ref, context) {
|
|
46
|
+
// Check if the reference name looks qualified (contains :: or .)
|
|
47
|
+
if (!ref.referenceName.includes('::') && !ref.referenceName.includes('.')) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
const candidates = context.getNodesByQualifiedName(ref.referenceName);
|
|
51
|
+
if (candidates.length === 1) {
|
|
52
|
+
return {
|
|
53
|
+
original: ref,
|
|
54
|
+
targetNodeId: candidates[0].id,
|
|
55
|
+
confidence: 0.95,
|
|
56
|
+
resolvedBy: 'qualified-name',
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Try partial qualified name match
|
|
60
|
+
const parts = ref.referenceName.split(/[:.]/);
|
|
61
|
+
const lastName = parts[parts.length - 1];
|
|
62
|
+
if (lastName) {
|
|
63
|
+
const partialCandidates = context.getNodesByName(lastName);
|
|
64
|
+
for (const candidate of partialCandidates) {
|
|
65
|
+
if (candidate.qualifiedName.endsWith(ref.referenceName)) {
|
|
66
|
+
return {
|
|
67
|
+
original: ref,
|
|
68
|
+
targetNodeId: candidate.id,
|
|
69
|
+
confidence: 0.85,
|
|
70
|
+
resolvedBy: 'qualified-name',
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Try to resolve by method name on a class/object
|
|
79
|
+
*/
|
|
80
|
+
function matchMethodCall(ref, context) {
|
|
81
|
+
// Parse method call patterns like "obj.method" or "Class::method"
|
|
82
|
+
const dotMatch = ref.referenceName.match(/^(\w+)\.(\w+)$/);
|
|
83
|
+
const colonMatch = ref.referenceName.match(/^(\w+)::(\w+)$/);
|
|
84
|
+
const match = dotMatch || colonMatch;
|
|
85
|
+
if (!match) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const [, objectOrClass, methodName] = match;
|
|
89
|
+
// Find the class/object first
|
|
90
|
+
const classCandidates = context.getNodesByName(objectOrClass);
|
|
91
|
+
for (const classNode of classCandidates) {
|
|
92
|
+
if (classNode.kind === 'class' || classNode.kind === 'struct' || classNode.kind === 'interface') {
|
|
93
|
+
// Look for method in the same file
|
|
94
|
+
const nodesInFile = context.getNodesInFile(classNode.filePath);
|
|
95
|
+
const methodNode = nodesInFile.find((n) => n.kind === 'method' &&
|
|
96
|
+
n.name === methodName &&
|
|
97
|
+
n.qualifiedName.includes(classNode.name));
|
|
98
|
+
if (methodNode) {
|
|
99
|
+
return {
|
|
100
|
+
original: ref,
|
|
101
|
+
targetNodeId: methodNode.id,
|
|
102
|
+
confidence: 0.85,
|
|
103
|
+
resolvedBy: 'qualified-name',
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Find the best matching node when there are multiple candidates
|
|
112
|
+
*/
|
|
113
|
+
function findBestMatch(ref, candidates, _context) {
|
|
114
|
+
// Prioritization rules:
|
|
115
|
+
// 1. Same file > different file
|
|
116
|
+
// 2. Same language > different language
|
|
117
|
+
// 3. Functions/methods > classes/types (for call references)
|
|
118
|
+
// 4. Exported > non-exported
|
|
119
|
+
let bestScore = -1;
|
|
120
|
+
let bestNode = null;
|
|
121
|
+
for (const candidate of candidates) {
|
|
122
|
+
let score = 0;
|
|
123
|
+
// Same file bonus
|
|
124
|
+
if (candidate.filePath === ref.filePath) {
|
|
125
|
+
score += 100;
|
|
126
|
+
}
|
|
127
|
+
// Same language bonus
|
|
128
|
+
if (candidate.language === ref.language) {
|
|
129
|
+
score += 50;
|
|
130
|
+
}
|
|
131
|
+
// For call references, prefer functions/methods
|
|
132
|
+
if (ref.referenceKind === 'calls') {
|
|
133
|
+
if (candidate.kind === 'function' || candidate.kind === 'method') {
|
|
134
|
+
score += 25;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Exported bonus
|
|
138
|
+
if (candidate.isExported) {
|
|
139
|
+
score += 10;
|
|
140
|
+
}
|
|
141
|
+
// Closer line number (within same file)
|
|
142
|
+
if (candidate.filePath === ref.filePath && candidate.startLine) {
|
|
143
|
+
const distance = Math.abs(candidate.startLine - ref.line);
|
|
144
|
+
score += Math.max(0, 20 - distance / 10);
|
|
145
|
+
}
|
|
146
|
+
if (score > bestScore) {
|
|
147
|
+
bestScore = score;
|
|
148
|
+
bestNode = candidate;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return bestNode;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Fuzzy match - last resort with lower confidence
|
|
155
|
+
*/
|
|
156
|
+
function matchFuzzy(ref, context) {
|
|
157
|
+
// Try case-insensitive match
|
|
158
|
+
const allNodes = [
|
|
159
|
+
...context.getNodesByKind('function'),
|
|
160
|
+
...context.getNodesByKind('method'),
|
|
161
|
+
...context.getNodesByKind('class'),
|
|
162
|
+
];
|
|
163
|
+
const lowerName = ref.referenceName.toLowerCase();
|
|
164
|
+
// Exact case-insensitive match
|
|
165
|
+
const caseInsensitive = allNodes.filter((n) => n.name.toLowerCase() === lowerName);
|
|
166
|
+
if (caseInsensitive.length === 1) {
|
|
167
|
+
return {
|
|
168
|
+
original: ref,
|
|
169
|
+
targetNodeId: caseInsensitive[0].id,
|
|
170
|
+
confidence: 0.5,
|
|
171
|
+
resolvedBy: 'fuzzy',
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// Try prefix match (e.g., "get" matches "getUser")
|
|
175
|
+
const prefixMatches = allNodes.filter((n) => n.name.toLowerCase().startsWith(lowerName));
|
|
176
|
+
if (prefixMatches.length === 1) {
|
|
177
|
+
return {
|
|
178
|
+
original: ref,
|
|
179
|
+
targetNodeId: prefixMatches[0].id,
|
|
180
|
+
confidence: 0.3,
|
|
181
|
+
resolvedBy: 'fuzzy',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Match all strategies in order of confidence
|
|
188
|
+
*/
|
|
189
|
+
function matchReference(ref, context) {
|
|
190
|
+
// Try strategies in order of confidence
|
|
191
|
+
let result;
|
|
192
|
+
// 1. Qualified name match (highest confidence)
|
|
193
|
+
result = matchByQualifiedName(ref, context);
|
|
194
|
+
if (result)
|
|
195
|
+
return result;
|
|
196
|
+
// 2. Method call pattern
|
|
197
|
+
result = matchMethodCall(ref, context);
|
|
198
|
+
if (result)
|
|
199
|
+
return result;
|
|
200
|
+
// 3. Exact name match
|
|
201
|
+
result = matchByExactName(ref, context);
|
|
202
|
+
if (result)
|
|
203
|
+
return result;
|
|
204
|
+
// 4. Fuzzy match (lowest confidence)
|
|
205
|
+
result = matchFuzzy(ref, context);
|
|
206
|
+
if (result)
|
|
207
|
+
return result;
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=name-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-matcher.js","sourceRoot":"","sources":["../../src/resolution/name-matcher.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAQH,4CAgCC;AAKD,oDAsCC;AAKD,0CAyCC;AA8DD,gCA0CC;AAKD,wCAwBC;AAjQD;;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,OAAO;YACL,QAAQ,EAAE,GAAG;YACb,YAAY,EAAE,SAAS,CAAC,EAAE;YAC1B,UAAU,EAAE,GAAG;YACf,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;;GAEG;AACH,SAAS,aAAa,CACpB,GAAkB,EAClB,UAAkB,EAClB,QAA2B;IAE3B,wBAAwB;IACxB,gCAAgC;IAChC,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,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,6BAA6B;IAC7B,MAAM,QAAQ,GAAG;QACf,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC;QACrC,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC;QACnC,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC;KACnC,CAAC;IAEF,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IAElD,+BAA+B;IAC/B,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAC1C,CAAC;IAEF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,QAAQ,EAAE,GAAG;YACb,YAAY,EAAE,eAAe,CAAC,CAAC,CAAE,CAAC,EAAE;YACpC,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,OAAO;SACpB,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1C,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAC3C,CAAC;IAEF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,QAAQ,EAAE,GAAG;YACb,YAAY,EAAE,aAAa,CAAC,CAAC,CAAE,CAAC,EAAE;YAClC,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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference Resolution Types
|
|
3
|
+
*
|
|
4
|
+
* Types for the reference resolution system.
|
|
5
|
+
*/
|
|
6
|
+
import { EdgeKind, Language, Node } from '../types';
|
|
7
|
+
/**
|
|
8
|
+
* An unresolved reference from extraction
|
|
9
|
+
*/
|
|
10
|
+
export interface UnresolvedRef {
|
|
11
|
+
/** ID of the source node containing the reference */
|
|
12
|
+
fromNodeId: string;
|
|
13
|
+
/** The name being referenced */
|
|
14
|
+
referenceName: string;
|
|
15
|
+
/** Type of reference */
|
|
16
|
+
referenceKind: EdgeKind;
|
|
17
|
+
/** Line where reference occurs */
|
|
18
|
+
line: number;
|
|
19
|
+
/** Column where reference occurs */
|
|
20
|
+
column: number;
|
|
21
|
+
/** File path where reference occurs */
|
|
22
|
+
filePath: string;
|
|
23
|
+
/** Language of the source file */
|
|
24
|
+
language: Language;
|
|
25
|
+
/** Possible qualified names it might resolve to */
|
|
26
|
+
candidates?: string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A resolved reference
|
|
30
|
+
*/
|
|
31
|
+
export interface ResolvedRef {
|
|
32
|
+
/** Original unresolved reference */
|
|
33
|
+
original: UnresolvedRef;
|
|
34
|
+
/** ID of the target node */
|
|
35
|
+
targetNodeId: string;
|
|
36
|
+
/** Confidence score (0-1) */
|
|
37
|
+
confidence: number;
|
|
38
|
+
/** How it was resolved */
|
|
39
|
+
resolvedBy: 'exact-match' | 'import' | 'qualified-name' | 'framework' | 'fuzzy';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Result of resolution attempt
|
|
43
|
+
*/
|
|
44
|
+
export interface ResolutionResult {
|
|
45
|
+
/** Successfully resolved references */
|
|
46
|
+
resolved: ResolvedRef[];
|
|
47
|
+
/** References that couldn't be resolved */
|
|
48
|
+
unresolved: UnresolvedRef[];
|
|
49
|
+
/** Statistics */
|
|
50
|
+
stats: {
|
|
51
|
+
total: number;
|
|
52
|
+
resolved: number;
|
|
53
|
+
unresolved: number;
|
|
54
|
+
byMethod: Record<string, number>;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Context for resolution - provides access to the graph
|
|
59
|
+
*/
|
|
60
|
+
export interface ResolutionContext {
|
|
61
|
+
/** Get all nodes in a file */
|
|
62
|
+
getNodesInFile(filePath: string): Node[];
|
|
63
|
+
/** Get all nodes by name */
|
|
64
|
+
getNodesByName(name: string): Node[];
|
|
65
|
+
/** Get all nodes by qualified name */
|
|
66
|
+
getNodesByQualifiedName(qualifiedName: string): Node[];
|
|
67
|
+
/** Get all nodes of a kind */
|
|
68
|
+
getNodesByKind(kind: Node['kind']): Node[];
|
|
69
|
+
/** Check if a file exists */
|
|
70
|
+
fileExists(filePath: string): boolean;
|
|
71
|
+
/** Read file content */
|
|
72
|
+
readFile(filePath: string): string | null;
|
|
73
|
+
/** Get project root */
|
|
74
|
+
getProjectRoot(): string;
|
|
75
|
+
/** Get all files */
|
|
76
|
+
getAllFiles(): string[];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Framework-specific resolver
|
|
80
|
+
*/
|
|
81
|
+
export interface FrameworkResolver {
|
|
82
|
+
/** Framework name */
|
|
83
|
+
name: string;
|
|
84
|
+
/** Detect if project uses this framework */
|
|
85
|
+
detect(context: ResolutionContext): boolean;
|
|
86
|
+
/** Resolve a reference using framework-specific patterns */
|
|
87
|
+
resolve(ref: UnresolvedRef, context: ResolutionContext): ResolvedRef | null;
|
|
88
|
+
/** Extract additional nodes specific to this framework */
|
|
89
|
+
extractNodes?(filePath: string, content: string): Node[];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Import mapping from a file
|
|
93
|
+
*/
|
|
94
|
+
export interface ImportMapping {
|
|
95
|
+
/** Local name used in the file */
|
|
96
|
+
localName: string;
|
|
97
|
+
/** Original exported name (may differ due to aliasing) */
|
|
98
|
+
exportedName: string;
|
|
99
|
+
/** Source module/path */
|
|
100
|
+
source: string;
|
|
101
|
+
/** Whether it's a default import */
|
|
102
|
+
isDefault: boolean;
|
|
103
|
+
/** Whether it's a namespace import (import * as X) */
|
|
104
|
+
isNamespace: boolean;
|
|
105
|
+
/** Resolved file path (if local) */
|
|
106
|
+
resolvedPath?: string;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resolution/types.ts"],"names":[],"mappings":"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"}
|