codesift-mcp 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 (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +241 -0
  3. package/dist/cli/args.d.ts +13 -0
  4. package/dist/cli/args.d.ts.map +1 -0
  5. package/dist/cli/args.js +79 -0
  6. package/dist/cli/args.js.map +1 -0
  7. package/dist/cli/commands.d.ts +4 -0
  8. package/dist/cli/commands.d.ts.map +1 -0
  9. package/dist/cli/commands.js +336 -0
  10. package/dist/cli/commands.js.map +1 -0
  11. package/dist/cli/help.d.ts +3 -0
  12. package/dist/cli/help.d.ts.map +1 -0
  13. package/dist/cli/help.js +271 -0
  14. package/dist/cli/help.js.map +1 -0
  15. package/dist/cli.d.ts +3 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +80 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/config.d.ts +23 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +49 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/parser/extractors/go.d.ts +4 -0
  24. package/dist/parser/extractors/go.d.ts.map +1 -0
  25. package/dist/parser/extractors/go.js +185 -0
  26. package/dist/parser/extractors/go.js.map +1 -0
  27. package/dist/parser/extractors/javascript.d.ts +9 -0
  28. package/dist/parser/extractors/javascript.d.ts.map +1 -0
  29. package/dist/parser/extractors/javascript.js +10 -0
  30. package/dist/parser/extractors/javascript.js.map +1 -0
  31. package/dist/parser/extractors/markdown.d.ts +15 -0
  32. package/dist/parser/extractors/markdown.d.ts.map +1 -0
  33. package/dist/parser/extractors/markdown.js +217 -0
  34. package/dist/parser/extractors/markdown.js.map +1 -0
  35. package/dist/parser/extractors/prisma.d.ts +17 -0
  36. package/dist/parser/extractors/prisma.d.ts.map +1 -0
  37. package/dist/parser/extractors/prisma.js +121 -0
  38. package/dist/parser/extractors/prisma.js.map +1 -0
  39. package/dist/parser/extractors/python.d.ts +4 -0
  40. package/dist/parser/extractors/python.d.ts.map +1 -0
  41. package/dist/parser/extractors/python.js +203 -0
  42. package/dist/parser/extractors/python.js.map +1 -0
  43. package/dist/parser/extractors/rust.d.ts +4 -0
  44. package/dist/parser/extractors/rust.d.ts.map +1 -0
  45. package/dist/parser/extractors/rust.js +178 -0
  46. package/dist/parser/extractors/rust.js.map +1 -0
  47. package/dist/parser/extractors/typescript.d.ts +4 -0
  48. package/dist/parser/extractors/typescript.d.ts.map +1 -0
  49. package/dist/parser/extractors/typescript.js +296 -0
  50. package/dist/parser/extractors/typescript.js.map +1 -0
  51. package/dist/parser/languages/tree-sitter-css.wasm +0 -0
  52. package/dist/parser/languages/tree-sitter-go.wasm +0 -0
  53. package/dist/parser/languages/tree-sitter-java.wasm +0 -0
  54. package/dist/parser/languages/tree-sitter-javascript.wasm +0 -0
  55. package/dist/parser/languages/tree-sitter-json.wasm +0 -0
  56. package/dist/parser/languages/tree-sitter-php.wasm +0 -0
  57. package/dist/parser/languages/tree-sitter-python.wasm +0 -0
  58. package/dist/parser/languages/tree-sitter-ruby.wasm +0 -0
  59. package/dist/parser/languages/tree-sitter-rust.wasm +0 -0
  60. package/dist/parser/languages/tree-sitter-tsx.wasm +0 -0
  61. package/dist/parser/languages/tree-sitter-typescript.wasm +0 -0
  62. package/dist/parser/parser-manager.d.ts +6 -0
  63. package/dist/parser/parser-manager.d.ts.map +1 -0
  64. package/dist/parser/parser-manager.js +60 -0
  65. package/dist/parser/parser-manager.js.map +1 -0
  66. package/dist/parser/symbol-extractor.d.ts +22 -0
  67. package/dist/parser/symbol-extractor.d.ts.map +1 -0
  68. package/dist/parser/symbol-extractor.js +115 -0
  69. package/dist/parser/symbol-extractor.js.map +1 -0
  70. package/dist/retrieval/codebase-retrieval.d.ts +27 -0
  71. package/dist/retrieval/codebase-retrieval.d.ts.map +1 -0
  72. package/dist/retrieval/codebase-retrieval.js +472 -0
  73. package/dist/retrieval/codebase-retrieval.js.map +1 -0
  74. package/dist/search/bm25.d.ts +22 -0
  75. package/dist/search/bm25.d.ts.map +1 -0
  76. package/dist/search/bm25.js +179 -0
  77. package/dist/search/bm25.js.map +1 -0
  78. package/dist/search/chunker.d.ts +9 -0
  79. package/dist/search/chunker.d.ts.map +1 -0
  80. package/dist/search/chunker.js +91 -0
  81. package/dist/search/chunker.js.map +1 -0
  82. package/dist/search/hybrid.d.ts +16 -0
  83. package/dist/search/hybrid.d.ts.map +1 -0
  84. package/dist/search/hybrid.js +51 -0
  85. package/dist/search/hybrid.js.map +1 -0
  86. package/dist/search/semantic.d.ts +44 -0
  87. package/dist/search/semantic.d.ts.map +1 -0
  88. package/dist/search/semantic.js +194 -0
  89. package/dist/search/semantic.js.map +1 -0
  90. package/dist/server.d.ts +2 -0
  91. package/dist/server.d.ts.map +1 -0
  92. package/dist/server.js +285 -0
  93. package/dist/server.js.map +1 -0
  94. package/dist/storage/chunk-store.d.ts +32 -0
  95. package/dist/storage/chunk-store.d.ts.map +1 -0
  96. package/dist/storage/chunk-store.js +144 -0
  97. package/dist/storage/chunk-store.js.map +1 -0
  98. package/dist/storage/embedding-store.d.ts +41 -0
  99. package/dist/storage/embedding-store.d.ts.map +1 -0
  100. package/dist/storage/embedding-store.js +149 -0
  101. package/dist/storage/embedding-store.js.map +1 -0
  102. package/dist/storage/index-store.d.ts +23 -0
  103. package/dist/storage/index-store.d.ts.map +1 -0
  104. package/dist/storage/index-store.js +95 -0
  105. package/dist/storage/index-store.js.map +1 -0
  106. package/dist/storage/registry.d.ts +35 -0
  107. package/dist/storage/registry.d.ts.map +1 -0
  108. package/dist/storage/registry.js +99 -0
  109. package/dist/storage/registry.js.map +1 -0
  110. package/dist/storage/usage-stats.d.ts +32 -0
  111. package/dist/storage/usage-stats.d.ts.map +1 -0
  112. package/dist/storage/usage-stats.js +180 -0
  113. package/dist/storage/usage-stats.js.map +1 -0
  114. package/dist/storage/usage-tracker.d.ts +35 -0
  115. package/dist/storage/usage-tracker.d.ts.map +1 -0
  116. package/dist/storage/usage-tracker.js +245 -0
  117. package/dist/storage/usage-tracker.js.map +1 -0
  118. package/dist/storage/watcher.d.ts +12 -0
  119. package/dist/storage/watcher.d.ts.map +1 -0
  120. package/dist/storage/watcher.js +66 -0
  121. package/dist/storage/watcher.js.map +1 -0
  122. package/dist/tools/context-tools.d.ts +31 -0
  123. package/dist/tools/context-tools.d.ts.map +1 -0
  124. package/dist/tools/context-tools.js +219 -0
  125. package/dist/tools/context-tools.js.map +1 -0
  126. package/dist/tools/diff-tools.d.ts +22 -0
  127. package/dist/tools/diff-tools.d.ts.map +1 -0
  128. package/dist/tools/diff-tools.js +165 -0
  129. package/dist/tools/diff-tools.js.map +1 -0
  130. package/dist/tools/generate-tools.d.ts +11 -0
  131. package/dist/tools/generate-tools.d.ts.map +1 -0
  132. package/dist/tools/generate-tools.js +135 -0
  133. package/dist/tools/generate-tools.js.map +1 -0
  134. package/dist/tools/graph-tools.d.ts +60 -0
  135. package/dist/tools/graph-tools.d.ts.map +1 -0
  136. package/dist/tools/graph-tools.js +313 -0
  137. package/dist/tools/graph-tools.js.map +1 -0
  138. package/dist/tools/index-tools.d.ts +39 -0
  139. package/dist/tools/index-tools.d.ts.map +1 -0
  140. package/dist/tools/index-tools.js +451 -0
  141. package/dist/tools/index-tools.js.map +1 -0
  142. package/dist/tools/outline-tools.d.ts +59 -0
  143. package/dist/tools/outline-tools.d.ts.map +1 -0
  144. package/dist/tools/outline-tools.js +342 -0
  145. package/dist/tools/outline-tools.js.map +1 -0
  146. package/dist/tools/search-tools.d.ts +29 -0
  147. package/dist/tools/search-tools.d.ts.map +1 -0
  148. package/dist/tools/search-tools.js +309 -0
  149. package/dist/tools/search-tools.js.map +1 -0
  150. package/dist/tools/symbol-tools.d.ts +24 -0
  151. package/dist/tools/symbol-tools.d.ts.map +1 -0
  152. package/dist/tools/symbol-tools.js +172 -0
  153. package/dist/tools/symbol-tools.js.map +1 -0
  154. package/dist/types.d.ts +91 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +3 -0
  157. package/dist/types.js.map +1 -0
  158. package/dist/utils/git-validation.d.ts +11 -0
  159. package/dist/utils/git-validation.d.ts.map +1 -0
  160. package/dist/utils/git-validation.js +19 -0
  161. package/dist/utils/git-validation.js.map +1 -0
  162. package/dist/utils/test-file.d.ts +11 -0
  163. package/dist/utils/test-file.d.ts.map +1 -0
  164. package/dist/utils/test-file.js +27 -0
  165. package/dist/utils/test-file.js.map +1 -0
  166. package/package.json +62 -0
  167. package/src/parser/languages/tree-sitter-css.wasm +0 -0
  168. package/src/parser/languages/tree-sitter-go.wasm +0 -0
  169. package/src/parser/languages/tree-sitter-java.wasm +0 -0
  170. package/src/parser/languages/tree-sitter-javascript.wasm +0 -0
  171. package/src/parser/languages/tree-sitter-json.wasm +0 -0
  172. package/src/parser/languages/tree-sitter-php.wasm +0 -0
  173. package/src/parser/languages/tree-sitter-python.wasm +0 -0
  174. package/src/parser/languages/tree-sitter-ruby.wasm +0 -0
  175. package/src/parser/languages/tree-sitter-rust.wasm +0 -0
  176. package/src/parser/languages/tree-sitter-tsx.wasm +0 -0
  177. package/src/parser/languages/tree-sitter-typescript.wasm +0 -0
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Prisma schema extractor — regex-based parser (no tree-sitter grammar).
3
+ *
4
+ * Extracts:
5
+ * - `enum Name { ... }` → kind: "enum"
6
+ * - `model Name { ... }` → kind: "class"
7
+ * - `type Name { ... }` → kind: "type"
8
+ *
9
+ * Prisma schemas define the data model and are valuable for understanding
10
+ * entity structures, enums, and relationships.
11
+ */
12
+ import type { CodeSymbol } from "../../types.js";
13
+ /**
14
+ * Extract symbols from a Prisma schema file without tree-sitter.
15
+ */
16
+ export declare function extractPrismaSymbols(source: string, filePath: string, repo: string): CodeSymbol[];
17
+ //# sourceMappingURL=prisma.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/prisma.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAWjD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,UAAU,EAAE,CAoFd"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Prisma schema extractor — regex-based parser (no tree-sitter grammar).
3
+ *
4
+ * Extracts:
5
+ * - `enum Name { ... }` → kind: "enum"
6
+ * - `model Name { ... }` → kind: "class"
7
+ * - `type Name { ... }` → kind: "type"
8
+ *
9
+ * Prisma schemas define the data model and are valuable for understanding
10
+ * entity structures, enums, and relationships.
11
+ */
12
+ import { tokenizeIdentifier, makeSymbolId } from "../symbol-extractor.js";
13
+ const MAX_SOURCE_LENGTH = 5000;
14
+ /**
15
+ * Matches top-level Prisma blocks: enum, model, type.
16
+ * Captures: keyword (enum/model/type) and name.
17
+ */
18
+ const BLOCK_START_RE = /^(enum|model|type)\s+(\w+)\s*\{/;
19
+ /**
20
+ * Extract symbols from a Prisma schema file without tree-sitter.
21
+ */
22
+ export function extractPrismaSymbols(source, filePath, repo) {
23
+ const symbols = [];
24
+ const lines = source.split("\n");
25
+ let i = 0;
26
+ while (i < lines.length) {
27
+ const line = lines[i];
28
+ const match = BLOCK_START_RE.exec(line.trim());
29
+ if (match) {
30
+ const keyword = match[1];
31
+ const name = match[2];
32
+ const startLine = i + 1; // 1-based
33
+ // Find matching closing brace, tracking nesting
34
+ let braceDepth = 1;
35
+ let endLineIdx = i;
36
+ for (let j = i + 1; j < lines.length; j++) {
37
+ const scanLine = lines[j];
38
+ for (const ch of scanLine) {
39
+ if (ch === "{")
40
+ braceDepth++;
41
+ if (ch === "}")
42
+ braceDepth--;
43
+ }
44
+ if (braceDepth === 0) {
45
+ endLineIdx = j;
46
+ break;
47
+ }
48
+ }
49
+ // If braces never balanced, use last line
50
+ if (braceDepth !== 0) {
51
+ endLineIdx = lines.length - 1;
52
+ }
53
+ const endLine = endLineIdx + 1; // 1-based
54
+ // Extract source text for the block
55
+ const blockLines = lines.slice(i, endLineIdx + 1);
56
+ const blockSource = blockLines.join("\n");
57
+ // Map Prisma keyword to symbol kind
58
+ let kind;
59
+ switch (keyword) {
60
+ case "enum":
61
+ kind = "enum";
62
+ break;
63
+ case "model":
64
+ kind = "class";
65
+ break;
66
+ case "type":
67
+ kind = "type";
68
+ break;
69
+ default:
70
+ kind = "type";
71
+ }
72
+ // Build docstring from comments above the block
73
+ const docstring = extractDocstring(lines, i);
74
+ const sym = {
75
+ id: makeSymbolId(repo, filePath, name, startLine),
76
+ repo,
77
+ name,
78
+ kind,
79
+ file: filePath,
80
+ start_line: startLine,
81
+ end_line: endLine,
82
+ signature: `${keyword} ${name}`,
83
+ source: blockSource.length > MAX_SOURCE_LENGTH
84
+ ? blockSource.slice(0, MAX_SOURCE_LENGTH) + "..."
85
+ : blockSource,
86
+ tokens: tokenizeIdentifier(name),
87
+ };
88
+ if (docstring)
89
+ sym.docstring = docstring;
90
+ symbols.push(sym);
91
+ // Jump past the block
92
+ i = endLineIdx + 1;
93
+ }
94
+ else {
95
+ i++;
96
+ }
97
+ }
98
+ return symbols;
99
+ }
100
+ /**
101
+ * Extract comment lines immediately above a block as a docstring.
102
+ */
103
+ function extractDocstring(lines, blockLineIdx) {
104
+ const commentLines = [];
105
+ for (let j = blockLineIdx - 1; j >= 0; j--) {
106
+ const trimmed = lines[j].trim();
107
+ if (trimmed.startsWith("//")) {
108
+ commentLines.unshift(trimmed);
109
+ }
110
+ else if (trimmed === "") {
111
+ // Allow blank lines within comment block
112
+ if (commentLines.length > 0)
113
+ break;
114
+ }
115
+ else {
116
+ break;
117
+ }
118
+ }
119
+ return commentLines.length > 0 ? commentLines.join("\n") : undefined;
120
+ }
121
+ //# sourceMappingURL=prisma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../../src/parser/extractors/prisma.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import Parser from "web-tree-sitter";
2
+ import type { CodeSymbol } from "../../types.js";
3
+ export declare function extractPythonSymbols(tree: Parser.Tree, filePath: string, source: string, repo: string): CodeSymbol[];
4
+ //# sourceMappingURL=python.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/python.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAC;AA8I7D,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,UAAU,EAAE,CAiGd"}
@@ -0,0 +1,203 @@
1
+ import { tokenizeIdentifier, makeSymbolId } from "../symbol-extractor.js";
2
+ const MAX_SOURCE_LENGTH = 5000;
3
+ // --- Helpers ---
4
+ function getNodeName(node) {
5
+ const nameNode = node.childForFieldName("name");
6
+ return nameNode?.text ?? null;
7
+ }
8
+ /**
9
+ * Python docstrings are the first expression_statement in the body
10
+ * whose child is a string node (triple-quoted or single-quoted).
11
+ */
12
+ function getDocstring(node) {
13
+ const body = node.childForFieldName("body");
14
+ if (!body)
15
+ return undefined;
16
+ const firstStatement = body.namedChildren[0];
17
+ if (!firstStatement || firstStatement.type !== "expression_statement") {
18
+ return undefined;
19
+ }
20
+ const expr = firstStatement.namedChildren[0];
21
+ if (!expr || expr.type !== "string")
22
+ return undefined;
23
+ return expr.text;
24
+ }
25
+ /**
26
+ * Extract parameter list and optional return type annotation.
27
+ * e.g. "(self, name: str, age: int = 0) -> bool"
28
+ */
29
+ function getSignature(node, source) {
30
+ const params = node.childForFieldName("parameters");
31
+ if (!params)
32
+ return undefined;
33
+ let sig = source.slice(params.startIndex, params.endIndex);
34
+ const returnType = node.childForFieldName("return_type");
35
+ if (returnType) {
36
+ sig += " -> " + source.slice(returnType.startIndex, returnType.endIndex);
37
+ }
38
+ return sig;
39
+ }
40
+ function extractNodeSource(node, source) {
41
+ const text = source.slice(node.startIndex, node.endIndex);
42
+ if (text.length > MAX_SOURCE_LENGTH) {
43
+ return text.slice(0, MAX_SOURCE_LENGTH) + "...";
44
+ }
45
+ return text;
46
+ }
47
+ function makeSymbol(node, name, kind, filePath, source, repo, parentId) {
48
+ const startLine = node.startPosition.row + 1;
49
+ const endLine = node.endPosition.row + 1;
50
+ const docstring = getDocstring(node);
51
+ const sym = {
52
+ id: makeSymbolId(repo, filePath, name, startLine),
53
+ repo,
54
+ name,
55
+ kind,
56
+ file: filePath,
57
+ start_line: startLine,
58
+ end_line: endLine,
59
+ source: extractNodeSource(node, source),
60
+ tokens: tokenizeIdentifier(name),
61
+ };
62
+ if (docstring)
63
+ sym.docstring = docstring;
64
+ if (parentId)
65
+ sym.parent = parentId;
66
+ return sym;
67
+ }
68
+ /**
69
+ * Check if a class inherits from unittest.TestCase.
70
+ */
71
+ function isTestCaseClass(node) {
72
+ const superclasses = node.childForFieldName("superclasses");
73
+ if (!superclasses)
74
+ return false;
75
+ for (const arg of superclasses.namedChildren) {
76
+ const text = arg.text;
77
+ if (text === "TestCase" || text === "unittest.TestCase") {
78
+ return true;
79
+ }
80
+ }
81
+ return false;
82
+ }
83
+ /**
84
+ * Check if a function is a pytest fixture (has @pytest.fixture decorator).
85
+ */
86
+ function isPytestFixture(decorators) {
87
+ for (const dec of decorators) {
88
+ const text = dec.text;
89
+ if (text.includes("pytest.fixture") ||
90
+ text.includes("@fixture")) {
91
+ return true;
92
+ }
93
+ }
94
+ return false;
95
+ }
96
+ /**
97
+ * Determine the kind for a function definition, considering test patterns.
98
+ */
99
+ function classifyFunction(name, parentId, decorators) {
100
+ if (isPytestFixture(decorators))
101
+ return "test_hook";
102
+ if (name.startsWith("test_"))
103
+ return parentId ? "test_case" : "test_case";
104
+ if (parentId)
105
+ return "method";
106
+ return "function";
107
+ }
108
+ // --- Main extractor ---
109
+ export function extractPythonSymbols(tree, filePath, source, repo) {
110
+ const symbols = [];
111
+ function walk(node, parentId) {
112
+ switch (node.type) {
113
+ case "function_definition": {
114
+ const name = getNodeName(node);
115
+ if (name) {
116
+ const kind = classifyFunction(name, parentId, []);
117
+ const sym = makeSymbol(node, name, kind, filePath, source, repo, parentId);
118
+ const sig = getSignature(node, source);
119
+ if (sig)
120
+ sym.signature = sig;
121
+ symbols.push(sym);
122
+ }
123
+ break;
124
+ }
125
+ case "class_definition": {
126
+ const name = getNodeName(node) ?? "<anonymous>";
127
+ const isTestClass = isTestCaseClass(node);
128
+ const kind = isTestClass ? "test_suite" : "class";
129
+ const sym = makeSymbol(node, name, kind, filePath, source, repo, parentId);
130
+ symbols.push(sym);
131
+ // Walk class body with this class as parent
132
+ const body = node.childForFieldName("body");
133
+ if (body) {
134
+ for (const child of body.namedChildren) {
135
+ walk(child, sym.id);
136
+ }
137
+ }
138
+ return;
139
+ }
140
+ case "decorated_definition": {
141
+ // Collect decorator nodes
142
+ const decorators = [];
143
+ let innerNode = null;
144
+ for (const child of node.namedChildren) {
145
+ if (child.type === "decorator") {
146
+ decorators.push(child);
147
+ }
148
+ else {
149
+ // The inner definition (function_definition or class_definition)
150
+ innerNode = child;
151
+ }
152
+ }
153
+ if (!innerNode)
154
+ break;
155
+ if (innerNode.type === "function_definition") {
156
+ const name = getNodeName(innerNode);
157
+ if (name) {
158
+ const kind = classifyFunction(name, parentId, decorators);
159
+ // Use the decorated_definition node for source span (includes decorators)
160
+ const sym = makeSymbol(node, name, kind, filePath, source, repo, parentId);
161
+ const sig = getSignature(innerNode, source);
162
+ if (sig)
163
+ sym.signature = sig;
164
+ // Docstring comes from the inner function, not the decorated_definition
165
+ const docstring = getDocstring(innerNode);
166
+ if (docstring)
167
+ sym.docstring = docstring;
168
+ symbols.push(sym);
169
+ }
170
+ }
171
+ else if (innerNode.type === "class_definition") {
172
+ const name = getNodeName(innerNode) ?? "<anonymous>";
173
+ const isTestClass = isTestCaseClass(innerNode);
174
+ const kind = isTestClass ? "test_suite" : "class";
175
+ // Use decorated_definition node for source span
176
+ const sym = makeSymbol(node, name, kind, filePath, source, repo, parentId);
177
+ // Docstring comes from the inner class
178
+ const docstring = getDocstring(innerNode);
179
+ if (docstring)
180
+ sym.docstring = docstring;
181
+ symbols.push(sym);
182
+ // Walk class body with this class as parent
183
+ const body = innerNode.childForFieldName("body");
184
+ if (body) {
185
+ for (const child of body.namedChildren) {
186
+ walk(child, sym.id);
187
+ }
188
+ }
189
+ }
190
+ return;
191
+ }
192
+ default:
193
+ break;
194
+ }
195
+ // Default: walk children
196
+ for (const child of node.namedChildren) {
197
+ walk(child, parentId);
198
+ }
199
+ }
200
+ walk(tree.rootNode);
201
+ return symbols;
202
+ }
203
+ //# sourceMappingURL=python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/parser/extractors/python.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE1E,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,kBAAkB;AAElB,SAAS,WAAW,CAAC,IAAuB;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,IAAuB;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;QACtE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEtD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CACnB,IAAuB,EACvB,MAAc;IAEd,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACzD,IAAI,UAAU,EAAE,CAAC;QACf,GAAG,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAuB,EACvB,MAAc;IAEd,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CACjB,IAAuB,EACvB,IAAY,EACZ,IAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,IAAY,EACZ,QAAiB;IAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,GAAG,GAAe;QACtB,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC;QACjD,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC;QACvC,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC;KACjC,CAAC;IAEF,IAAI,SAAS;QAAE,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IACzC,IAAI,QAAQ;QAAE,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;IAEpC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAuB;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC5D,IAAI,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IAEhC,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,UAA+B;IACtD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IACE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EACzB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAY,EACZ,QAA4B,EAC5B,UAA+B;IAE/B,IAAI,eAAe,CAAC,UAAU,CAAC;QAAE,OAAO,WAAW,CAAC;IACpD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1E,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,yBAAyB;AAEzB,MAAM,UAAU,oBAAoB,CAClC,IAAiB,EACjB,QAAgB,EAChB,MAAc,EACd,IAAY;IAEZ,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,SAAS,IAAI,CAAC,IAAuB,EAAE,QAAiB;QACtD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAClD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC3E,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBACvC,IAAI,GAAG;wBAAE,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;oBAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC;gBAChD,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,IAAI,GAAe,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC9D,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC3E,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAElB,4CAA4C;gBAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACvC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;gBACD,OAAO;YACT,CAAC;YAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,0BAA0B;gBAC1B,MAAM,UAAU,GAAwB,EAAE,CAAC;gBAC3C,IAAI,SAAS,GAA6B,IAAI,CAAC;gBAE/C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBAC/B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC;yBAAM,CAAC;wBACN,iEAAiE;wBACjE,SAAS,GAAG,KAAK,CAAC;oBACpB,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,SAAS;oBAAE,MAAM;gBAEtB,IAAI,SAAS,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;oBAC7C,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;oBACpC,IAAI,IAAI,EAAE,CAAC;wBACT,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;wBAC1D,0EAA0E;wBAC1E,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;wBAC3E,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;wBAC5C,IAAI,GAAG;4BAAE,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;wBAC7B,wEAAwE;wBACxE,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;wBAC1C,IAAI,SAAS;4BAAE,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;wBACzC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACpB,CAAC;gBACH,CAAC;qBAAM,IAAI,SAAS,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACjD,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC;oBACrD,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;oBAC/C,MAAM,IAAI,GAAe,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC9D,gDAAgD;oBAChD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC3E,uCAAuC;oBACvC,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;oBAC1C,IAAI,SAAS;wBAAE,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;oBACzC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAElB,4CAA4C;oBAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;oBACjD,IAAI,IAAI,EAAE,CAAC;wBACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;4BACvC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;wBACtB,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO;YACT,CAAC;YAED;gBACE,MAAM;QACV,CAAC;QAED,yBAAyB;QACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import Parser from "web-tree-sitter";
2
+ import type { CodeSymbol } from "../../types.js";
3
+ export declare function extractRustSymbols(tree: Parser.Tree, filePath: string, source: string, repo: string): CodeSymbol[];
4
+ //# sourceMappingURL=rust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/rust.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAC;AAqD7D,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,UAAU,EAAE,CA2Jd"}
@@ -0,0 +1,178 @@
1
+ import { tokenizeIdentifier, makeSymbolId } from "../symbol-extractor.js";
2
+ const MAX_SOURCE_LENGTH = 5000;
3
+ function getNodeName(node) {
4
+ const nameNode = node.childForFieldName("name");
5
+ return nameNode?.text ?? null;
6
+ }
7
+ /**
8
+ * Extract doc comments (/// or //!) preceding a node.
9
+ */
10
+ function getDocstring(node, source) {
11
+ const lines = [];
12
+ let prev = node.previousNamedSibling;
13
+ while (prev && prev.type === "line_comment") {
14
+ const text = source.slice(prev.startIndex, prev.endIndex);
15
+ if (text.startsWith("///") || text.startsWith("//!")) {
16
+ lines.unshift(text);
17
+ prev = prev.previousNamedSibling;
18
+ }
19
+ else {
20
+ break;
21
+ }
22
+ }
23
+ return lines.length > 0 ? lines.join("\n") : undefined;
24
+ }
25
+ function extractSource(node, source) {
26
+ const text = source.slice(node.startIndex, node.endIndex);
27
+ return text.length > MAX_SOURCE_LENGTH
28
+ ? text.slice(0, MAX_SOURCE_LENGTH) + "..."
29
+ : text;
30
+ }
31
+ function getSignature(node, source) {
32
+ const params = node.childForFieldName("parameters");
33
+ const returnType = node.childForFieldName("return_type");
34
+ if (!params)
35
+ return undefined;
36
+ let sig = source.slice(params.startIndex, params.endIndex);
37
+ if (returnType) {
38
+ sig += " -> " + source.slice(returnType.startIndex, returnType.endIndex);
39
+ }
40
+ return sig;
41
+ }
42
+ export function extractRustSymbols(tree, filePath, source, repo) {
43
+ const symbols = [];
44
+ function addSymbol(node, name, kind, parentId, signature) {
45
+ const startLine = node.startPosition.row + 1;
46
+ const endLine = node.endPosition.row + 1;
47
+ const id = makeSymbolId(repo, filePath, name, startLine);
48
+ const sym = {
49
+ id,
50
+ repo,
51
+ name,
52
+ kind,
53
+ file: filePath,
54
+ start_line: startLine,
55
+ end_line: endLine,
56
+ source: extractSource(node, source),
57
+ tokens: tokenizeIdentifier(name),
58
+ };
59
+ const docstring = getDocstring(node, source);
60
+ if (docstring)
61
+ sym.docstring = docstring;
62
+ if (signature)
63
+ sym.signature = signature;
64
+ if (parentId)
65
+ sym.parent = parentId;
66
+ symbols.push(sym);
67
+ return id;
68
+ }
69
+ function walk(node, parentId) {
70
+ switch (node.type) {
71
+ case "function_item": {
72
+ const name = getNodeName(node);
73
+ if (name) {
74
+ const sig = getSignature(node, source);
75
+ addSymbol(node, name, "function", parentId, sig);
76
+ }
77
+ break;
78
+ }
79
+ case "struct_item": {
80
+ const name = getNodeName(node);
81
+ if (name) {
82
+ const id = addSymbol(node, name, "class", parentId);
83
+ // Extract fields
84
+ const body = node.childForFieldName("body");
85
+ if (body) {
86
+ for (const child of body.namedChildren) {
87
+ if (child.type === "field_declaration") {
88
+ const fieldName = getNodeName(child);
89
+ if (fieldName) {
90
+ addSymbol(child, fieldName, "field", id);
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }
96
+ break;
97
+ }
98
+ case "enum_item": {
99
+ const name = getNodeName(node);
100
+ if (name) {
101
+ addSymbol(node, name, "enum", parentId);
102
+ }
103
+ break;
104
+ }
105
+ case "trait_item": {
106
+ const name = getNodeName(node);
107
+ if (name) {
108
+ const id = addSymbol(node, name, "interface", parentId);
109
+ // Walk trait body for method signatures
110
+ const body = node.childForFieldName("body");
111
+ if (body) {
112
+ for (const child of body.namedChildren) {
113
+ walk(child, id);
114
+ }
115
+ }
116
+ }
117
+ return; // Don't recurse further — already walked body
118
+ }
119
+ case "impl_item": {
120
+ // `impl Type { ... }` or `impl Trait for Type { ... }`
121
+ const typeNode = node.childForFieldName("type");
122
+ const implName = typeNode?.text;
123
+ const body = node.childForFieldName("body");
124
+ if (body && implName) {
125
+ for (const child of body.namedChildren) {
126
+ if (child.type === "function_item") {
127
+ const methodName = getNodeName(child);
128
+ if (methodName) {
129
+ const sig = getSignature(child, source);
130
+ // Find the parent struct symbol if it exists
131
+ const parentStructId = symbols.find((s) => s.name === implName && (s.kind === "class" || s.kind === "interface"))?.id;
132
+ addSymbol(child, methodName, "method", parentStructId, sig);
133
+ }
134
+ }
135
+ }
136
+ }
137
+ return; // Already walked body
138
+ }
139
+ case "type_item": {
140
+ const name = getNodeName(node);
141
+ if (name) {
142
+ addSymbol(node, name, "type", parentId);
143
+ }
144
+ break;
145
+ }
146
+ case "const_item":
147
+ case "static_item": {
148
+ const name = getNodeName(node);
149
+ if (name) {
150
+ addSymbol(node, name, "variable", parentId);
151
+ }
152
+ break;
153
+ }
154
+ case "mod_item": {
155
+ const name = getNodeName(node);
156
+ if (name) {
157
+ const id = addSymbol(node, name, "module", parentId);
158
+ const body = node.childForFieldName("body");
159
+ if (body) {
160
+ for (const child of body.namedChildren) {
161
+ walk(child, id);
162
+ }
163
+ }
164
+ }
165
+ return;
166
+ }
167
+ default:
168
+ break;
169
+ }
170
+ // Recurse into children for top-level nodes
171
+ for (const child of node.namedChildren) {
172
+ walk(child, parentId);
173
+ }
174
+ }
175
+ walk(tree.rootNode);
176
+ return symbols;
177
+ }
178
+ //# sourceMappingURL=rust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../src/parser/extractors/rust.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import Parser from "web-tree-sitter";
2
+ import type { CodeSymbol } from "../../types.js";
3
+ export declare function extractTypeScriptSymbols(tree: Parser.Tree, filePath: string, source: string, repo: string): CodeSymbol[];
4
+ //# sourceMappingURL=typescript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAC;AAwK7D,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,UAAU,EAAE,CAkMd"}