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.
- package/LICENSE +21 -0
- package/README.md +241 -0
- package/dist/cli/args.d.ts +13 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +79 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/commands.d.ts +4 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +336 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/help.d.ts +3 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +271 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +80 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +23 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +49 -0
- package/dist/config.js.map +1 -0
- package/dist/parser/extractors/go.d.ts +4 -0
- package/dist/parser/extractors/go.d.ts.map +1 -0
- package/dist/parser/extractors/go.js +185 -0
- package/dist/parser/extractors/go.js.map +1 -0
- package/dist/parser/extractors/javascript.d.ts +9 -0
- package/dist/parser/extractors/javascript.d.ts.map +1 -0
- package/dist/parser/extractors/javascript.js +10 -0
- package/dist/parser/extractors/javascript.js.map +1 -0
- package/dist/parser/extractors/markdown.d.ts +15 -0
- package/dist/parser/extractors/markdown.d.ts.map +1 -0
- package/dist/parser/extractors/markdown.js +217 -0
- package/dist/parser/extractors/markdown.js.map +1 -0
- package/dist/parser/extractors/prisma.d.ts +17 -0
- package/dist/parser/extractors/prisma.d.ts.map +1 -0
- package/dist/parser/extractors/prisma.js +121 -0
- package/dist/parser/extractors/prisma.js.map +1 -0
- package/dist/parser/extractors/python.d.ts +4 -0
- package/dist/parser/extractors/python.d.ts.map +1 -0
- package/dist/parser/extractors/python.js +203 -0
- package/dist/parser/extractors/python.js.map +1 -0
- package/dist/parser/extractors/rust.d.ts +4 -0
- package/dist/parser/extractors/rust.d.ts.map +1 -0
- package/dist/parser/extractors/rust.js +178 -0
- package/dist/parser/extractors/rust.js.map +1 -0
- package/dist/parser/extractors/typescript.d.ts +4 -0
- package/dist/parser/extractors/typescript.d.ts.map +1 -0
- package/dist/parser/extractors/typescript.js +296 -0
- package/dist/parser/extractors/typescript.js.map +1 -0
- package/dist/parser/languages/tree-sitter-css.wasm +0 -0
- package/dist/parser/languages/tree-sitter-go.wasm +0 -0
- package/dist/parser/languages/tree-sitter-java.wasm +0 -0
- package/dist/parser/languages/tree-sitter-javascript.wasm +0 -0
- package/dist/parser/languages/tree-sitter-json.wasm +0 -0
- package/dist/parser/languages/tree-sitter-php.wasm +0 -0
- package/dist/parser/languages/tree-sitter-python.wasm +0 -0
- package/dist/parser/languages/tree-sitter-ruby.wasm +0 -0
- package/dist/parser/languages/tree-sitter-rust.wasm +0 -0
- package/dist/parser/languages/tree-sitter-tsx.wasm +0 -0
- package/dist/parser/languages/tree-sitter-typescript.wasm +0 -0
- package/dist/parser/parser-manager.d.ts +6 -0
- package/dist/parser/parser-manager.d.ts.map +1 -0
- package/dist/parser/parser-manager.js +60 -0
- package/dist/parser/parser-manager.js.map +1 -0
- package/dist/parser/symbol-extractor.d.ts +22 -0
- package/dist/parser/symbol-extractor.d.ts.map +1 -0
- package/dist/parser/symbol-extractor.js +115 -0
- package/dist/parser/symbol-extractor.js.map +1 -0
- package/dist/retrieval/codebase-retrieval.d.ts +27 -0
- package/dist/retrieval/codebase-retrieval.d.ts.map +1 -0
- package/dist/retrieval/codebase-retrieval.js +472 -0
- package/dist/retrieval/codebase-retrieval.js.map +1 -0
- package/dist/search/bm25.d.ts +22 -0
- package/dist/search/bm25.d.ts.map +1 -0
- package/dist/search/bm25.js +179 -0
- package/dist/search/bm25.js.map +1 -0
- package/dist/search/chunker.d.ts +9 -0
- package/dist/search/chunker.d.ts.map +1 -0
- package/dist/search/chunker.js +91 -0
- package/dist/search/chunker.js.map +1 -0
- package/dist/search/hybrid.d.ts +16 -0
- package/dist/search/hybrid.d.ts.map +1 -0
- package/dist/search/hybrid.js +51 -0
- package/dist/search/hybrid.js.map +1 -0
- package/dist/search/semantic.d.ts +44 -0
- package/dist/search/semantic.d.ts.map +1 -0
- package/dist/search/semantic.js +194 -0
- package/dist/search/semantic.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +285 -0
- package/dist/server.js.map +1 -0
- package/dist/storage/chunk-store.d.ts +32 -0
- package/dist/storage/chunk-store.d.ts.map +1 -0
- package/dist/storage/chunk-store.js +144 -0
- package/dist/storage/chunk-store.js.map +1 -0
- package/dist/storage/embedding-store.d.ts +41 -0
- package/dist/storage/embedding-store.d.ts.map +1 -0
- package/dist/storage/embedding-store.js +149 -0
- package/dist/storage/embedding-store.js.map +1 -0
- package/dist/storage/index-store.d.ts +23 -0
- package/dist/storage/index-store.d.ts.map +1 -0
- package/dist/storage/index-store.js +95 -0
- package/dist/storage/index-store.js.map +1 -0
- package/dist/storage/registry.d.ts +35 -0
- package/dist/storage/registry.d.ts.map +1 -0
- package/dist/storage/registry.js +99 -0
- package/dist/storage/registry.js.map +1 -0
- package/dist/storage/usage-stats.d.ts +32 -0
- package/dist/storage/usage-stats.d.ts.map +1 -0
- package/dist/storage/usage-stats.js +180 -0
- package/dist/storage/usage-stats.js.map +1 -0
- package/dist/storage/usage-tracker.d.ts +35 -0
- package/dist/storage/usage-tracker.d.ts.map +1 -0
- package/dist/storage/usage-tracker.js +245 -0
- package/dist/storage/usage-tracker.js.map +1 -0
- package/dist/storage/watcher.d.ts +12 -0
- package/dist/storage/watcher.d.ts.map +1 -0
- package/dist/storage/watcher.js +66 -0
- package/dist/storage/watcher.js.map +1 -0
- package/dist/tools/context-tools.d.ts +31 -0
- package/dist/tools/context-tools.d.ts.map +1 -0
- package/dist/tools/context-tools.js +219 -0
- package/dist/tools/context-tools.js.map +1 -0
- package/dist/tools/diff-tools.d.ts +22 -0
- package/dist/tools/diff-tools.d.ts.map +1 -0
- package/dist/tools/diff-tools.js +165 -0
- package/dist/tools/diff-tools.js.map +1 -0
- package/dist/tools/generate-tools.d.ts +11 -0
- package/dist/tools/generate-tools.d.ts.map +1 -0
- package/dist/tools/generate-tools.js +135 -0
- package/dist/tools/generate-tools.js.map +1 -0
- package/dist/tools/graph-tools.d.ts +60 -0
- package/dist/tools/graph-tools.d.ts.map +1 -0
- package/dist/tools/graph-tools.js +313 -0
- package/dist/tools/graph-tools.js.map +1 -0
- package/dist/tools/index-tools.d.ts +39 -0
- package/dist/tools/index-tools.d.ts.map +1 -0
- package/dist/tools/index-tools.js +451 -0
- package/dist/tools/index-tools.js.map +1 -0
- package/dist/tools/outline-tools.d.ts +59 -0
- package/dist/tools/outline-tools.d.ts.map +1 -0
- package/dist/tools/outline-tools.js +342 -0
- package/dist/tools/outline-tools.js.map +1 -0
- package/dist/tools/search-tools.d.ts +29 -0
- package/dist/tools/search-tools.d.ts.map +1 -0
- package/dist/tools/search-tools.js +309 -0
- package/dist/tools/search-tools.js.map +1 -0
- package/dist/tools/symbol-tools.d.ts +24 -0
- package/dist/tools/symbol-tools.d.ts.map +1 -0
- package/dist/tools/symbol-tools.js +172 -0
- package/dist/tools/symbol-tools.js.map +1 -0
- package/dist/types.d.ts +91 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/git-validation.d.ts +11 -0
- package/dist/utils/git-validation.d.ts.map +1 -0
- package/dist/utils/git-validation.js +19 -0
- package/dist/utils/git-validation.js.map +1 -0
- package/dist/utils/test-file.d.ts +11 -0
- package/dist/utils/test-file.d.ts.map +1 -0
- package/dist/utils/test-file.js +27 -0
- package/dist/utils/test-file.js.map +1 -0
- package/package.json +62 -0
- package/src/parser/languages/tree-sitter-css.wasm +0 -0
- package/src/parser/languages/tree-sitter-go.wasm +0 -0
- package/src/parser/languages/tree-sitter-java.wasm +0 -0
- package/src/parser/languages/tree-sitter-javascript.wasm +0 -0
- package/src/parser/languages/tree-sitter-json.wasm +0 -0
- package/src/parser/languages/tree-sitter-php.wasm +0 -0
- package/src/parser/languages/tree-sitter-python.wasm +0 -0
- package/src/parser/languages/tree-sitter-ruby.wasm +0 -0
- package/src/parser/languages/tree-sitter-rust.wasm +0 -0
- package/src/parser/languages/tree-sitter-tsx.wasm +0 -0
- 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 @@
|
|
|
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":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|