mcp-codebase-intelligence 0.1.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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -0
  3. package/dist/graph/code-graph.d.ts +119 -0
  4. package/dist/graph/code-graph.js +279 -0
  5. package/dist/graph/code-graph.js.map +1 -0
  6. package/dist/graph/schema.d.ts +2 -0
  7. package/dist/graph/schema.js +62 -0
  8. package/dist/graph/schema.js.map +1 -0
  9. package/dist/index.d.ts +5 -0
  10. package/dist/index.js +171 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/indexer/file-watcher.d.ts +13 -0
  13. package/dist/indexer/file-watcher.js +106 -0
  14. package/dist/indexer/file-watcher.js.map +1 -0
  15. package/dist/indexer/lang-go.d.ts +2 -0
  16. package/dist/indexer/lang-go.js +246 -0
  17. package/dist/indexer/lang-go.js.map +1 -0
  18. package/dist/indexer/lang-java.d.ts +2 -0
  19. package/dist/indexer/lang-java.js +307 -0
  20. package/dist/indexer/lang-java.js.map +1 -0
  21. package/dist/indexer/lang-python.d.ts +2 -0
  22. package/dist/indexer/lang-python.js +232 -0
  23. package/dist/indexer/lang-python.js.map +1 -0
  24. package/dist/indexer/lang-rust.d.ts +2 -0
  25. package/dist/indexer/lang-rust.js +323 -0
  26. package/dist/indexer/lang-rust.js.map +1 -0
  27. package/dist/indexer/language-plugin.d.ts +22 -0
  28. package/dist/indexer/language-plugin.js +22 -0
  29. package/dist/indexer/language-plugin.js.map +1 -0
  30. package/dist/indexer/tree-sitter-indexer.d.ts +12 -0
  31. package/dist/indexer/tree-sitter-indexer.js +618 -0
  32. package/dist/indexer/tree-sitter-indexer.js.map +1 -0
  33. package/dist/lsp/lsp-client.d.ts +45 -0
  34. package/dist/lsp/lsp-client.js +315 -0
  35. package/dist/lsp/lsp-client.js.map +1 -0
  36. package/dist/lsp/lsp-manager.d.ts +13 -0
  37. package/dist/lsp/lsp-manager.js +96 -0
  38. package/dist/lsp/lsp-manager.js.map +1 -0
  39. package/dist/tools/analyze-impact.d.ts +38 -0
  40. package/dist/tools/analyze-impact.js +126 -0
  41. package/dist/tools/analyze-impact.js.map +1 -0
  42. package/dist/tools/architecture-diagram.d.ts +33 -0
  43. package/dist/tools/architecture-diagram.js +216 -0
  44. package/dist/tools/architecture-diagram.js.map +1 -0
  45. package/dist/tools/find-implementations.d.ts +33 -0
  46. package/dist/tools/find-implementations.js +68 -0
  47. package/dist/tools/find-implementations.js.map +1 -0
  48. package/dist/tools/find-symbol.d.ts +39 -0
  49. package/dist/tools/find-symbol.js +52 -0
  50. package/dist/tools/find-symbol.js.map +1 -0
  51. package/dist/tools/get-call-graph.d.ts +40 -0
  52. package/dist/tools/get-call-graph.js +174 -0
  53. package/dist/tools/get-call-graph.js.map +1 -0
  54. package/dist/tools/get-dependencies.d.ts +28 -0
  55. package/dist/tools/get-dependencies.js +68 -0
  56. package/dist/tools/get-dependencies.js.map +1 -0
  57. package/dist/tools/get-exports.d.ts +23 -0
  58. package/dist/tools/get-exports.js +40 -0
  59. package/dist/tools/get-exports.js.map +1 -0
  60. package/dist/tools/get-references.d.ts +28 -0
  61. package/dist/tools/get-references.js +53 -0
  62. package/dist/tools/get-references.js.map +1 -0
  63. package/dist/tools/get-stats.d.ts +15 -0
  64. package/dist/tools/get-stats.js +23 -0
  65. package/dist/tools/get-stats.js.map +1 -0
  66. package/dist/tools/get-type-info.d.ts +33 -0
  67. package/dist/tools/get-type-info.js +69 -0
  68. package/dist/tools/get-type-info.js.map +1 -0
  69. package/dist/tools/goto-definition.d.ts +33 -0
  70. package/dist/tools/goto-definition.js +77 -0
  71. package/dist/tools/goto-definition.js.map +1 -0
  72. package/dist/tools/natural-language-query.d.ts +23 -0
  73. package/dist/tools/natural-language-query.js +426 -0
  74. package/dist/tools/natural-language-query.js.map +1 -0
  75. package/dist/tools/reindex.d.ts +15 -0
  76. package/dist/tools/reindex.js +20 -0
  77. package/dist/tools/reindex.js.map +1 -0
  78. package/dist/tools/semantic-diff.d.ts +32 -0
  79. package/dist/tools/semantic-diff.js +407 -0
  80. package/dist/tools/semantic-diff.js.map +1 -0
  81. package/dist/utils/logger.d.ts +6 -0
  82. package/dist/utils/logger.js +15 -0
  83. package/dist/utils/logger.js.map +1 -0
  84. package/package.json +68 -0
@@ -0,0 +1,618 @@
1
+ import Parser from "tree-sitter";
2
+ import TypeScript from "tree-sitter-typescript";
3
+ import { readFileSync } from "fs";
4
+ import { logger } from "../utils/logger.js";
5
+ import { registerLanguage, getPluginForFile, } from "./language-plugin.js";
6
+ const tsParser = new Parser();
7
+ tsParser.setLanguage(TypeScript.typescript);
8
+ const tsxParser = new Parser();
9
+ tsxParser.setLanguage(TypeScript.tsx);
10
+ function getTsParser(filePath) {
11
+ return filePath.endsWith(".tsx") || filePath.endsWith(".jsx") ? tsxParser : tsParser;
12
+ }
13
+ /**
14
+ * Extract the bare (rightmost) name from an expression.
15
+ * "schema.parse" -> "parse"
16
+ * "this.handler" -> "handler"
17
+ * "a.b.c.method" -> "method"
18
+ * "foo" -> "foo"
19
+ */
20
+ export function bareName(fullName) {
21
+ const lastDot = fullName.lastIndexOf(".");
22
+ return lastDot === -1 ? fullName : fullName.substring(lastDot + 1);
23
+ }
24
+ function hasExportModifier(node) {
25
+ // Check if the node or its parent has an export keyword
26
+ if (node.parent?.type === "export_statement")
27
+ return true;
28
+ // Check children for export keyword
29
+ for (let i = 0; i < node.childCount; i++) {
30
+ const child = node.child(i);
31
+ if (child?.type === "export" || child?.text === "export")
32
+ return true;
33
+ }
34
+ return false;
35
+ }
36
+ function extractSignature(node, kind) {
37
+ if (kind === "function" || kind === "method") {
38
+ const params = node.childForFieldName("parameters");
39
+ const returnType = node.childForFieldName("return_type");
40
+ const name = node.childForFieldName("name")?.text ?? "";
41
+ const paramText = params?.text ?? "()";
42
+ const retText = returnType ? `: ${returnType.text}` : "";
43
+ return `${name}${paramText}${retText}`;
44
+ }
45
+ if (kind === "class" || kind === "interface") {
46
+ return node.children
47
+ .filter((c) => c.type !== "class_body" && c.type !== "interface_body" && c.type !== "object_type")
48
+ .map((c) => c.text)
49
+ .join(" ")
50
+ .trim();
51
+ }
52
+ return undefined;
53
+ }
54
+ function walkNode(node, filePath, symbols, references, imports, parentIndex) {
55
+ switch (node.type) {
56
+ case "function_declaration":
57
+ case "generator_function_declaration": {
58
+ const nameNode = node.childForFieldName("name");
59
+ if (nameNode) {
60
+ const sym = {
61
+ name: nameNode.text,
62
+ kind: "function",
63
+ filePath,
64
+ lineStart: node.startPosition.row + 1,
65
+ lineEnd: node.endPosition.row + 1,
66
+ colStart: node.startPosition.column,
67
+ colEnd: node.endPosition.column,
68
+ isExported: hasExportModifier(node),
69
+ signature: extractSignature(node, "function"),
70
+ };
71
+ if (parentIndex !== undefined)
72
+ sym.parentSymbolId = parentIndex;
73
+ const idx = symbols.length;
74
+ symbols.push(sym);
75
+ walkChildren(node, filePath, symbols, references, imports, idx);
76
+ return;
77
+ }
78
+ break;
79
+ }
80
+ case "class_declaration": {
81
+ const nameNode = node.childForFieldName("name");
82
+ if (nameNode) {
83
+ const sym = {
84
+ name: nameNode.text,
85
+ kind: "class",
86
+ filePath,
87
+ lineStart: node.startPosition.row + 1,
88
+ lineEnd: node.endPosition.row + 1,
89
+ colStart: node.startPosition.column,
90
+ colEnd: node.endPosition.column,
91
+ isExported: hasExportModifier(node),
92
+ signature: extractSignature(node, "class"),
93
+ };
94
+ if (parentIndex !== undefined)
95
+ sym.parentSymbolId = parentIndex;
96
+ const idx = symbols.length;
97
+ symbols.push(sym);
98
+ // Extract superclass reference
99
+ // tree-sitter-typescript: class_heritage > extends_clause > identifier
100
+ const classHeritage = findChild(node, "class_heritage");
101
+ const extendsClause = classHeritage ? findChild(classHeritage, "extends_clause") : null;
102
+ if (extendsClause) {
103
+ // The superclass name is the second child (first is "extends" keyword)
104
+ const superName = extendsClause.child(1)?.text;
105
+ if (superName) {
106
+ references.push({
107
+ fromSymbolId: idx,
108
+ toSymbolName: superName,
109
+ toSymbolBareName: bareName(superName),
110
+ kind: "extends",
111
+ line: extendsClause.startPosition.row + 1,
112
+ col: extendsClause.startPosition.column,
113
+ });
114
+ }
115
+ }
116
+ walkChildren(node, filePath, symbols, references, imports, idx);
117
+ return;
118
+ }
119
+ break;
120
+ }
121
+ case "interface_declaration": {
122
+ const nameNode = node.childForFieldName("name");
123
+ if (nameNode) {
124
+ const sym = {
125
+ name: nameNode.text,
126
+ kind: "interface",
127
+ filePath,
128
+ lineStart: node.startPosition.row + 1,
129
+ lineEnd: node.endPosition.row + 1,
130
+ colStart: node.startPosition.column,
131
+ colEnd: node.endPosition.column,
132
+ isExported: hasExportModifier(node),
133
+ signature: extractSignature(node, "interface"),
134
+ };
135
+ if (parentIndex !== undefined)
136
+ sym.parentSymbolId = parentIndex;
137
+ const idx = symbols.length;
138
+ symbols.push(sym);
139
+ walkChildren(node, filePath, symbols, references, imports, idx);
140
+ return;
141
+ }
142
+ break;
143
+ }
144
+ case "type_alias_declaration": {
145
+ const nameNode = node.childForFieldName("name");
146
+ if (nameNode) {
147
+ symbols.push({
148
+ name: nameNode.text,
149
+ kind: "type",
150
+ filePath,
151
+ lineStart: node.startPosition.row + 1,
152
+ lineEnd: node.endPosition.row + 1,
153
+ colStart: node.startPosition.column,
154
+ colEnd: node.endPosition.column,
155
+ parentSymbolId: parentIndex,
156
+ isExported: hasExportModifier(node),
157
+ });
158
+ }
159
+ break;
160
+ }
161
+ case "enum_declaration": {
162
+ const nameNode = node.childForFieldName("name");
163
+ if (nameNode) {
164
+ symbols.push({
165
+ name: nameNode.text,
166
+ kind: "enum",
167
+ filePath,
168
+ lineStart: node.startPosition.row + 1,
169
+ lineEnd: node.endPosition.row + 1,
170
+ colStart: node.startPosition.column,
171
+ colEnd: node.endPosition.column,
172
+ parentSymbolId: parentIndex,
173
+ isExported: hasExportModifier(node),
174
+ });
175
+ }
176
+ break;
177
+ }
178
+ case "method_definition":
179
+ case "public_field_definition": {
180
+ const nameNode = node.childForFieldName("name");
181
+ if (nameNode && parentIndex !== undefined) {
182
+ const sym = {
183
+ name: nameNode.text,
184
+ kind: node.type === "method_definition" ? "method" : "property",
185
+ filePath,
186
+ lineStart: node.startPosition.row + 1,
187
+ lineEnd: node.endPosition.row + 1,
188
+ colStart: node.startPosition.column,
189
+ colEnd: node.endPosition.column,
190
+ parentSymbolId: parentIndex,
191
+ isExported: false,
192
+ signature: node.type === "method_definition"
193
+ ? extractSignature(node, "method")
194
+ : undefined,
195
+ };
196
+ const idx = symbols.length;
197
+ symbols.push(sym);
198
+ walkChildren(node, filePath, symbols, references, imports, idx);
199
+ return;
200
+ }
201
+ break;
202
+ }
203
+ case "lexical_declaration":
204
+ case "variable_declaration": {
205
+ const isExported = hasExportModifier(node);
206
+ for (let i = 0; i < node.namedChildCount; i++) {
207
+ const declarator = node.namedChild(i);
208
+ if (declarator?.type === "variable_declarator") {
209
+ const nameNode = declarator.childForFieldName("name");
210
+ const value = declarator.childForFieldName("value");
211
+ if (nameNode) {
212
+ // Check if it's an arrow function or function expression
213
+ const isFunc = value?.type === "arrow_function" || value?.type === "function_expression";
214
+ const sym = {
215
+ name: nameNode.text,
216
+ kind: isFunc ? "function" : "variable",
217
+ filePath,
218
+ lineStart: node.startPosition.row + 1,
219
+ lineEnd: node.endPosition.row + 1,
220
+ colStart: node.startPosition.column,
221
+ colEnd: node.endPosition.column,
222
+ parentSymbolId: parentIndex,
223
+ isExported,
224
+ signature: isFunc ? extractSignature(value, "function") : undefined,
225
+ };
226
+ const idx = symbols.length;
227
+ symbols.push(sym);
228
+ // Walk the value for references
229
+ if (value) {
230
+ walkNode(value, filePath, symbols, references, imports, idx);
231
+ }
232
+ }
233
+ }
234
+ }
235
+ return; // Already handled children
236
+ }
237
+ case "call_expression": {
238
+ const func = node.childForFieldName("function");
239
+ // Check for require('./foo') calls
240
+ if (func?.text === "require") {
241
+ const args = node.childForFieldName("arguments");
242
+ if (args && args.namedChildCount > 0) {
243
+ const firstArg = args.namedChild(0);
244
+ if (firstArg && (firstArg.type === "string" || firstArg.type === "template_string")) {
245
+ const sourcePath = firstArg.text.replace(/['"]/g, "").replace(/`/g, "");
246
+ imports.push({
247
+ sourcePath,
248
+ importedName: "*",
249
+ localName: "*",
250
+ isDefault: false,
251
+ isNamespace: true,
252
+ line: node.startPosition.row + 1,
253
+ });
254
+ }
255
+ }
256
+ }
257
+ // Handle regular function calls
258
+ if (func && parentIndex !== undefined) {
259
+ const name = func.type === "member_expression"
260
+ ? func.text
261
+ : func.type === "identifier"
262
+ ? func.text
263
+ : undefined;
264
+ if (name) {
265
+ references.push({
266
+ fromSymbolId: parentIndex,
267
+ toSymbolName: name,
268
+ toSymbolBareName: bareName(name),
269
+ kind: "call",
270
+ line: node.startPosition.row + 1,
271
+ col: node.startPosition.column,
272
+ });
273
+ }
274
+ }
275
+ break;
276
+ }
277
+ case "import_call_expression": {
278
+ // Handle dynamic imports: import('./foo')
279
+ const source = node.childForFieldName("source");
280
+ if (source) {
281
+ const sourcePath = source.text.replace(/['"]/g, "").replace(/`/g, "");
282
+ imports.push({
283
+ sourcePath,
284
+ importedName: "*",
285
+ localName: "*",
286
+ isDefault: false,
287
+ isNamespace: true,
288
+ line: node.startPosition.row + 1,
289
+ });
290
+ }
291
+ break;
292
+ }
293
+ case "new_expression": {
294
+ const constructor = node.childForFieldName("constructor");
295
+ if (constructor && parentIndex !== undefined) {
296
+ references.push({
297
+ fromSymbolId: parentIndex,
298
+ toSymbolName: constructor.text,
299
+ toSymbolBareName: bareName(constructor.text),
300
+ kind: "instantiation",
301
+ line: node.startPosition.row + 1,
302
+ col: node.startPosition.column,
303
+ });
304
+ }
305
+ break;
306
+ }
307
+ case "import_statement": {
308
+ const source = node.childForFieldName("source");
309
+ if (!source)
310
+ break;
311
+ const sourcePath = source.text.replace(/['"]/g, "");
312
+ for (let i = 0; i < node.namedChildCount; i++) {
313
+ const child = node.namedChild(i);
314
+ if (!child)
315
+ continue;
316
+ if (child.type === "import_clause") {
317
+ for (let j = 0; j < child.namedChildCount; j++) {
318
+ const clause = child.namedChild(j);
319
+ if (!clause)
320
+ continue;
321
+ if (clause.type === "identifier") {
322
+ // Default import
323
+ imports.push({
324
+ sourcePath,
325
+ importedName: "default",
326
+ localName: clause.text,
327
+ isDefault: true,
328
+ isNamespace: false,
329
+ line: node.startPosition.row + 1,
330
+ });
331
+ }
332
+ else if (clause.type === "named_imports") {
333
+ for (let k = 0; k < clause.namedChildCount; k++) {
334
+ const specifier = clause.namedChild(k);
335
+ if (specifier?.type === "import_specifier") {
336
+ const importedName = specifier.childForFieldName("name")?.text ?? specifier.text;
337
+ const alias = specifier.childForFieldName("alias")?.text;
338
+ imports.push({
339
+ sourcePath,
340
+ importedName,
341
+ localName: alias ?? importedName,
342
+ isDefault: false,
343
+ isNamespace: false,
344
+ line: node.startPosition.row + 1,
345
+ });
346
+ }
347
+ }
348
+ }
349
+ else if (clause.type === "namespace_import") {
350
+ const name = clause.childForFieldName("name")?.text ?? clause.text.replace("* as ", "");
351
+ imports.push({
352
+ sourcePath,
353
+ importedName: "*",
354
+ localName: name,
355
+ isDefault: false,
356
+ isNamespace: true,
357
+ line: node.startPosition.row + 1,
358
+ });
359
+ }
360
+ }
361
+ }
362
+ }
363
+ return; // Don't walk children of imports
364
+ }
365
+ case "export_statement": {
366
+ // Check for re-exports: export { foo } from './bar' or export * from './bar'
367
+ const source = node.childForFieldName("source");
368
+ if (source) {
369
+ const sourcePath = source.text.replace(/['"]/g, "");
370
+ // Handle export * from './bar'
371
+ const exportClause = findChild(node, "export_clause");
372
+ if (!exportClause) {
373
+ // export * from './bar' - namespace re-export
374
+ const isExportAll = node.text.startsWith("export *");
375
+ if (isExportAll) {
376
+ imports.push({
377
+ sourcePath,
378
+ importedName: "*",
379
+ localName: "*",
380
+ isDefault: false,
381
+ isNamespace: true,
382
+ line: node.startPosition.row + 1,
383
+ });
384
+ }
385
+ }
386
+ else {
387
+ // export { foo, bar as baz } from './bar'
388
+ for (let k = 0; k < exportClause.namedChildCount; k++) {
389
+ const specifier = exportClause.namedChild(k);
390
+ if (specifier?.type === "export_specifier") {
391
+ const nameNode = specifier.childForFieldName("name");
392
+ const aliasNode = specifier.childForFieldName("alias");
393
+ const importedName = nameNode?.text ?? specifier.text;
394
+ const exportedName = aliasNode?.text ?? importedName;
395
+ // Track as import (what we're importing from source)
396
+ imports.push({
397
+ sourcePath,
398
+ importedName,
399
+ localName: importedName,
400
+ isDefault: importedName === "default",
401
+ isNamespace: false,
402
+ line: node.startPosition.row + 1,
403
+ });
404
+ // Track as exported symbol (what we're exporting to consumers)
405
+ symbols.push({
406
+ name: exportedName,
407
+ kind: "variable",
408
+ filePath,
409
+ lineStart: node.startPosition.row + 1,
410
+ lineEnd: node.endPosition.row + 1,
411
+ colStart: node.startPosition.column,
412
+ colEnd: node.endPosition.column,
413
+ parentSymbolId: parentIndex,
414
+ isExported: true,
415
+ });
416
+ }
417
+ }
418
+ }
419
+ return; // Don't walk children, we've handled everything
420
+ }
421
+ // Check for default exports: export default function/class/expression
422
+ const declarationChild = node.namedChild(0);
423
+ if (declarationChild) {
424
+ const isDefaultExport = node.text.startsWith("export default");
425
+ if (isDefaultExport) {
426
+ // Handle: export default function foo() {} or export default class Bar {}
427
+ if (declarationChild.type === "function_declaration" ||
428
+ declarationChild.type === "class_declaration") {
429
+ const nameNode = declarationChild.childForFieldName("name");
430
+ if (nameNode) {
431
+ // Named default export - process the declaration and mark it as exported default
432
+ walkNode(declarationChild, filePath, symbols, references, imports, parentIndex);
433
+ // The symbol was already added, mark it as default export
434
+ if (symbols.length > 0) {
435
+ const lastSymbol = symbols[symbols.length - 1];
436
+ if (lastSymbol.name === nameNode.text) {
437
+ lastSymbol.isExported = true;
438
+ }
439
+ }
440
+ return;
441
+ }
442
+ }
443
+ // Handle: export default <expression> - anonymous default export
444
+ symbols.push({
445
+ name: "default",
446
+ kind: "variable",
447
+ filePath,
448
+ lineStart: node.startPosition.row + 1,
449
+ lineEnd: node.endPosition.row + 1,
450
+ colStart: node.startPosition.column,
451
+ colEnd: node.endPosition.column,
452
+ parentSymbolId: parentIndex,
453
+ isExported: true,
454
+ });
455
+ return;
456
+ }
457
+ }
458
+ // Walk the declaration inside the export (for regular export statements)
459
+ for (let i = 0; i < node.namedChildCount; i++) {
460
+ const child = node.namedChild(i);
461
+ if (child) {
462
+ walkNode(child, filePath, symbols, references, imports, parentIndex);
463
+ }
464
+ }
465
+ return;
466
+ }
467
+ case "expression_statement": {
468
+ // Handle CJS exports: module.exports = ..., exports.foo = ...
469
+ const expr = node.namedChild(0);
470
+ if (expr?.type === "assignment_expression") {
471
+ const left = expr.childForFieldName("left");
472
+ const right = expr.childForFieldName("right");
473
+ if (left && right) {
474
+ const leftText = left.text;
475
+ if (leftText === "module.exports") {
476
+ // module.exports = foo OR module.exports = { ... }
477
+ if (right.type === "identifier") {
478
+ // module.exports = someFunction — mark that symbol as exported
479
+ // Also create a reference so we track the connection
480
+ symbols.push({
481
+ name: right.text,
482
+ kind: "variable",
483
+ filePath,
484
+ lineStart: node.startPosition.row + 1,
485
+ lineEnd: node.endPosition.row + 1,
486
+ colStart: node.startPosition.column,
487
+ colEnd: node.endPosition.column,
488
+ parentSymbolId: parentIndex,
489
+ isExported: true,
490
+ });
491
+ }
492
+ else if (right.type === "object") {
493
+ // module.exports = { foo, bar: baz }
494
+ for (let i = 0; i < right.namedChildCount; i++) {
495
+ const prop = right.namedChild(i);
496
+ if (prop?.type === "shorthand_property_identifier") {
497
+ symbols.push({
498
+ name: prop.text,
499
+ kind: "variable",
500
+ filePath,
501
+ lineStart: prop.startPosition.row + 1,
502
+ lineEnd: prop.endPosition.row + 1,
503
+ colStart: prop.startPosition.column,
504
+ colEnd: prop.endPosition.column,
505
+ parentSymbolId: parentIndex,
506
+ isExported: true,
507
+ });
508
+ }
509
+ else if (prop?.type === "pair") {
510
+ const key = prop.childForFieldName("key");
511
+ if (key) {
512
+ symbols.push({
513
+ name: key.text,
514
+ kind: "variable",
515
+ filePath,
516
+ lineStart: prop.startPosition.row + 1,
517
+ lineEnd: prop.endPosition.row + 1,
518
+ colStart: prop.startPosition.column,
519
+ colEnd: prop.endPosition.column,
520
+ parentSymbolId: parentIndex,
521
+ isExported: true,
522
+ });
523
+ }
524
+ }
525
+ }
526
+ }
527
+ // Walk the right side for any nested references
528
+ walkNode(right, filePath, symbols, references, imports, parentIndex);
529
+ return;
530
+ }
531
+ else if (leftText.startsWith("exports.") || leftText.startsWith("module.exports.")) {
532
+ // exports.foo = ... or module.exports.foo = ...
533
+ const exportName = bareName(leftText);
534
+ symbols.push({
535
+ name: exportName,
536
+ kind: "variable",
537
+ filePath,
538
+ lineStart: node.startPosition.row + 1,
539
+ lineEnd: node.endPosition.row + 1,
540
+ colStart: node.startPosition.column,
541
+ colEnd: node.endPosition.column,
542
+ parentSymbolId: parentIndex,
543
+ isExported: true,
544
+ });
545
+ // Walk the right side
546
+ walkNode(right, filePath, symbols, references, imports, parentIndex);
547
+ return;
548
+ }
549
+ }
550
+ }
551
+ break;
552
+ }
553
+ }
554
+ // Default: walk children
555
+ walkChildren(node, filePath, symbols, references, imports, parentIndex);
556
+ }
557
+ function walkChildren(node, filePath, symbols, references, imports, parentIndex) {
558
+ for (let i = 0; i < node.namedChildCount; i++) {
559
+ const child = node.namedChild(i);
560
+ if (child) {
561
+ walkNode(child, filePath, symbols, references, imports, parentIndex);
562
+ }
563
+ }
564
+ }
565
+ function findChild(node, type) {
566
+ for (let i = 0; i < node.childCount; i++) {
567
+ const child = node.child(i);
568
+ if (child?.type === type)
569
+ return child;
570
+ }
571
+ return null;
572
+ }
573
+ // --- TypeScript/JavaScript Language Plugin ---
574
+ export const typescriptPlugin = {
575
+ id: "typescript",
576
+ extensions: [".ts", ".tsx", ".js", ".jsx", ".mts", ".cts", ".mjs", ".cjs"],
577
+ getParser: getTsParser,
578
+ walk: walkNode,
579
+ };
580
+ // Register on import
581
+ registerLanguage(typescriptPlugin);
582
+ // --- Generic parse functions (dispatch to plugins) ---
583
+ export function parseFile(filePath) {
584
+ try {
585
+ const plugin = getPluginForFile(filePath);
586
+ if (!plugin) {
587
+ logger.debug(`No language plugin for: ${filePath}`);
588
+ return null;
589
+ }
590
+ const content = readFileSync(filePath, "utf-8");
591
+ const parser = plugin.getParser(filePath);
592
+ const tree = parser.parse(content);
593
+ const symbols = [];
594
+ const references = [];
595
+ const imports = [];
596
+ plugin.walk(tree.rootNode, filePath, symbols, references, imports);
597
+ logger.debug(`Parsed ${filePath}: ${symbols.length} symbols, ${references.length} refs, ${imports.length} imports`);
598
+ return { symbols, references, imports, content };
599
+ }
600
+ catch (err) {
601
+ logger.error(`Failed to parse ${filePath}`, err);
602
+ return null;
603
+ }
604
+ }
605
+ export function parseSource(source, filePath) {
606
+ const plugin = getPluginForFile(filePath);
607
+ if (!plugin) {
608
+ return { symbols: [], references: [], imports: [], content: source };
609
+ }
610
+ const parser = plugin.getParser(filePath);
611
+ const tree = parser.parse(source);
612
+ const symbols = [];
613
+ const references = [];
614
+ const imports = [];
615
+ plugin.walk(tree.rootNode, filePath, symbols, references, imports);
616
+ return { symbols, references, imports, content: source };
617
+ }
618
+ //# sourceMappingURL=tree-sitter-indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-sitter-indexer.js","sourceRoot":"","sources":["../../src/indexer/tree-sitter-indexer.ts"],"names":[],"mappings":"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"}