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
package/dist/index.js ADDED
@@ -0,0 +1,171 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import path from "path";
5
+ import { initializeDatabase } from "./graph/schema.js";
6
+ import { CodeGraph } from "./graph/code-graph.js";
7
+ import { FileWatcher } from "./indexer/file-watcher.js";
8
+ // Language plugins — imported for side-effect (registration)
9
+ import "./indexer/lang-python.js";
10
+ import "./indexer/lang-go.js";
11
+ import "./indexer/lang-rust.js";
12
+ import "./indexer/lang-java.js";
13
+ import { findSymbolTool, handleFindSymbol } from "./tools/find-symbol.js";
14
+ import { getReferencesTool, handleGetReferences } from "./tools/get-references.js";
15
+ import { getExportsTool, handleGetExports } from "./tools/get-exports.js";
16
+ import { getDependenciesTool, handleGetDependencies } from "./tools/get-dependencies.js";
17
+ import { getStatsTool, handleGetStats } from "./tools/get-stats.js";
18
+ import { reindexTool, handleReindex } from "./tools/reindex.js";
19
+ import { analyzeChangeImpactTool, handleAnalyzeChangeImpact } from "./tools/analyze-impact.js";
20
+ import { getCallGraphTool, handleGetCallGraph } from "./tools/get-call-graph.js";
21
+ import { gotoDefinitionTool, handleGotoDefinition } from "./tools/goto-definition.js";
22
+ import { getTypeInfoTool, handleGetTypeInfo } from "./tools/get-type-info.js";
23
+ import { findImplementationsTool, handleFindImplementations } from "./tools/find-implementations.js";
24
+ import { semanticDiffTool, handleSemanticDiff } from "./tools/semantic-diff.js";
25
+ import { architectureDiagramTool, handleArchitectureDiagram } from "./tools/architecture-diagram.js";
26
+ import { naturalLanguageQueryTool, handleNaturalLanguageQuery } from "./tools/natural-language-query.js";
27
+ import { LspManager } from "./lsp/lsp-manager.js";
28
+ import { logger } from "./utils/logger.js";
29
+ import { z } from "zod";
30
+ const PROJECT_ROOT = process.env.PROJECT_ROOT || process.cwd();
31
+ const DB_PATH = process.env.DB_PATH || path.join(PROJECT_ROOT, ".codegraph", "index.db");
32
+ async function main() {
33
+ // Validate PROJECT_ROOT exists and is a directory
34
+ const { existsSync, statSync } = await import("fs");
35
+ if (!existsSync(PROJECT_ROOT)) {
36
+ logger.error(`PROJECT_ROOT does not exist: ${PROJECT_ROOT}`);
37
+ process.exit(1);
38
+ }
39
+ if (!statSync(PROJECT_ROOT).isDirectory()) {
40
+ logger.error(`PROJECT_ROOT is not a directory: ${PROJECT_ROOT}`);
41
+ process.exit(1);
42
+ }
43
+ logger.info(`Starting mcp-codebase-intelligence for ${PROJECT_ROOT}`);
44
+ // Ensure DB directory exists
45
+ const { mkdirSync } = await import("fs");
46
+ mkdirSync(path.dirname(DB_PATH), { recursive: true });
47
+ // Initialize database and graph
48
+ const db = initializeDatabase(DB_PATH);
49
+ const graph = new CodeGraph(db);
50
+ const watcher = new FileWatcher(PROJECT_ROOT, graph);
51
+ // Create MCP server
52
+ const server = new McpServer({
53
+ name: "codebase-intelligence",
54
+ version: "0.1.0",
55
+ description: `Semantic code intelligence for the project at: ${PROJECT_ROOT}. All tools in this server operate on this indexed project, not the user's current working directory.`,
56
+ });
57
+ // Register tools
58
+ server.tool(findSymbolTool.name, findSymbolTool.description, {
59
+ name: z.string().describe("Symbol name to search for (supports partial matching)"),
60
+ kind: z
61
+ .enum(["function", "class", "interface", "type", "variable", "method", "enum", "property"])
62
+ .optional()
63
+ .describe("Optional: filter by symbol kind"),
64
+ scope: z.string().optional().describe("Optional: limit search to files under this path prefix"),
65
+ limit: z.number().optional().describe("Maximum results to return (default: 20)"),
66
+ }, (args) => handleFindSymbol(graph, args));
67
+ server.tool(getReferencesTool.name, getReferencesTool.description, {
68
+ symbol_name: z.string().describe("Name of the symbol to find references for"),
69
+ depth: z
70
+ .number()
71
+ .optional()
72
+ .describe("How many levels of transitive references to follow (1 = direct only, default: 1, max: 10)"),
73
+ }, (args) => handleGetReferences(graph, args));
74
+ server.tool(getExportsTool.name, getExportsTool.description, {
75
+ file_path: z.string().describe("Absolute path to the file to inspect"),
76
+ }, (args) => handleGetExports(graph, args));
77
+ server.tool(getDependenciesTool.name, getDependenciesTool.description, {
78
+ file_path: z.string().describe("Absolute path to the file to inspect"),
79
+ depth: z
80
+ .number()
81
+ .optional()
82
+ .describe("How many levels of transitive dependencies to follow (default: 1, max: 5)"),
83
+ }, (args) => handleGetDependencies(graph, args));
84
+ server.tool(getStatsTool.name, getStatsTool.description, {}, () => handleGetStats(graph, PROJECT_ROOT));
85
+ server.tool(reindexTool.name, reindexTool.description, {}, async () => handleReindex(watcher));
86
+ server.tool(analyzeChangeImpactTool.name, analyzeChangeImpactTool.description, {
87
+ file_path: z.string().describe("Absolute path to the file being modified"),
88
+ line_start: z.number().describe("Starting line number of the change (inclusive)"),
89
+ line_end: z.number().describe("Ending line number of the change (inclusive)"),
90
+ depth: z
91
+ .number()
92
+ .optional()
93
+ .describe("How many levels of transitive dependents to follow (1 = direct only, default: 2, max: 10)"),
94
+ }, (args) => handleAnalyzeChangeImpact(graph, args));
95
+ server.tool(getCallGraphTool.name, getCallGraphTool.description, {
96
+ function_name: z.string().describe("Name of the function to get the call graph for"),
97
+ direction: z
98
+ .enum(["callers", "callees", "both"])
99
+ .optional()
100
+ .describe("Direction of the graph (default: both)"),
101
+ depth: z.number().optional().describe("How many levels to traverse (default: 2, max: 5)"),
102
+ format: z
103
+ .enum(["tree", "mermaid"])
104
+ .optional()
105
+ .describe("Output format (default: tree)"),
106
+ }, (args) => handleGetCallGraph(graph, args));
107
+ // Register LSP-powered tools
108
+ const lspManager = new LspManager(PROJECT_ROOT);
109
+ server.tool(gotoDefinitionTool.name, gotoDefinitionTool.description, {
110
+ file_path: z.string().describe("Absolute path to the file"),
111
+ line: z.number().describe("Line number (1-based)"),
112
+ character: z.number().describe("Column number (0-based)"),
113
+ }, (args) => handleGotoDefinition(lspManager, args));
114
+ server.tool(getTypeInfoTool.name, getTypeInfoTool.description, {
115
+ file_path: z.string().describe("Absolute path to the file"),
116
+ line: z.number().describe("Line number (1-based)"),
117
+ character: z.number().describe("Column number (0-based)"),
118
+ }, (args) => handleGetTypeInfo(lspManager, args));
119
+ server.tool(findImplementationsTool.name, findImplementationsTool.description, {
120
+ file_path: z.string().describe("Absolute path to the file containing the interface/abstract method"),
121
+ line: z.number().describe("Line number (1-based)"),
122
+ character: z.number().describe("Column number (0-based)"),
123
+ }, (args) => handleFindImplementations(lspManager, args));
124
+ server.tool(semanticDiffTool.name, semanticDiffTool.description, {
125
+ git_ref: z.string().optional().describe("Git ref to diff against (e.g. 'HEAD~1', 'HEAD~5', 'main', 'staged', 'unstaged'). Preferred over passing raw diff text."),
126
+ diff: z.string().optional().describe("Raw unified diff text. Only use if git_ref is not applicable."),
127
+ depth: z.number().optional().describe("Transitive dependency depth (default: 2, max: 5)"),
128
+ }, (args) => handleSemanticDiff(graph, args, PROJECT_ROOT));
129
+ server.tool(architectureDiagramTool.name, architectureDiagramTool.description, {
130
+ scope: z.string().optional().describe("Optional: limit diagram to files under this path prefix"),
131
+ max_depth: z.number().optional().describe("Maximum directory nesting depth for subgraph grouping (default: 2)"),
132
+ format: z.enum(["mermaid", "text"]).optional().describe("Output format (default: mermaid)"),
133
+ }, (args) => handleArchitectureDiagram(graph, args, PROJECT_ROOT));
134
+ server.tool(naturalLanguageQueryTool.name, naturalLanguageQueryTool.description, {
135
+ query: z.string().describe("Natural language question about the codebase"),
136
+ }, (args) => handleNaturalLanguageQuery(graph, args));
137
+ // Perform initial indexing (tree-sitter — fast)
138
+ await watcher.initialIndex();
139
+ watcher.startWatching();
140
+ // Start LSP servers in background (slow — don't block MCP)
141
+ lspManager.start().then(() => {
142
+ const servers = lspManager.getActiveServers();
143
+ if (servers.length > 0) {
144
+ logger.info(`LSP servers active: ${servers.join(", ")}`);
145
+ }
146
+ else {
147
+ logger.info("No LSP servers started (tools still work via tree-sitter)");
148
+ }
149
+ }).catch((err) => {
150
+ logger.warn("LSP startup failed (non-fatal)", err);
151
+ });
152
+ // Start MCP server on stdio
153
+ const transport = new StdioServerTransport();
154
+ await server.connect(transport);
155
+ logger.info("MCP server running on stdio");
156
+ // Graceful shutdown
157
+ const shutdown = async () => {
158
+ logger.info("Shutting down...");
159
+ await watcher.stop();
160
+ await lspManager.stop();
161
+ db.close();
162
+ process.exit(0);
163
+ };
164
+ process.on("SIGINT", shutdown);
165
+ process.on("SIGTERM", shutdown);
166
+ }
167
+ main().catch((err) => {
168
+ logger.error("Fatal error", err);
169
+ process.exit(1);
170
+ });
171
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,6DAA6D;AAC7D,OAAO,0BAA0B,CAAC;AAClC,OAAO,sBAAsB,CAAC;AAC9B,OAAO,wBAAwB,CAAC;AAChC,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACrG,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AACzG,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAEzF,KAAK,UAAU,IAAI;IACjB,kDAAkD;IAClD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,oCAAoC,YAAY,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,0CAA0C,YAAY,EAAE,CAAC,CAAC;IAEtE,6BAA6B;IAC7B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtD,gCAAgC;IAChC,MAAM,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAErD,oBAAoB;IACpB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,kDAAkD,YAAY,uGAAuG;KACnL,CAAC,CAAC;IAEH,iBAAiB;IACjB,MAAM,CAAC,IAAI,CACT,cAAc,CAAC,IAAI,EACnB,cAAc,CAAC,WAAW,EAC1B;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;QAClF,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;aAC1F,QAAQ,EAAE;aACV,QAAQ,CAAC,iCAAiC,CAAC;QAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;QAC/F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACjF,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CACxC,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,CAAC,IAAI,EACtB,iBAAiB,CAAC,WAAW,EAC7B;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QAC7E,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,2FAA2F,CAAC;KACzG,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAC3C,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,CAAC,IAAI,EACnB,cAAc,CAAC,WAAW,EAC1B;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACvE,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CACxC,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,IAAI,EACxB,mBAAmB,CAAC,WAAW,EAC/B;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QACtE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,2EAA2E,CAAC;KACzF,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAC7C,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,WAAW,EACxB,EAAE,EACF,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAC1C,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,WAAW,EACvB,EAAE,EACF,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CACnC,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,CAAC,IAAI,EAC5B,uBAAuB,CAAC,WAAW,EACnC;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QAC1E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACjF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QAC7E,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,2FAA2F,CAAC;KACzG,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,CACjD,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,CAAC,IAAI,EACrB,gBAAgB,CAAC,WAAW,EAC5B;QACE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACpF,SAAS,EAAE,CAAC;aACT,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;aACpC,QAAQ,EAAE;aACV,QAAQ,CAAC,wCAAwC,CAAC;QACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;QACzF,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;aACzB,QAAQ,EAAE;aACV,QAAQ,CAAC,+BAA+B,CAAC;KAC7C,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAC1C,CAAC;IAEF,6BAA6B;IAC7B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;IAEhD,MAAM,CAAC,IAAI,CACT,kBAAkB,CAAC,IAAI,EACvB,kBAAkB,CAAC,WAAW,EAC9B;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KAC1D,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,CACjD,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,CAAC,IAAI,EACpB,eAAe,CAAC,WAAW,EAC3B;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KAC1D,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAC9C,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,CAAC,IAAI,EAC5B,uBAAuB,CAAC,WAAW,EACnC;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;QACpG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KAC1D,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,UAAU,EAAE,IAAI,CAAC,CACtD,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,CAAC,IAAI,EACrB,gBAAgB,CAAC,WAAW,EAC5B;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wHAAwH,CAAC;QACjK,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;QACrG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;KAC1F,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CACxD,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,CAAC,IAAI,EAC5B,uBAAuB,CAAC,WAAW,EACnC;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;QAChG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;QAC/G,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KAC5F,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAC/D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,CAAC,IAAI,EAC7B,wBAAwB,CAAC,WAAW,EACpC;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;KAC3E,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,CAClD,CAAC;IAEF,gDAAgD;IAChD,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;IAC7B,OAAO,CAAC,aAAa,EAAE,CAAC;IAExB,2DAA2D;IAC3D,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACf,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,4BAA4B;IAC5B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAE3C,oBAAoB;IACpB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { CodeGraph } from "../graph/code-graph.js";
2
+ export declare class FileWatcher {
3
+ private rootPath;
4
+ private graph;
5
+ private watcher;
6
+ private indexing;
7
+ constructor(rootPath: string, graph: CodeGraph);
8
+ initialIndex(): Promise<void>;
9
+ startWatching(): void;
10
+ private handleFileChange;
11
+ private handleFileRemove;
12
+ stop(): Promise<void>;
13
+ }
@@ -0,0 +1,106 @@
1
+ import { watch } from "chokidar";
2
+ import { glob } from "glob";
3
+ import path from "path";
4
+ import { parseFile } from "./tree-sitter-indexer.js";
5
+ import { getAllExtensions } from "./language-plugin.js";
6
+ import { logger } from "../utils/logger.js";
7
+ const IGNORE_PATTERNS = [
8
+ "**/node_modules/**", "**/dist/**", "**/build/**", "**/.git/**", "**/coverage/**",
9
+ "**/__pycache__/**", "**/venv/**", "**/.venv/**",
10
+ "**/target/**", "**/out/**", "**/.gradle/**", "**/.mvn/**",
11
+ ];
12
+ function isTargetFile(filePath) {
13
+ const extensions = getAllExtensions();
14
+ return extensions.some((ext) => filePath.endsWith(ext));
15
+ }
16
+ export class FileWatcher {
17
+ rootPath;
18
+ graph;
19
+ watcher = null;
20
+ indexing = false;
21
+ constructor(rootPath, graph) {
22
+ this.rootPath = rootPath;
23
+ this.graph = graph;
24
+ }
25
+ async initialIndex() {
26
+ if (this.indexing)
27
+ return;
28
+ this.indexing = true;
29
+ logger.info(`Starting initial index of ${this.rootPath}`);
30
+ const startTime = Date.now();
31
+ try {
32
+ const extensions = getAllExtensions();
33
+ const patterns = extensions.map((ext) => `**/*${ext}`);
34
+ const files = [];
35
+ for (const pattern of patterns) {
36
+ const matched = await glob(pattern, {
37
+ cwd: this.rootPath,
38
+ absolute: true,
39
+ ignore: IGNORE_PATTERNS,
40
+ });
41
+ files.push(...matched);
42
+ }
43
+ logger.info(`Found ${files.length} files to index`);
44
+ // Parse all files first (CPU-bound, tree-sitter)
45
+ const parseStart = Date.now();
46
+ const parsed = [];
47
+ for (const file of files) {
48
+ const result = parseFile(file);
49
+ if (result) {
50
+ parsed.push({ filePath: file, content: result.content, symbols: result.symbols, references: result.references, imports: result.imports });
51
+ }
52
+ }
53
+ const parseElapsed = Date.now() - parseStart;
54
+ // Batch insert into DB (single transaction — much faster for large repos)
55
+ const dbStart = Date.now();
56
+ const { indexed, skipped } = this.graph.indexFileBatch(parsed);
57
+ const dbElapsed = Date.now() - dbStart;
58
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(2);
59
+ const stats = this.graph.getStats();
60
+ logger.info(`Initial index complete in ${elapsed}s (parse: ${parseElapsed}ms, db: ${dbElapsed}ms): ` +
61
+ `${stats.files} files, ${stats.symbols} symbols, ${stats.references} references` +
62
+ (skipped > 0 ? ` (${skipped} unchanged)` : ""));
63
+ }
64
+ finally {
65
+ this.indexing = false;
66
+ }
67
+ }
68
+ startWatching() {
69
+ const extensions = getAllExtensions();
70
+ const watchPatterns = extensions.map((ext) => path.join(this.rootPath, "**", `*${ext}`));
71
+ this.watcher = watch(watchPatterns, {
72
+ ignored: IGNORE_PATTERNS,
73
+ persistent: true,
74
+ ignoreInitial: true,
75
+ awaitWriteFinish: { stabilityThreshold: 300, pollInterval: 100 },
76
+ });
77
+ this.watcher
78
+ .on("add", (filePath) => this.handleFileChange(filePath))
79
+ .on("change", (filePath) => this.handleFileChange(filePath))
80
+ .on("unlink", (filePath) => this.handleFileRemove(filePath));
81
+ logger.info(`Watching for file changes in ${this.rootPath}`);
82
+ }
83
+ handleFileChange(filePath) {
84
+ if (!isTargetFile(filePath))
85
+ return;
86
+ logger.debug(`File changed: ${filePath}`);
87
+ const result = parseFile(filePath);
88
+ if (result) {
89
+ this.graph.indexFile(filePath, result.content, result.symbols, result.references, result.imports);
90
+ }
91
+ }
92
+ handleFileRemove(filePath) {
93
+ if (!isTargetFile(filePath))
94
+ return;
95
+ logger.debug(`File removed: ${filePath}`);
96
+ this.graph.removeFile(filePath);
97
+ }
98
+ async stop() {
99
+ if (this.watcher) {
100
+ await this.watcher.close();
101
+ this.watcher = null;
102
+ logger.info("File watcher stopped");
103
+ }
104
+ }
105
+ }
106
+ //# sourceMappingURL=file-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-watcher.js","sourceRoot":"","sources":["../../src/indexer/file-watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type LanguagePlugin } from "./language-plugin.js";
2
+ export declare const goPlugin: LanguagePlugin;
@@ -0,0 +1,246 @@
1
+ import Parser from "tree-sitter";
2
+ import Go from "tree-sitter-go";
3
+ import { registerLanguage } from "./language-plugin.js";
4
+ import { bareName } from "./tree-sitter-indexer.js";
5
+ const goParser = new Parser();
6
+ goParser.setLanguage(Go);
7
+ function extractGoFuncSignature(node) {
8
+ const name = node.childForFieldName("name")?.text ?? "";
9
+ const params = node.childForFieldName("parameters")?.text ?? "()";
10
+ const result = node.childForFieldName("result");
11
+ const retText = result ? ` ${result.text}` : "";
12
+ return `${name}${params}${retText}`;
13
+ }
14
+ function isExportedGo(name) {
15
+ // Go exports are capitalized identifiers
16
+ return name.length > 0 && name[0] === name[0].toUpperCase() && name[0] !== name[0].toLowerCase();
17
+ }
18
+ function walkGo(node, filePath, symbols, references, imports, parentIndex) {
19
+ switch (node.type) {
20
+ case "function_declaration": {
21
+ const nameNode = node.childForFieldName("name");
22
+ if (nameNode) {
23
+ const sym = {
24
+ name: nameNode.text,
25
+ kind: "function",
26
+ filePath,
27
+ lineStart: node.startPosition.row + 1,
28
+ lineEnd: node.endPosition.row + 1,
29
+ colStart: node.startPosition.column,
30
+ colEnd: node.endPosition.column,
31
+ parentSymbolId: parentIndex,
32
+ isExported: isExportedGo(nameNode.text),
33
+ signature: extractGoFuncSignature(node),
34
+ };
35
+ const idx = symbols.length;
36
+ symbols.push(sym);
37
+ walkGoChildren(node, filePath, symbols, references, imports, idx);
38
+ return;
39
+ }
40
+ break;
41
+ }
42
+ case "method_declaration": {
43
+ const nameNode = node.childForFieldName("name");
44
+ const receiver = node.childForFieldName("receiver");
45
+ if (nameNode) {
46
+ // Extract receiver type name for context
47
+ let receiverType = "";
48
+ if (receiver) {
49
+ // receiver is like (t *Type) or (t Type)
50
+ for (let i = 0; i < receiver.namedChildCount; i++) {
51
+ const param = receiver.namedChild(i);
52
+ const typeNode = param?.childForFieldName("type");
53
+ if (typeNode) {
54
+ receiverType = typeNode.text.replace("*", "");
55
+ break;
56
+ }
57
+ }
58
+ }
59
+ const sig = extractGoFuncSignature(node);
60
+ const sym = {
61
+ name: nameNode.text,
62
+ kind: "method",
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
+ parentSymbolId: parentIndex,
69
+ isExported: isExportedGo(nameNode.text),
70
+ signature: receiverType ? `(${receiverType}) ${sig}` : sig,
71
+ };
72
+ const idx = symbols.length;
73
+ symbols.push(sym);
74
+ walkGoChildren(node, filePath, symbols, references, imports, idx);
75
+ return;
76
+ }
77
+ break;
78
+ }
79
+ case "type_declaration": {
80
+ // type Foo struct/interface/...
81
+ for (let i = 0; i < node.namedChildCount; i++) {
82
+ const spec = node.namedChild(i);
83
+ if (spec?.type === "type_spec") {
84
+ const nameNode = spec.childForFieldName("name");
85
+ const typeNode = spec.childForFieldName("type");
86
+ if (nameNode) {
87
+ const isInterface = typeNode?.type === "interface_type";
88
+ const isStruct = typeNode?.type === "struct_type";
89
+ const kind = isInterface ? "interface" : isStruct ? "class" : "type";
90
+ const sym = {
91
+ name: nameNode.text,
92
+ kind,
93
+ filePath,
94
+ lineStart: spec.startPosition.row + 1,
95
+ lineEnd: spec.endPosition.row + 1,
96
+ colStart: spec.startPosition.column,
97
+ colEnd: spec.endPosition.column,
98
+ parentSymbolId: parentIndex,
99
+ isExported: isExportedGo(nameNode.text),
100
+ signature: `type ${nameNode.text} ${typeNode?.type === "interface_type" ? "interface" : typeNode?.type === "struct_type" ? "struct" : typeNode?.text ?? ""}`,
101
+ };
102
+ const idx = symbols.length;
103
+ symbols.push(sym);
104
+ // Walk struct/interface body for embedded types
105
+ if (typeNode) {
106
+ walkGoChildren(typeNode, filePath, symbols, references, imports, idx);
107
+ }
108
+ }
109
+ }
110
+ }
111
+ return;
112
+ }
113
+ case "const_declaration":
114
+ case "var_declaration": {
115
+ for (let i = 0; i < node.namedChildCount; i++) {
116
+ const spec = node.namedChild(i);
117
+ if (spec?.type === "const_spec" || spec?.type === "var_spec") {
118
+ const nameNode = spec.childForFieldName("name");
119
+ if (nameNode) {
120
+ symbols.push({
121
+ name: nameNode.text,
122
+ kind: "variable",
123
+ filePath,
124
+ lineStart: spec.startPosition.row + 1,
125
+ lineEnd: spec.endPosition.row + 1,
126
+ colStart: spec.startPosition.column,
127
+ colEnd: spec.endPosition.column,
128
+ parentSymbolId: parentIndex,
129
+ isExported: isExportedGo(nameNode.text),
130
+ });
131
+ }
132
+ }
133
+ }
134
+ return;
135
+ }
136
+ case "call_expression": {
137
+ const func = node.childForFieldName("function");
138
+ if (func && parentIndex !== undefined) {
139
+ const name = func.text;
140
+ references.push({
141
+ fromSymbolId: parentIndex,
142
+ toSymbolName: name,
143
+ toSymbolBareName: bareName(name),
144
+ kind: "call",
145
+ line: node.startPosition.row + 1,
146
+ col: node.startPosition.column,
147
+ });
148
+ }
149
+ break;
150
+ }
151
+ case "composite_literal": {
152
+ // Struct instantiation: Foo{...}
153
+ const typeNode = node.childForFieldName("type");
154
+ if (typeNode && parentIndex !== undefined) {
155
+ references.push({
156
+ fromSymbolId: parentIndex,
157
+ toSymbolName: typeNode.text,
158
+ toSymbolBareName: bareName(typeNode.text),
159
+ kind: "instantiation",
160
+ line: node.startPosition.row + 1,
161
+ col: node.startPosition.column,
162
+ });
163
+ }
164
+ break;
165
+ }
166
+ case "import_declaration": {
167
+ for (let i = 0; i < node.namedChildCount; i++) {
168
+ const child = node.namedChild(i);
169
+ if (child?.type === "import_spec") {
170
+ const pathNode = child.childForFieldName("path");
171
+ const nameNode = child.childForFieldName("name");
172
+ if (pathNode) {
173
+ const importPath = pathNode.text.replace(/"/g, "");
174
+ const localName = nameNode?.text ?? bareName(importPath);
175
+ imports.push({
176
+ sourcePath: importPath,
177
+ importedName: importPath,
178
+ localName: localName === "." ? "*" : localName,
179
+ isDefault: false,
180
+ isNamespace: nameNode?.text !== ".",
181
+ line: child.startPosition.row + 1,
182
+ });
183
+ }
184
+ }
185
+ else if (child?.type === "import_spec_list") {
186
+ for (let j = 0; j < child.namedChildCount; j++) {
187
+ const spec = child.namedChild(j);
188
+ if (spec?.type === "import_spec") {
189
+ const pathNode = spec.childForFieldName("path");
190
+ const nameNode = spec.childForFieldName("name");
191
+ if (pathNode) {
192
+ const importPath = pathNode.text.replace(/"/g, "");
193
+ const localName = nameNode?.text ?? bareName(importPath);
194
+ imports.push({
195
+ sourcePath: importPath,
196
+ importedName: importPath,
197
+ localName: localName === "." ? "*" : localName,
198
+ isDefault: false,
199
+ isNamespace: nameNode?.text !== ".",
200
+ line: spec.startPosition.row + 1,
201
+ });
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }
207
+ return;
208
+ }
209
+ case "package_clause": {
210
+ // Track the package name as a symbol
211
+ const nameNode = node.childForFieldName("name");
212
+ if (nameNode) {
213
+ symbols.push({
214
+ name: nameNode.text,
215
+ kind: "variable",
216
+ filePath,
217
+ lineStart: node.startPosition.row + 1,
218
+ lineEnd: node.endPosition.row + 1,
219
+ colStart: node.startPosition.column,
220
+ colEnd: node.endPosition.column,
221
+ isExported: true,
222
+ signature: `package ${nameNode.text}`,
223
+ });
224
+ }
225
+ return;
226
+ }
227
+ }
228
+ // Default: walk children
229
+ walkGoChildren(node, filePath, symbols, references, imports, parentIndex);
230
+ }
231
+ function walkGoChildren(node, filePath, symbols, references, imports, parentIndex) {
232
+ for (let i = 0; i < node.namedChildCount; i++) {
233
+ const child = node.namedChild(i);
234
+ if (child) {
235
+ walkGo(child, filePath, symbols, references, imports, parentIndex);
236
+ }
237
+ }
238
+ }
239
+ export const goPlugin = {
240
+ id: "go",
241
+ extensions: [".go"],
242
+ getParser: () => goParser,
243
+ walk: walkGo,
244
+ };
245
+ registerLanguage(goPlugin);
246
+ //# sourceMappingURL=lang-go.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lang-go.js","sourceRoot":"","sources":["../../src/indexer/lang-go.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type LanguagePlugin } from "./language-plugin.js";
2
+ export declare const javaPlugin: LanguagePlugin;