@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.
Files changed (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +641 -0
  3. package/dist/bin/codegraph.d.ts +20 -0
  4. package/dist/bin/codegraph.d.ts.map +1 -0
  5. package/dist/bin/codegraph.js +704 -0
  6. package/dist/bin/codegraph.js.map +1 -0
  7. package/dist/config.d.ts +51 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +291 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/context/formatter.d.ts +30 -0
  12. package/dist/context/formatter.d.ts.map +1 -0
  13. package/dist/context/formatter.js +244 -0
  14. package/dist/context/formatter.js.map +1 -0
  15. package/dist/context/index.d.ts +86 -0
  16. package/dist/context/index.d.ts.map +1 -0
  17. package/dist/context/index.js +402 -0
  18. package/dist/context/index.js.map +1 -0
  19. package/dist/db/index.d.ts +64 -0
  20. package/dist/db/index.d.ts.map +1 -0
  21. package/dist/db/index.js +170 -0
  22. package/dist/db/index.js.map +1 -0
  23. package/dist/db/migrations.d.ts +44 -0
  24. package/dist/db/migrations.d.ts.map +1 -0
  25. package/dist/db/migrations.js +105 -0
  26. package/dist/db/migrations.js.map +1 -0
  27. package/dist/db/queries.d.ts +148 -0
  28. package/dist/db/queries.d.ts.map +1 -0
  29. package/dist/db/queries.js +669 -0
  30. package/dist/db/queries.js.map +1 -0
  31. package/dist/directory.d.ts +45 -0
  32. package/dist/directory.d.ts.map +1 -0
  33. package/dist/directory.js +191 -0
  34. package/dist/directory.js.map +1 -0
  35. package/dist/errors.d.ts +136 -0
  36. package/dist/errors.d.ts.map +1 -0
  37. package/dist/errors.js +219 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/extraction/grammars.d.ts +36 -0
  40. package/dist/extraction/grammars.d.ts.map +1 -0
  41. package/dist/extraction/grammars.js +181 -0
  42. package/dist/extraction/grammars.js.map +1 -0
  43. package/dist/extraction/index.d.ts +91 -0
  44. package/dist/extraction/index.d.ts.map +1 -0
  45. package/dist/extraction/index.js +493 -0
  46. package/dist/extraction/index.js.map +1 -0
  47. package/dist/extraction/tree-sitter.d.ts +176 -0
  48. package/dist/extraction/tree-sitter.d.ts.map +1 -0
  49. package/dist/extraction/tree-sitter.js +1798 -0
  50. package/dist/extraction/tree-sitter.js.map +1 -0
  51. package/dist/graph/index.d.ts +8 -0
  52. package/dist/graph/index.d.ts.map +1 -0
  53. package/dist/graph/index.js +13 -0
  54. package/dist/graph/index.js.map +1 -0
  55. package/dist/graph/queries.d.ts +106 -0
  56. package/dist/graph/queries.d.ts.map +1 -0
  57. package/dist/graph/queries.js +355 -0
  58. package/dist/graph/queries.js.map +1 -0
  59. package/dist/graph/traversal.d.ts +127 -0
  60. package/dist/graph/traversal.d.ts.map +1 -0
  61. package/dist/graph/traversal.js +465 -0
  62. package/dist/graph/traversal.js.map +1 -0
  63. package/dist/index.d.ts +496 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +818 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/installer/banner.d.ts +40 -0
  68. package/dist/installer/banner.d.ts.map +1 -0
  69. package/dist/installer/banner.js +162 -0
  70. package/dist/installer/banner.js.map +1 -0
  71. package/dist/installer/claude-md-template.d.ts +10 -0
  72. package/dist/installer/claude-md-template.d.ts.map +1 -0
  73. package/dist/installer/claude-md-template.js +46 -0
  74. package/dist/installer/claude-md-template.js.map +1 -0
  75. package/dist/installer/config-writer.d.ts +36 -0
  76. package/dist/installer/config-writer.d.ts.map +1 -0
  77. package/dist/installer/config-writer.js +282 -0
  78. package/dist/installer/config-writer.js.map +1 -0
  79. package/dist/installer/index.d.ts +13 -0
  80. package/dist/installer/index.d.ts.map +1 -0
  81. package/dist/installer/index.js +155 -0
  82. package/dist/installer/index.js.map +1 -0
  83. package/dist/installer/prompts.d.ts +18 -0
  84. package/dist/installer/prompts.d.ts.map +1 -0
  85. package/dist/installer/prompts.js +113 -0
  86. package/dist/installer/prompts.js.map +1 -0
  87. package/dist/mcp/index.d.ts +64 -0
  88. package/dist/mcp/index.d.ts.map +1 -0
  89. package/dist/mcp/index.js +207 -0
  90. package/dist/mcp/index.js.map +1 -0
  91. package/dist/mcp/tools.d.ts +93 -0
  92. package/dist/mcp/tools.d.ts.map +1 -0
  93. package/dist/mcp/tools.js +442 -0
  94. package/dist/mcp/tools.js.map +1 -0
  95. package/dist/mcp/transport.d.ts +89 -0
  96. package/dist/mcp/transport.d.ts.map +1 -0
  97. package/dist/mcp/transport.js +170 -0
  98. package/dist/mcp/transport.js.map +1 -0
  99. package/dist/resolution/frameworks/csharp.d.ts +8 -0
  100. package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
  101. package/dist/resolution/frameworks/csharp.js +274 -0
  102. package/dist/resolution/frameworks/csharp.js.map +1 -0
  103. package/dist/resolution/frameworks/express.d.ts +8 -0
  104. package/dist/resolution/frameworks/express.d.ts.map +1 -0
  105. package/dist/resolution/frameworks/express.js +208 -0
  106. package/dist/resolution/frameworks/express.js.map +1 -0
  107. package/dist/resolution/frameworks/go.d.ts +8 -0
  108. package/dist/resolution/frameworks/go.d.ts.map +1 -0
  109. package/dist/resolution/frameworks/go.js +225 -0
  110. package/dist/resolution/frameworks/go.js.map +1 -0
  111. package/dist/resolution/frameworks/index.d.ts +33 -0
  112. package/dist/resolution/frameworks/index.d.ts.map +1 -0
  113. package/dist/resolution/frameworks/index.js +113 -0
  114. package/dist/resolution/frameworks/index.js.map +1 -0
  115. package/dist/resolution/frameworks/java.d.ts +8 -0
  116. package/dist/resolution/frameworks/java.d.ts.map +1 -0
  117. package/dist/resolution/frameworks/java.js +239 -0
  118. package/dist/resolution/frameworks/java.js.map +1 -0
  119. package/dist/resolution/frameworks/laravel.d.ts +13 -0
  120. package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
  121. package/dist/resolution/frameworks/laravel.js +198 -0
  122. package/dist/resolution/frameworks/laravel.js.map +1 -0
  123. package/dist/resolution/frameworks/python.d.ts +10 -0
  124. package/dist/resolution/frameworks/python.d.ts.map +1 -0
  125. package/dist/resolution/frameworks/python.js +331 -0
  126. package/dist/resolution/frameworks/python.js.map +1 -0
  127. package/dist/resolution/frameworks/react.d.ts +8 -0
  128. package/dist/resolution/frameworks/react.d.ts.map +1 -0
  129. package/dist/resolution/frameworks/react.js +294 -0
  130. package/dist/resolution/frameworks/react.js.map +1 -0
  131. package/dist/resolution/frameworks/ruby.d.ts +8 -0
  132. package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
  133. package/dist/resolution/frameworks/ruby.js +262 -0
  134. package/dist/resolution/frameworks/ruby.js.map +1 -0
  135. package/dist/resolution/frameworks/rust.d.ts +8 -0
  136. package/dist/resolution/frameworks/rust.d.ts.map +1 -0
  137. package/dist/resolution/frameworks/rust.js +222 -0
  138. package/dist/resolution/frameworks/rust.js.map +1 -0
  139. package/dist/resolution/frameworks/swift.d.ts +10 -0
  140. package/dist/resolution/frameworks/swift.d.ts.map +1 -0
  141. package/dist/resolution/frameworks/swift.js +486 -0
  142. package/dist/resolution/frameworks/swift.js.map +1 -0
  143. package/dist/resolution/import-resolver.d.ts +20 -0
  144. package/dist/resolution/import-resolver.d.ts.map +1 -0
  145. package/dist/resolution/import-resolver.js +445 -0
  146. package/dist/resolution/import-resolver.js.map +1 -0
  147. package/dist/resolution/index.d.ts +72 -0
  148. package/dist/resolution/index.d.ts.map +1 -0
  149. package/dist/resolution/index.js +301 -0
  150. package/dist/resolution/index.js.map +1 -0
  151. package/dist/resolution/name-matcher.d.ts +27 -0
  152. package/dist/resolution/name-matcher.d.ts.map +1 -0
  153. package/dist/resolution/name-matcher.js +210 -0
  154. package/dist/resolution/name-matcher.js.map +1 -0
  155. package/dist/resolution/types.d.ts +108 -0
  156. package/dist/resolution/types.d.ts.map +1 -0
  157. package/dist/resolution/types.js +8 -0
  158. package/dist/resolution/types.js.map +1 -0
  159. package/dist/sync/git-hooks.d.ts +66 -0
  160. package/dist/sync/git-hooks.d.ts.map +1 -0
  161. package/dist/sync/git-hooks.js +281 -0
  162. package/dist/sync/git-hooks.js.map +1 -0
  163. package/dist/sync/index.d.ts +13 -0
  164. package/dist/sync/index.d.ts.map +1 -0
  165. package/dist/sync/index.js +18 -0
  166. package/dist/sync/index.js.map +1 -0
  167. package/dist/types.d.ts +410 -0
  168. package/dist/types.d.ts.map +1 -0
  169. package/dist/types.js +165 -0
  170. package/dist/types.js.map +1 -0
  171. package/dist/utils.d.ts +116 -0
  172. package/dist/utils.d.ts.map +1 -0
  173. package/dist/utils.js +295 -0
  174. package/dist/utils.js.map +1 -0
  175. package/dist/vectors/embedder.d.ts +140 -0
  176. package/dist/vectors/embedder.d.ts.map +1 -0
  177. package/dist/vectors/embedder.js +336 -0
  178. package/dist/vectors/embedder.js.map +1 -0
  179. package/dist/vectors/index.d.ts +9 -0
  180. package/dist/vectors/index.d.ts.map +1 -0
  181. package/dist/vectors/index.js +20 -0
  182. package/dist/vectors/index.js.map +1 -0
  183. package/dist/vectors/manager.d.ts +119 -0
  184. package/dist/vectors/manager.d.ts.map +1 -0
  185. package/dist/vectors/manager.js +274 -0
  186. package/dist/vectors/manager.js.map +1 -0
  187. package/dist/vectors/search.d.ts +134 -0
  188. package/dist/vectors/search.d.ts.map +1 -0
  189. package/dist/vectors/search.js +409 -0
  190. package/dist/vectors/search.js.map +1 -0
  191. package/package.json +67 -0
  192. 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":"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"}
@@ -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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"}