@milo4jo/contextkit 0.5.1 → 0.5.6
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/README.md +59 -1
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +254 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/graph.d.ts +10 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +289 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/select.d.ts.map +1 -1
- package/dist/commands/select.js +9 -0
- package/dist/commands/select.js.map +1 -1
- package/dist/commands/symbol.d.ts +9 -0
- package/dist/commands/symbol.d.ts.map +1 -0
- package/dist/commands/symbol.js +420 -0
- package/dist/commands/symbol.js.map +1 -0
- package/dist/db/index.d.ts +1 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -0
- package/dist/db/index.js.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/indexer/chunker.d.ts +10 -1
- package/dist/indexer/chunker.d.ts.map +1 -1
- package/dist/indexer/chunker.js +123 -2
- package/dist/indexer/chunker.js.map +1 -1
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +3 -2
- package/dist/indexer/index.js.map +1 -1
- package/dist/mcp-server.js +0 -0
- package/dist/parsers/index.d.ts +26 -6
- package/dist/parsers/index.d.ts.map +1 -1
- package/dist/parsers/index.js +71 -12
- package/dist/parsers/index.js.map +1 -1
- package/dist/parsers/markdown.d.ts +29 -0
- package/dist/parsers/markdown.d.ts.map +1 -0
- package/dist/parsers/markdown.js +142 -0
- package/dist/parsers/markdown.js.map +1 -0
- package/dist/parsers/tree-sitter.d.ts +32 -0
- package/dist/parsers/tree-sitter.d.ts.map +1 -0
- package/dist/parsers/tree-sitter.js +356 -0
- package/dist/parsers/tree-sitter.js.map +1 -0
- package/dist/selector/formatter.d.ts +4 -1
- package/dist/selector/formatter.d.ts.map +1 -1
- package/dist/selector/formatter.js +214 -6
- package/dist/selector/formatter.js.map +1 -1
- package/dist/selector/index.d.ts +4 -0
- package/dist/selector/index.d.ts.map +1 -1
- package/dist/selector/index.js +3 -1
- package/dist/selector/index.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown Parser
|
|
3
|
+
*
|
|
4
|
+
* Structure-aware parsing for Markdown files.
|
|
5
|
+
* Extracts sections based on headers, keeps code blocks intact.
|
|
6
|
+
*
|
|
7
|
+
* Inspired by QMD (Quarto) structure:
|
|
8
|
+
* - YAML front matter extraction
|
|
9
|
+
* - Header-based sections
|
|
10
|
+
* - Code block preservation
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Parse a Markdown file and extract structural boundaries.
|
|
14
|
+
*
|
|
15
|
+
* @param content - Markdown file content
|
|
16
|
+
* @param _filePath - Optional file path for context (unused, for API consistency)
|
|
17
|
+
* @returns Parse result with section/code block boundaries
|
|
18
|
+
*/
|
|
19
|
+
export function parseMarkdown(content, _filePath) {
|
|
20
|
+
const lines = content.split('\n');
|
|
21
|
+
const boundaries = [];
|
|
22
|
+
let inFrontMatter = false;
|
|
23
|
+
let frontMatterStart = 0;
|
|
24
|
+
let inCodeBlock = false;
|
|
25
|
+
let codeBlockStart = 0;
|
|
26
|
+
let codeBlockLang = '';
|
|
27
|
+
let currentSection = null;
|
|
28
|
+
// Check for YAML front matter at the start
|
|
29
|
+
if (lines[0]?.trim() === '---') {
|
|
30
|
+
inFrontMatter = true;
|
|
31
|
+
frontMatterStart = 1;
|
|
32
|
+
}
|
|
33
|
+
for (let i = 0; i < lines.length; i++) {
|
|
34
|
+
const line = lines[i];
|
|
35
|
+
const lineNum = i + 1;
|
|
36
|
+
// Handle front matter
|
|
37
|
+
if (inFrontMatter) {
|
|
38
|
+
if (line.trim() === '---' && lineNum > frontMatterStart) {
|
|
39
|
+
// End of front matter
|
|
40
|
+
boundaries.push({
|
|
41
|
+
type: 'constant', // Use 'constant' for front matter (document metadata)
|
|
42
|
+
name: 'frontmatter',
|
|
43
|
+
startLine: frontMatterStart,
|
|
44
|
+
endLine: lineNum,
|
|
45
|
+
exported: false,
|
|
46
|
+
});
|
|
47
|
+
inFrontMatter = false;
|
|
48
|
+
}
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// Handle code blocks
|
|
52
|
+
const codeBlockMatch = line.match(/^```(\w*)/);
|
|
53
|
+
if (codeBlockMatch) {
|
|
54
|
+
if (!inCodeBlock) {
|
|
55
|
+
// Start of code block
|
|
56
|
+
inCodeBlock = true;
|
|
57
|
+
codeBlockStart = lineNum;
|
|
58
|
+
codeBlockLang = codeBlockMatch[1] || 'text';
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// End of code block
|
|
62
|
+
const blockName = codeBlockLang ? `codeblock:${codeBlockLang}` : 'codeblock';
|
|
63
|
+
boundaries.push({
|
|
64
|
+
type: 'function', // Use 'function' for code blocks (executable content)
|
|
65
|
+
name: blockName,
|
|
66
|
+
startLine: codeBlockStart,
|
|
67
|
+
endLine: lineNum,
|
|
68
|
+
exported: false,
|
|
69
|
+
});
|
|
70
|
+
inCodeBlock = false;
|
|
71
|
+
}
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
// Skip content inside code blocks
|
|
75
|
+
if (inCodeBlock) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// Handle headers
|
|
79
|
+
const headerMatch = line.match(/^(#{1,6})\s+(.+)$/);
|
|
80
|
+
if (headerMatch) {
|
|
81
|
+
const level = headerMatch[1].length;
|
|
82
|
+
const title = headerMatch[2].trim();
|
|
83
|
+
// Always close previous section when we encounter a new header
|
|
84
|
+
// Each header defines a new section
|
|
85
|
+
if (currentSection) {
|
|
86
|
+
boundaries.push({
|
|
87
|
+
type: 'class', // Use 'class' for sections (containers of content)
|
|
88
|
+
name: currentSection.name,
|
|
89
|
+
startLine: currentSection.startLine,
|
|
90
|
+
endLine: lineNum - 1,
|
|
91
|
+
exported: currentSection.level === 1, // Top-level headers are "exported"
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
// Start new section
|
|
95
|
+
currentSection = {
|
|
96
|
+
name: title,
|
|
97
|
+
level,
|
|
98
|
+
startLine: lineNum,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Close final section
|
|
103
|
+
if (currentSection) {
|
|
104
|
+
boundaries.push({
|
|
105
|
+
type: 'class',
|
|
106
|
+
name: currentSection.name,
|
|
107
|
+
startLine: currentSection.startLine,
|
|
108
|
+
endLine: lines.length,
|
|
109
|
+
exported: currentSection.level === 1,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// Handle unclosed code block
|
|
113
|
+
if (inCodeBlock) {
|
|
114
|
+
boundaries.push({
|
|
115
|
+
type: 'function',
|
|
116
|
+
name: codeBlockLang ? `codeblock:${codeBlockLang}` : 'codeblock',
|
|
117
|
+
startLine: codeBlockStart,
|
|
118
|
+
endLine: lines.length,
|
|
119
|
+
exported: false,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
// Sort boundaries by start line
|
|
123
|
+
boundaries.sort((a, b) => a.startLine - b.startLine);
|
|
124
|
+
return {
|
|
125
|
+
success: true,
|
|
126
|
+
boundaries,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Check if a file is a Markdown file.
|
|
131
|
+
*/
|
|
132
|
+
export function isMarkdown(filePath) {
|
|
133
|
+
const ext = filePath.toLowerCase().split('.').pop();
|
|
134
|
+
return ext === 'md' || ext === 'mdx' || ext === 'markdown' || ext === 'qmd';
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get supported Markdown extensions.
|
|
138
|
+
*/
|
|
139
|
+
export function getMarkdownExtensions() {
|
|
140
|
+
return ['md', 'mdx', 'markdown', 'qmd'];
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/parsers/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree-sitter Multi-Language Parser
|
|
3
|
+
*
|
|
4
|
+
* Universal AST parsing using tree-sitter WASM bindings.
|
|
5
|
+
* Supports: Python, Go, Rust (and more to come)
|
|
6
|
+
*/
|
|
7
|
+
import type { ParseResult } from './typescript.js';
|
|
8
|
+
/**
|
|
9
|
+
* Get language ID from file extension
|
|
10
|
+
*/
|
|
11
|
+
export declare function getLanguageForFile(filePath: string): string | null;
|
|
12
|
+
/**
|
|
13
|
+
* Check if tree-sitter can parse this file type
|
|
14
|
+
*/
|
|
15
|
+
export declare function canParseWithTreeSitter(filePath: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Parse a file using tree-sitter
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseWithTreeSitter(content: string, filePath: string): Promise<ParseResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Generate a repo map (signatures only) from a parsed file
|
|
22
|
+
*/
|
|
23
|
+
export declare function generateRepoMap(fileContent: string, filePath: string): Promise<{
|
|
24
|
+
success: boolean;
|
|
25
|
+
map: string;
|
|
26
|
+
error?: string;
|
|
27
|
+
}>;
|
|
28
|
+
/** Get list of supported languages */
|
|
29
|
+
export declare function getSupportedTreeSitterLanguages(): string[];
|
|
30
|
+
/** Get file extensions supported by tree-sitter */
|
|
31
|
+
export declare function getTreeSitterExtensions(): string[];
|
|
32
|
+
//# sourceMappingURL=tree-sitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-sitter.d.ts","sourceRoot":"","sources":["../../src/parsers/tree-sitter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,iBAAiB,CAAC;AA6LjE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIlE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhE;AA+DD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAuDtB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmF5D;AAED,sCAAsC;AACtC,wBAAgB,+BAA+B,IAAI,MAAM,EAAE,CAE1D;AAED,mDAAmD;AACnD,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAElD"}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree-sitter Multi-Language Parser
|
|
3
|
+
*
|
|
4
|
+
* Universal AST parsing using tree-sitter WASM bindings.
|
|
5
|
+
* Supports: Python, Go, Rust (and more to come)
|
|
6
|
+
*/
|
|
7
|
+
import { Parser as TreeSitterParser, Language as TreeSitterLanguage, } from 'web-tree-sitter';
|
|
8
|
+
import { join, dirname } from 'path';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
10
|
+
// Cache for loaded languages
|
|
11
|
+
const languageCache = new Map();
|
|
12
|
+
// Parser instance (singleton)
|
|
13
|
+
let parserInstance = null;
|
|
14
|
+
/** Language configurations */
|
|
15
|
+
const LANGUAGE_CONFIGS = {
|
|
16
|
+
python: {
|
|
17
|
+
package: 'tree-sitter-python',
|
|
18
|
+
wasmFile: 'tree-sitter-python.wasm',
|
|
19
|
+
functionTypes: ['function_definition'],
|
|
20
|
+
classTypes: ['class_definition'],
|
|
21
|
+
methodTypes: ['function_definition'],
|
|
22
|
+
getNodeName: (node) => {
|
|
23
|
+
const nameNode = node.childForFieldName('name');
|
|
24
|
+
return nameNode?.text ?? null;
|
|
25
|
+
},
|
|
26
|
+
getSignature: (node, content) => {
|
|
27
|
+
const text = content.substring(node.startIndex, node.endIndex);
|
|
28
|
+
const lines = text.split('\n');
|
|
29
|
+
const firstLine = lines[0].trim();
|
|
30
|
+
const decorators = [];
|
|
31
|
+
let prev = node.previousNamedSibling;
|
|
32
|
+
while (prev && prev.type === 'decorator') {
|
|
33
|
+
decorators.unshift(prev.text);
|
|
34
|
+
prev = prev.previousNamedSibling;
|
|
35
|
+
}
|
|
36
|
+
if (decorators.length > 0) {
|
|
37
|
+
return decorators.join('\n') + '\n' + firstLine;
|
|
38
|
+
}
|
|
39
|
+
return firstLine;
|
|
40
|
+
},
|
|
41
|
+
isExported: () => true,
|
|
42
|
+
},
|
|
43
|
+
go: {
|
|
44
|
+
package: 'tree-sitter-go',
|
|
45
|
+
wasmFile: 'tree-sitter-go.wasm',
|
|
46
|
+
functionTypes: ['function_declaration', 'method_declaration'],
|
|
47
|
+
classTypes: ['type_declaration'],
|
|
48
|
+
methodTypes: ['method_declaration'],
|
|
49
|
+
getNodeName: (node) => {
|
|
50
|
+
const nameNode = node.childForFieldName('name');
|
|
51
|
+
return nameNode?.text ?? null;
|
|
52
|
+
},
|
|
53
|
+
getSignature: (node, content) => {
|
|
54
|
+
const text = content.substring(node.startIndex, node.endIndex);
|
|
55
|
+
const lines = text.split('\n');
|
|
56
|
+
if (node.type === 'function_declaration' || node.type === 'method_declaration') {
|
|
57
|
+
const funcLine = lines.find((l) => l.trim().startsWith('func'));
|
|
58
|
+
if (funcLine) {
|
|
59
|
+
const openBrace = funcLine.indexOf('{');
|
|
60
|
+
return openBrace > 0 ? funcLine.substring(0, openBrace).trim() : funcLine.trim();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (node.type === 'type_declaration') {
|
|
64
|
+
return lines[0].trim();
|
|
65
|
+
}
|
|
66
|
+
return lines[0].trim();
|
|
67
|
+
},
|
|
68
|
+
isExported: (node) => {
|
|
69
|
+
const nameNode = node.childForFieldName('name');
|
|
70
|
+
const name = nameNode?.text;
|
|
71
|
+
return name ? name[0] === name[0].toUpperCase() : false;
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
rust: {
|
|
75
|
+
package: 'tree-sitter-rust',
|
|
76
|
+
wasmFile: 'tree-sitter-rust.wasm',
|
|
77
|
+
functionTypes: ['function_item'],
|
|
78
|
+
classTypes: ['struct_item', 'enum_item', 'trait_item', 'impl_item'],
|
|
79
|
+
methodTypes: ['function_item'],
|
|
80
|
+
getNodeName: (node) => {
|
|
81
|
+
const nameNode = node.childForFieldName('name');
|
|
82
|
+
return nameNode?.text ?? null;
|
|
83
|
+
},
|
|
84
|
+
getSignature: (node, content) => {
|
|
85
|
+
const text = content.substring(node.startIndex, node.endIndex);
|
|
86
|
+
const lines = text.split('\n');
|
|
87
|
+
if (node.type === 'function_item') {
|
|
88
|
+
let sig = '';
|
|
89
|
+
for (const line of lines) {
|
|
90
|
+
sig += line + '\n';
|
|
91
|
+
if (line.includes('{')) {
|
|
92
|
+
sig = sig.substring(0, sig.lastIndexOf('{'));
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return sig.trim();
|
|
97
|
+
}
|
|
98
|
+
return lines[0].trim();
|
|
99
|
+
},
|
|
100
|
+
isExported: (node) => {
|
|
101
|
+
const parent = node.parent;
|
|
102
|
+
if (parent?.type === 'visibility_modifier') {
|
|
103
|
+
return parent.text.includes('pub');
|
|
104
|
+
}
|
|
105
|
+
let prev = node.previousSibling;
|
|
106
|
+
while (prev) {
|
|
107
|
+
if (prev.type === 'visibility_modifier') {
|
|
108
|
+
return prev.text.includes('pub');
|
|
109
|
+
}
|
|
110
|
+
prev = prev.previousSibling;
|
|
111
|
+
}
|
|
112
|
+
return false;
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
/** File extension to language mapping */
|
|
117
|
+
const EXTENSION_TO_LANGUAGE = {
|
|
118
|
+
py: 'python',
|
|
119
|
+
pyw: 'python',
|
|
120
|
+
go: 'go',
|
|
121
|
+
rs: 'rust',
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Initialize the parser (lazy initialization)
|
|
125
|
+
*/
|
|
126
|
+
async function getParser() {
|
|
127
|
+
if (parserInstance)
|
|
128
|
+
return parserInstance;
|
|
129
|
+
await TreeSitterParser.init();
|
|
130
|
+
parserInstance = new TreeSitterParser();
|
|
131
|
+
return parserInstance;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Load a language grammar
|
|
135
|
+
*/
|
|
136
|
+
async function loadLanguage(languageId) {
|
|
137
|
+
if (languageCache.has(languageId)) {
|
|
138
|
+
return languageCache.get(languageId);
|
|
139
|
+
}
|
|
140
|
+
const config = LANGUAGE_CONFIGS[languageId];
|
|
141
|
+
if (!config) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
const wasmPath = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'node_modules', config.package, config.wasmFile);
|
|
146
|
+
const language = await TreeSitterLanguage.load(wasmPath);
|
|
147
|
+
languageCache.set(languageId, language);
|
|
148
|
+
return language;
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
console.error(`Failed to load language ${languageId}:`, error);
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get language ID from file extension
|
|
157
|
+
*/
|
|
158
|
+
export function getLanguageForFile(filePath) {
|
|
159
|
+
const ext = filePath.toLowerCase().split('.').pop();
|
|
160
|
+
if (!ext)
|
|
161
|
+
return null;
|
|
162
|
+
return EXTENSION_TO_LANGUAGE[ext] ?? null;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Check if tree-sitter can parse this file type
|
|
166
|
+
*/
|
|
167
|
+
export function canParseWithTreeSitter(filePath) {
|
|
168
|
+
return getLanguageForFile(filePath) !== null;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Extract code boundaries from a syntax tree
|
|
172
|
+
*/
|
|
173
|
+
function extractBoundaries(tree, config) {
|
|
174
|
+
const boundaries = [];
|
|
175
|
+
const visit = (node, parentClass = null) => {
|
|
176
|
+
let boundary = null;
|
|
177
|
+
if (config.functionTypes.includes(node.type)) {
|
|
178
|
+
const name = config.getNodeName(node);
|
|
179
|
+
if (name) {
|
|
180
|
+
const isMethod = parentClass !== null;
|
|
181
|
+
boundary = {
|
|
182
|
+
type: isMethod ? 'method' : 'function',
|
|
183
|
+
name: isMethod ? `${parentClass}.${name}` : name,
|
|
184
|
+
startLine: node.startPosition.row + 1,
|
|
185
|
+
endLine: node.endPosition.row + 1,
|
|
186
|
+
exported: config.isExported(node),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (config.classTypes.includes(node.type)) {
|
|
191
|
+
const name = config.getNodeName(node);
|
|
192
|
+
if (name) {
|
|
193
|
+
boundary = {
|
|
194
|
+
type: 'class',
|
|
195
|
+
name,
|
|
196
|
+
startLine: node.startPosition.row + 1,
|
|
197
|
+
endLine: node.endPosition.row + 1,
|
|
198
|
+
exported: config.isExported(node),
|
|
199
|
+
};
|
|
200
|
+
for (const child of node.children) {
|
|
201
|
+
visit(child, name);
|
|
202
|
+
}
|
|
203
|
+
if (boundary) {
|
|
204
|
+
boundaries.push(boundary);
|
|
205
|
+
}
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (boundary) {
|
|
210
|
+
boundaries.push(boundary);
|
|
211
|
+
}
|
|
212
|
+
for (const child of node.children) {
|
|
213
|
+
visit(child, parentClass);
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
visit(tree.rootNode);
|
|
217
|
+
return boundaries;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Parse a file using tree-sitter
|
|
221
|
+
*/
|
|
222
|
+
export async function parseWithTreeSitter(content, filePath) {
|
|
223
|
+
const languageId = getLanguageForFile(filePath);
|
|
224
|
+
if (!languageId) {
|
|
225
|
+
return {
|
|
226
|
+
success: false,
|
|
227
|
+
boundaries: [],
|
|
228
|
+
error: `Unsupported file type: ${filePath}`,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
const config = LANGUAGE_CONFIGS[languageId];
|
|
232
|
+
if (!config) {
|
|
233
|
+
return {
|
|
234
|
+
success: false,
|
|
235
|
+
boundaries: [],
|
|
236
|
+
error: `No configuration for language: ${languageId}`,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
try {
|
|
240
|
+
const parser = await getParser();
|
|
241
|
+
const language = await loadLanguage(languageId);
|
|
242
|
+
if (!language) {
|
|
243
|
+
return {
|
|
244
|
+
success: false,
|
|
245
|
+
boundaries: [],
|
|
246
|
+
error: `Failed to load language grammar for: ${languageId}`,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
parser.setLanguage(language);
|
|
250
|
+
const tree = parser.parse(content);
|
|
251
|
+
if (!tree) {
|
|
252
|
+
return {
|
|
253
|
+
success: false,
|
|
254
|
+
boundaries: [],
|
|
255
|
+
error: `Failed to parse file: ${filePath}`,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
const boundaries = extractBoundaries(tree, config);
|
|
259
|
+
return {
|
|
260
|
+
success: true,
|
|
261
|
+
boundaries,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
return {
|
|
266
|
+
success: false,
|
|
267
|
+
boundaries: [],
|
|
268
|
+
error: error instanceof Error ? error.message : String(error),
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Generate a repo map (signatures only) from a parsed file
|
|
274
|
+
*/
|
|
275
|
+
export async function generateRepoMap(fileContent, filePath) {
|
|
276
|
+
const languageId = getLanguageForFile(filePath);
|
|
277
|
+
if (!languageId) {
|
|
278
|
+
return {
|
|
279
|
+
success: false,
|
|
280
|
+
map: '',
|
|
281
|
+
error: `Unsupported file type: ${filePath}`,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
const config = LANGUAGE_CONFIGS[languageId];
|
|
285
|
+
if (!config) {
|
|
286
|
+
return {
|
|
287
|
+
success: false,
|
|
288
|
+
map: '',
|
|
289
|
+
error: `No configuration for language: ${languageId}`,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
try {
|
|
293
|
+
const parser = await getParser();
|
|
294
|
+
const language = await loadLanguage(languageId);
|
|
295
|
+
if (!language) {
|
|
296
|
+
return {
|
|
297
|
+
success: false,
|
|
298
|
+
map: '',
|
|
299
|
+
error: `Failed to load language grammar for: ${languageId}`,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
parser.setLanguage(language);
|
|
303
|
+
const tree = parser.parse(fileContent);
|
|
304
|
+
if (!tree) {
|
|
305
|
+
return {
|
|
306
|
+
success: false,
|
|
307
|
+
map: '',
|
|
308
|
+
error: `Failed to parse file: ${filePath}`,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
const lines = [];
|
|
312
|
+
const addSignature = (node, indent = 0) => {
|
|
313
|
+
const prefix = '│ '.repeat(indent);
|
|
314
|
+
if (config.functionTypes.includes(node.type) || config.methodTypes.includes(node.type)) {
|
|
315
|
+
const sig = config.getSignature(node, fileContent);
|
|
316
|
+
const exported = config.isExported(node);
|
|
317
|
+
const exportPrefix = exported ? '' : '(private) ';
|
|
318
|
+
lines.push(`${prefix}${exportPrefix}${sig}`);
|
|
319
|
+
}
|
|
320
|
+
if (config.classTypes.includes(node.type)) {
|
|
321
|
+
const sig = config.getSignature(node, fileContent);
|
|
322
|
+
const exported = config.isExported(node);
|
|
323
|
+
const exportPrefix = exported ? '' : '(private) ';
|
|
324
|
+
lines.push(`${prefix}${exportPrefix}${sig}`);
|
|
325
|
+
for (const child of node.children) {
|
|
326
|
+
addSignature(child, indent + 1);
|
|
327
|
+
}
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
for (const child of node.children) {
|
|
331
|
+
addSignature(child, indent);
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
addSignature(tree.rootNode);
|
|
335
|
+
return {
|
|
336
|
+
success: true,
|
|
337
|
+
map: lines.join('\n'),
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
return {
|
|
342
|
+
success: false,
|
|
343
|
+
map: '',
|
|
344
|
+
error: error instanceof Error ? error.message : String(error),
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/** Get list of supported languages */
|
|
349
|
+
export function getSupportedTreeSitterLanguages() {
|
|
350
|
+
return Object.keys(LANGUAGE_CONFIGS);
|
|
351
|
+
}
|
|
352
|
+
/** Get file extensions supported by tree-sitter */
|
|
353
|
+
export function getTreeSitterExtensions() {
|
|
354
|
+
return Object.keys(EXTENSION_TO_LANGUAGE);
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=tree-sitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-sitter.js","sourceRoot":"","sources":["../../src/parsers/tree-sitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,8 +52,11 @@ export declare function formatAsXml(query: string, result: BudgetResult, totalCo
|
|
|
52
52
|
* Format output as plain text (optimized for clipboard/pasting)
|
|
53
53
|
*/
|
|
54
54
|
export declare function formatAsPlain(query: string, result: BudgetResult, totalConsidered: number, timeMs: number): FormattedOutput;
|
|
55
|
+
/** Selection mode */
|
|
56
|
+
type SelectMode = 'full' | 'map';
|
|
55
57
|
/**
|
|
56
58
|
* Format output in specified format
|
|
57
59
|
*/
|
|
58
|
-
export declare function formatInFormat(format: OutputFormat, query: string, result: BudgetResult, totalConsidered: number, timeMs: number, explain?: boolean): FormattedOutput;
|
|
60
|
+
export declare function formatInFormat(format: OutputFormat, query: string, result: BudgetResult, totalConsidered: number, timeMs: number, explain?: boolean, mode?: SelectMode): FormattedOutput;
|
|
61
|
+
export {};
|
|
59
62
|
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/selector/formatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjE,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,iCAAiC;AACjC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqDjB;AA8CD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqBjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CA2DjB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAgDjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAe,
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/selector/formatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjE,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,iCAAiC;AACjC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqDjB;AA8CD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqBjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CA2DjB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAgDjB;AAED,qBAAqB;AACrB,KAAK,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAEjC;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAe,EACxB,IAAI,GAAE,UAAmB,GACxB,eAAe,CA0BjB"}
|