lance-context 0.1.0 → 1.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/README.md +232 -23
- package/dist/__tests__/ast-chunker.test.d.ts +2 -0
- package/dist/__tests__/ast-chunker.test.d.ts.map +1 -0
- package/dist/__tests__/ast-chunker.test.js +307 -0
- package/dist/__tests__/ast-chunker.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +242 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/dashboard/beads.test.d.ts +2 -0
- package/dist/__tests__/dashboard/beads.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/beads.test.js +151 -0
- package/dist/__tests__/dashboard/beads.test.js.map +1 -0
- package/dist/__tests__/dashboard/index.test.d.ts +2 -0
- package/dist/__tests__/dashboard/index.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/index.test.js +116 -0
- package/dist/__tests__/dashboard/index.test.js.map +1 -0
- package/dist/__tests__/dashboard/routes.test.d.ts +2 -0
- package/dist/__tests__/dashboard/routes.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/routes.test.js +125 -0
- package/dist/__tests__/dashboard/routes.test.js.map +1 -0
- package/dist/__tests__/dashboard/server.test.d.ts +2 -0
- package/dist/__tests__/dashboard/server.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/server.test.js +75 -0
- package/dist/__tests__/dashboard/server.test.js.map +1 -0
- package/dist/__tests__/dashboard/state.test.d.ts +2 -0
- package/dist/__tests__/dashboard/state.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/state.test.js +124 -0
- package/dist/__tests__/dashboard/state.test.js.map +1 -0
- package/dist/__tests__/embeddings/factory.test.d.ts +2 -0
- package/dist/__tests__/embeddings/factory.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/factory.test.js +100 -0
- package/dist/__tests__/embeddings/factory.test.js.map +1 -0
- package/dist/__tests__/embeddings/jina.test.d.ts +2 -0
- package/dist/__tests__/embeddings/jina.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/jina.test.js +156 -0
- package/dist/__tests__/embeddings/jina.test.js.map +1 -0
- package/dist/__tests__/embeddings/ollama.test.d.ts +2 -0
- package/dist/__tests__/embeddings/ollama.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/ollama.test.js +172 -0
- package/dist/__tests__/embeddings/ollama.test.js.map +1 -0
- package/dist/__tests__/embeddings/rate-limiter.test.d.ts +2 -0
- package/dist/__tests__/embeddings/rate-limiter.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/rate-limiter.test.js +163 -0
- package/dist/__tests__/embeddings/rate-limiter.test.js.map +1 -0
- package/dist/__tests__/embeddings/retry.test.d.ts +2 -0
- package/dist/__tests__/embeddings/retry.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/retry.test.js +260 -0
- package/dist/__tests__/embeddings/retry.test.js.map +1 -0
- package/dist/__tests__/embeddings/types.test.d.ts +2 -0
- package/dist/__tests__/embeddings/types.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/types.test.js +31 -0
- package/dist/__tests__/embeddings/types.test.js.map +1 -0
- package/dist/__tests__/mocks/embedding-backend.mock.d.ts +10 -0
- package/dist/__tests__/mocks/embedding-backend.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/embedding-backend.mock.js +39 -0
- package/dist/__tests__/mocks/embedding-backend.mock.js.map +1 -0
- package/dist/__tests__/mocks/fetch.mock.d.ts +38 -0
- package/dist/__tests__/mocks/fetch.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/fetch.mock.js +74 -0
- package/dist/__tests__/mocks/fetch.mock.js.map +1 -0
- package/dist/__tests__/mocks/lancedb.mock.d.ts +38 -0
- package/dist/__tests__/mocks/lancedb.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/lancedb.mock.js +63 -0
- package/dist/__tests__/mocks/lancedb.mock.js.map +1 -0
- package/dist/__tests__/search/clustering.test.d.ts +2 -0
- package/dist/__tests__/search/clustering.test.d.ts.map +1 -0
- package/dist/__tests__/search/clustering.test.js +230 -0
- package/dist/__tests__/search/clustering.test.js.map +1 -0
- package/dist/__tests__/search/hybrid-search.test.d.ts +2 -0
- package/dist/__tests__/search/hybrid-search.test.d.ts.map +1 -0
- package/dist/__tests__/search/hybrid-search.test.js +186 -0
- package/dist/__tests__/search/hybrid-search.test.js.map +1 -0
- package/dist/__tests__/search/indexer.test.d.ts +2 -0
- package/dist/__tests__/search/indexer.test.d.ts.map +1 -0
- package/dist/__tests__/search/indexer.test.js +878 -0
- package/dist/__tests__/search/indexer.test.js.map +1 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.d.ts +2 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.d.ts.map +1 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.js +228 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.js.map +1 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +11 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/utils/concurrency.test.d.ts +2 -0
- package/dist/__tests__/utils/concurrency.test.d.ts.map +1 -0
- package/dist/__tests__/utils/concurrency.test.js +83 -0
- package/dist/__tests__/utils/concurrency.test.js.map +1 -0
- package/dist/__tests__/utils/errors.test.d.ts +2 -0
- package/dist/__tests__/utils/errors.test.d.ts.map +1 -0
- package/dist/__tests__/utils/errors.test.js +136 -0
- package/dist/__tests__/utils/errors.test.js.map +1 -0
- package/dist/__tests__/utils/type-guards.test.d.ts +2 -0
- package/dist/__tests__/utils/type-guards.test.d.ts.map +1 -0
- package/dist/__tests__/utils/type-guards.test.js +80 -0
- package/dist/__tests__/utils/type-guards.test.js.map +1 -0
- package/dist/__tests__/worktree/worktree-manager.test.d.ts +2 -0
- package/dist/__tests__/worktree/worktree-manager.test.d.ts.map +1 -0
- package/dist/__tests__/worktree/worktree-manager.test.js +403 -0
- package/dist/__tests__/worktree/worktree-manager.test.js.map +1 -0
- package/dist/config.d.ts +122 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +508 -0
- package/dist/config.js.map +1 -0
- package/dist/dashboard/beads.d.ts +35 -0
- package/dist/dashboard/beads.d.ts.map +1 -0
- package/dist/dashboard/beads.js +102 -0
- package/dist/dashboard/beads.js.map +1 -0
- package/dist/dashboard/events.d.ts +46 -0
- package/dist/dashboard/events.d.ts.map +1 -0
- package/dist/dashboard/events.js +141 -0
- package/dist/dashboard/events.js.map +1 -0
- package/dist/dashboard/index.d.ts +69 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +93 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/routes.d.ts +6 -0
- package/dist/dashboard/routes.d.ts.map +1 -0
- package/dist/dashboard/routes.js +245 -0
- package/dist/dashboard/routes.js.map +1 -0
- package/dist/dashboard/server.d.ts +27 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +72 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/dashboard/state.d.ts +125 -0
- package/dist/dashboard/state.d.ts.map +1 -0
- package/dist/dashboard/state.js +264 -0
- package/dist/dashboard/state.js.map +1 -0
- package/dist/dashboard/ui.d.ts +6 -0
- package/dist/dashboard/ui.d.ts.map +1 -0
- package/dist/dashboard/ui.js +1421 -0
- package/dist/dashboard/ui.js.map +1 -0
- package/dist/embeddings/index.d.ts +20 -2
- package/dist/embeddings/index.d.ts.map +1 -1
- package/dist/embeddings/index.js +49 -6
- package/dist/embeddings/index.js.map +1 -1
- package/dist/embeddings/jina.d.ts +9 -0
- package/dist/embeddings/jina.d.ts.map +1 -1
- package/dist/embeddings/jina.js +42 -2
- package/dist/embeddings/jina.js.map +1 -1
- package/dist/embeddings/ollama.d.ts +2 -0
- package/dist/embeddings/ollama.d.ts.map +1 -1
- package/dist/embeddings/ollama.js +21 -5
- package/dist/embeddings/ollama.js.map +1 -1
- package/dist/embeddings/rate-limiter.d.ts +75 -0
- package/dist/embeddings/rate-limiter.d.ts.map +1 -0
- package/dist/embeddings/rate-limiter.js +145 -0
- package/dist/embeddings/rate-limiter.js.map +1 -0
- package/dist/embeddings/retry.d.ts +14 -0
- package/dist/embeddings/retry.d.ts.map +1 -0
- package/dist/embeddings/retry.js +89 -0
- package/dist/embeddings/retry.js.map +1 -0
- package/dist/embeddings/types.d.ts +56 -2
- package/dist/embeddings/types.d.ts.map +1 -1
- package/dist/embeddings/types.js +16 -0
- package/dist/embeddings/types.js.map +1 -1
- package/dist/index.js +1871 -44
- package/dist/index.js.map +1 -1
- package/dist/memory/index.d.ts +63 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +168 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/search/ast-chunker.d.ts +34 -0
- package/dist/search/ast-chunker.d.ts.map +1 -0
- package/dist/search/ast-chunker.js +261 -0
- package/dist/search/ast-chunker.js.map +1 -0
- package/dist/search/clustering.d.ts +77 -0
- package/dist/search/clustering.d.ts.map +1 -0
- package/dist/search/clustering.js +455 -0
- package/dist/search/clustering.js.map +1 -0
- package/dist/search/indexer.d.ts +239 -3
- package/dist/search/indexer.d.ts.map +1 -1
- package/dist/search/indexer.js +941 -45
- package/dist/search/indexer.js.map +1 -1
- package/dist/search/tree-sitter-chunker.d.ts +69 -0
- package/dist/search/tree-sitter-chunker.d.ts.map +1 -0
- package/dist/search/tree-sitter-chunker.js +436 -0
- package/dist/search/tree-sitter-chunker.js.map +1 -0
- package/dist/symbols/index.d.ts +14 -0
- package/dist/symbols/index.d.ts.map +1 -0
- package/dist/symbols/index.js +19 -0
- package/dist/symbols/index.js.map +1 -0
- package/dist/symbols/name-path.d.ts +113 -0
- package/dist/symbols/name-path.d.ts.map +1 -0
- package/dist/symbols/name-path.js +194 -0
- package/dist/symbols/name-path.js.map +1 -0
- package/dist/symbols/pattern-search.d.ts +14 -0
- package/dist/symbols/pattern-search.d.ts.map +1 -0
- package/dist/symbols/pattern-search.js +224 -0
- package/dist/symbols/pattern-search.js.map +1 -0
- package/dist/symbols/reference-finder.d.ts +38 -0
- package/dist/symbols/reference-finder.d.ts.map +1 -0
- package/dist/symbols/reference-finder.js +376 -0
- package/dist/symbols/reference-finder.js.map +1 -0
- package/dist/symbols/symbol-editor.d.ts +81 -0
- package/dist/symbols/symbol-editor.d.ts.map +1 -0
- package/dist/symbols/symbol-editor.js +257 -0
- package/dist/symbols/symbol-editor.js.map +1 -0
- package/dist/symbols/symbol-extractor.d.ts +49 -0
- package/dist/symbols/symbol-extractor.d.ts.map +1 -0
- package/dist/symbols/symbol-extractor.js +593 -0
- package/dist/symbols/symbol-extractor.js.map +1 -0
- package/dist/symbols/symbol-renamer.d.ts +81 -0
- package/dist/symbols/symbol-renamer.d.ts.map +1 -0
- package/dist/symbols/symbol-renamer.js +204 -0
- package/dist/symbols/symbol-renamer.js.map +1 -0
- package/dist/symbols/types.d.ts +234 -0
- package/dist/symbols/types.d.ts.map +1 -0
- package/dist/symbols/types.js +106 -0
- package/dist/symbols/types.js.map +1 -0
- package/dist/utils/concurrency.d.ts +32 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +57 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +91 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/type-guards.d.ts +17 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +25 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/worktree/index.d.ts +6 -0
- package/dist/worktree/index.d.ts.map +1 -0
- package/dist/worktree/index.js +6 -0
- package/dist/worktree/index.js.map +1 -0
- package/dist/worktree/types.d.ts +101 -0
- package/dist/worktree/types.d.ts.map +1 -0
- package/dist/worktree/types.js +6 -0
- package/dist/worktree/types.js.map +1 -0
- package/dist/worktree/worktree-manager.d.ts +80 -0
- package/dist/worktree/worktree-manager.d.ts.map +1 -0
- package/dist/worktree/worktree-manager.js +407 -0
- package/dist/worktree/worktree-manager.js.map +1 -0
- package/package.json +39 -5
- package/scripts/postinstall.js +48 -0
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference finder for locating all usages of a symbol.
|
|
3
|
+
* Uses Tree-sitter to find identifier references across the codebase.
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'fs/promises';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { glob } from 'glob';
|
|
8
|
+
import * as ts from 'typescript';
|
|
9
|
+
import { SymbolKind } from './types.js';
|
|
10
|
+
import { SymbolExtractor } from './symbol-extractor.js';
|
|
11
|
+
import { getSymbolName, parseNamePath, matchNamePath } from './name-path.js';
|
|
12
|
+
let parserModule = null;
|
|
13
|
+
const loadParserModule = async () => {
|
|
14
|
+
if (!parserModule) {
|
|
15
|
+
const mod = await import('web-tree-sitter');
|
|
16
|
+
parserModule = {
|
|
17
|
+
Parser: mod.Parser,
|
|
18
|
+
Language: mod.Language,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return parserModule;
|
|
22
|
+
};
|
|
23
|
+
const LANGUAGE_CONFIGS = {
|
|
24
|
+
python: {
|
|
25
|
+
wasmFile: 'tree-sitter-python.wasm',
|
|
26
|
+
extensions: ['.py', '.pyi'],
|
|
27
|
+
identifierTypes: ['identifier'],
|
|
28
|
+
},
|
|
29
|
+
go: {
|
|
30
|
+
wasmFile: 'tree-sitter-go.wasm',
|
|
31
|
+
extensions: ['.go'],
|
|
32
|
+
identifierTypes: ['identifier', 'type_identifier', 'field_identifier'],
|
|
33
|
+
},
|
|
34
|
+
rust: {
|
|
35
|
+
wasmFile: 'tree-sitter-rust.wasm',
|
|
36
|
+
extensions: ['.rs'],
|
|
37
|
+
identifierTypes: ['identifier', 'type_identifier', 'field_identifier'],
|
|
38
|
+
},
|
|
39
|
+
java: {
|
|
40
|
+
wasmFile: 'tree-sitter-java.wasm',
|
|
41
|
+
extensions: ['.java'],
|
|
42
|
+
identifierTypes: ['identifier', 'type_identifier'],
|
|
43
|
+
},
|
|
44
|
+
ruby: {
|
|
45
|
+
wasmFile: 'tree-sitter-ruby.wasm',
|
|
46
|
+
extensions: ['.rb'],
|
|
47
|
+
identifierTypes: ['identifier', 'constant'],
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Default patterns for files to exclude when searching
|
|
52
|
+
*/
|
|
53
|
+
const DEFAULT_EXCLUDE_PATTERNS = [
|
|
54
|
+
'node_modules/**',
|
|
55
|
+
'.git/**',
|
|
56
|
+
'dist/**',
|
|
57
|
+
'build/**',
|
|
58
|
+
'coverage/**',
|
|
59
|
+
'__pycache__/**',
|
|
60
|
+
'.next/**',
|
|
61
|
+
'.cache/**',
|
|
62
|
+
];
|
|
63
|
+
/**
|
|
64
|
+
* Find references to a symbol across the codebase.
|
|
65
|
+
*/
|
|
66
|
+
export class ReferenceFinder {
|
|
67
|
+
static parser = null;
|
|
68
|
+
static loadedLanguages = new Map();
|
|
69
|
+
static initPromise = null;
|
|
70
|
+
static wasmBasePath = null;
|
|
71
|
+
projectPath;
|
|
72
|
+
symbolExtractor;
|
|
73
|
+
constructor(projectPath) {
|
|
74
|
+
this.projectPath = projectPath;
|
|
75
|
+
this.symbolExtractor = new SymbolExtractor(projectPath);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Initialize the tree-sitter parser.
|
|
79
|
+
*/
|
|
80
|
+
static async initialize() {
|
|
81
|
+
if (this.initPromise) {
|
|
82
|
+
return this.initPromise;
|
|
83
|
+
}
|
|
84
|
+
this.initPromise = (async () => {
|
|
85
|
+
this.wasmBasePath = await this.findWasmBasePath();
|
|
86
|
+
const module = await loadParserModule();
|
|
87
|
+
const webTreeSitterWasm = path.join(process.cwd(), 'node_modules', 'web-tree-sitter', 'web-tree-sitter.wasm');
|
|
88
|
+
await module.Parser.init({
|
|
89
|
+
locateFile: () => webTreeSitterWasm,
|
|
90
|
+
});
|
|
91
|
+
this.parser = new module.Parser();
|
|
92
|
+
})();
|
|
93
|
+
return this.initPromise;
|
|
94
|
+
}
|
|
95
|
+
static async findWasmBasePath() {
|
|
96
|
+
const { fileURLToPath } = await import('url');
|
|
97
|
+
const possiblePaths = [
|
|
98
|
+
path.join(process.cwd(), 'node_modules', '@vscode', 'tree-sitter-wasm', 'wasm'),
|
|
99
|
+
path.join(fileURLToPath(import.meta.url), '..', '..', '..', 'node_modules', '@vscode', 'tree-sitter-wasm', 'wasm'),
|
|
100
|
+
];
|
|
101
|
+
for (const p of possiblePaths) {
|
|
102
|
+
try {
|
|
103
|
+
await fs.access(p);
|
|
104
|
+
return p;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Try next
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
throw new Error('Could not find @vscode/tree-sitter-wasm package.');
|
|
111
|
+
}
|
|
112
|
+
static getLanguageConfig(filepath) {
|
|
113
|
+
const ext = path.extname(filepath).toLowerCase();
|
|
114
|
+
for (const [, config] of Object.entries(LANGUAGE_CONFIGS)) {
|
|
115
|
+
if (config.extensions.includes(ext)) {
|
|
116
|
+
return config;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
static async loadLanguage(config) {
|
|
122
|
+
const cached = this.loadedLanguages.get(config.wasmFile);
|
|
123
|
+
if (cached) {
|
|
124
|
+
return cached;
|
|
125
|
+
}
|
|
126
|
+
if (!this.wasmBasePath) {
|
|
127
|
+
throw new Error('ReferenceFinder not initialized.');
|
|
128
|
+
}
|
|
129
|
+
const module = await loadParserModule();
|
|
130
|
+
const wasmPath = path.join(this.wasmBasePath, config.wasmFile);
|
|
131
|
+
const wasmBytes = await fs.readFile(wasmPath);
|
|
132
|
+
const language = await module.Language.load(wasmBytes);
|
|
133
|
+
this.loadedLanguages.set(config.wasmFile, language);
|
|
134
|
+
return language;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Find all references to a symbol.
|
|
138
|
+
*/
|
|
139
|
+
async findReferences(options) {
|
|
140
|
+
const { namePath, relativePath, includeInfo = false, includeKinds, excludeKinds } = options;
|
|
141
|
+
// First, find the target symbol
|
|
142
|
+
const fullPath = path.join(this.projectPath, relativePath);
|
|
143
|
+
const symbols = await this.symbolExtractor.extractSymbols(fullPath, false);
|
|
144
|
+
const pattern = parseNamePath(namePath);
|
|
145
|
+
const targetSymbol = this.findSymbolByPattern(symbols, pattern);
|
|
146
|
+
if (!targetSymbol) {
|
|
147
|
+
throw new Error(`Symbol not found: ${namePath} in ${relativePath}`);
|
|
148
|
+
}
|
|
149
|
+
const symbolName = getSymbolName(targetSymbol.namePath);
|
|
150
|
+
// Find all files to search
|
|
151
|
+
const files = await this.findFilesToSearch();
|
|
152
|
+
const references = [];
|
|
153
|
+
for (const file of files) {
|
|
154
|
+
const fileRefs = await this.findReferencesInFile(file, symbolName, targetSymbol, includeInfo, includeKinds, excludeKinds);
|
|
155
|
+
references.push(...fileRefs);
|
|
156
|
+
}
|
|
157
|
+
return references;
|
|
158
|
+
}
|
|
159
|
+
findSymbolByPattern(symbols, pattern) {
|
|
160
|
+
for (const symbol of symbols) {
|
|
161
|
+
if (matchNamePath(symbol.namePath, pattern)) {
|
|
162
|
+
return symbol;
|
|
163
|
+
}
|
|
164
|
+
if (symbol.children) {
|
|
165
|
+
const found = this.findSymbolByPattern(symbol.children, pattern);
|
|
166
|
+
if (found) {
|
|
167
|
+
return found;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
async findFilesToSearch() {
|
|
174
|
+
const codeExtensions = [
|
|
175
|
+
'.ts',
|
|
176
|
+
'.tsx',
|
|
177
|
+
'.js',
|
|
178
|
+
'.jsx',
|
|
179
|
+
'.mts',
|
|
180
|
+
'.cts',
|
|
181
|
+
'.mjs',
|
|
182
|
+
'.cjs',
|
|
183
|
+
'.py',
|
|
184
|
+
'.pyi',
|
|
185
|
+
'.go',
|
|
186
|
+
'.rs',
|
|
187
|
+
'.java',
|
|
188
|
+
'.kt',
|
|
189
|
+
'.rb',
|
|
190
|
+
];
|
|
191
|
+
const patterns = codeExtensions.map((ext) => `**/*${ext}`);
|
|
192
|
+
const files = [];
|
|
193
|
+
for (const pattern of patterns) {
|
|
194
|
+
const matches = await glob(pattern, {
|
|
195
|
+
cwd: this.projectPath,
|
|
196
|
+
ignore: DEFAULT_EXCLUDE_PATTERNS,
|
|
197
|
+
absolute: true,
|
|
198
|
+
});
|
|
199
|
+
files.push(...matches);
|
|
200
|
+
}
|
|
201
|
+
return [...new Set(files)];
|
|
202
|
+
}
|
|
203
|
+
async findReferencesInFile(filepath, symbolName, targetSymbol, includeInfo, includeKinds, excludeKinds) {
|
|
204
|
+
const ext = path.extname(filepath).toLowerCase();
|
|
205
|
+
const relativePath = path.relative(this.projectPath, filepath);
|
|
206
|
+
const references = [];
|
|
207
|
+
try {
|
|
208
|
+
const content = await fs.readFile(filepath, 'utf-8');
|
|
209
|
+
const lines = content.split('\n');
|
|
210
|
+
// Skip the definition file for non-exported symbols
|
|
211
|
+
if (path.relative(this.projectPath, filepath) === targetSymbol.location.filepath) {
|
|
212
|
+
// Still find references within the same file, but skip the definition itself
|
|
213
|
+
}
|
|
214
|
+
// Use TypeScript for TS/JS files
|
|
215
|
+
if (['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.mjs', '.cjs'].includes(ext)) {
|
|
216
|
+
const refs = this.findReferencesWithTypeScript(content, filepath, relativePath, lines, symbolName, targetSymbol);
|
|
217
|
+
references.push(...refs);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
// Use tree-sitter for other languages
|
|
221
|
+
const config = ReferenceFinder.getLanguageConfig(filepath);
|
|
222
|
+
if (config) {
|
|
223
|
+
const refs = await this.findReferencesWithTreeSitter(content, filepath, relativePath, lines, symbolName, targetSymbol, config);
|
|
224
|
+
references.push(...refs);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Filter by kinds
|
|
228
|
+
return references.filter((ref) => {
|
|
229
|
+
if (excludeKinds && excludeKinds.includes(ref.referencingSymbol.kind)) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
if (includeKinds && !includeKinds.includes(ref.referencingSymbol.kind)) {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
return true;
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
// Skip files that can't be read
|
|
240
|
+
return [];
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
findReferencesWithTypeScript(content, _filepath, relativePath, lines, symbolName, targetSymbol) {
|
|
244
|
+
const references = [];
|
|
245
|
+
const ext = path.extname(relativePath).toLowerCase();
|
|
246
|
+
let scriptKind = ts.ScriptKind.TS;
|
|
247
|
+
if (ext === '.tsx' || ext === '.jsx') {
|
|
248
|
+
scriptKind = ts.ScriptKind.TSX;
|
|
249
|
+
}
|
|
250
|
+
else if (['.js', '.mjs', '.cjs'].includes(ext)) {
|
|
251
|
+
scriptKind = ts.ScriptKind.JS;
|
|
252
|
+
}
|
|
253
|
+
const sourceFile = ts.createSourceFile(relativePath, content, ts.ScriptTarget.Latest, true, scriptKind);
|
|
254
|
+
const findIdentifiers = (node) => {
|
|
255
|
+
if (ts.isIdentifier(node) && node.text === symbolName) {
|
|
256
|
+
const line = sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1;
|
|
257
|
+
const column = sourceFile.getLineAndCharacterOfPosition(node.getStart()).character;
|
|
258
|
+
// Skip the definition itself
|
|
259
|
+
if (relativePath === targetSymbol.location.filepath &&
|
|
260
|
+
line === targetSymbol.location.startLine) {
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
// Get context (surrounding lines)
|
|
264
|
+
const startLine = Math.max(0, line - 2);
|
|
265
|
+
const endLine = Math.min(lines.length, line + 1);
|
|
266
|
+
const codeSnippet = lines.slice(startLine, endLine).join('\n');
|
|
267
|
+
// Create a minimal referencing symbol
|
|
268
|
+
const referencingSymbol = {
|
|
269
|
+
name: symbolName,
|
|
270
|
+
namePath: `/${relativePath}:${line}`,
|
|
271
|
+
kind: SymbolKind.Variable, // Default - we don't have full context here
|
|
272
|
+
location: {
|
|
273
|
+
filepath: relativePath,
|
|
274
|
+
startLine: line,
|
|
275
|
+
endLine: line,
|
|
276
|
+
startColumn: column,
|
|
277
|
+
endColumn: column + symbolName.length,
|
|
278
|
+
},
|
|
279
|
+
depth: 0,
|
|
280
|
+
};
|
|
281
|
+
references.push({
|
|
282
|
+
referencingSymbol,
|
|
283
|
+
codeSnippet,
|
|
284
|
+
line,
|
|
285
|
+
column,
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
ts.forEachChild(node, findIdentifiers);
|
|
289
|
+
};
|
|
290
|
+
findIdentifiers(sourceFile);
|
|
291
|
+
return references;
|
|
292
|
+
}
|
|
293
|
+
async findReferencesWithTreeSitter(content, _filepath, relativePath, lines, symbolName, targetSymbol, config) {
|
|
294
|
+
await ReferenceFinder.initialize();
|
|
295
|
+
const language = await ReferenceFinder.loadLanguage(config);
|
|
296
|
+
const parser = ReferenceFinder.parser;
|
|
297
|
+
if (!parser) {
|
|
298
|
+
return [];
|
|
299
|
+
}
|
|
300
|
+
parser.setLanguage(language);
|
|
301
|
+
const tree = parser.parse(content);
|
|
302
|
+
if (!tree) {
|
|
303
|
+
return [];
|
|
304
|
+
}
|
|
305
|
+
const references = [];
|
|
306
|
+
const findIdentifiers = (node) => {
|
|
307
|
+
if (config.identifierTypes.includes(node.type) && node.text === symbolName) {
|
|
308
|
+
const line = node.startPosition.row + 1;
|
|
309
|
+
const column = node.startPosition.column;
|
|
310
|
+
// Skip the definition itself
|
|
311
|
+
if (relativePath === targetSymbol.location.filepath &&
|
|
312
|
+
line >= targetSymbol.location.startLine &&
|
|
313
|
+
line <= targetSymbol.location.endLine) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
// Get context (surrounding lines)
|
|
317
|
+
const startLine = Math.max(0, line - 2);
|
|
318
|
+
const endLine = Math.min(lines.length, line + 1);
|
|
319
|
+
const codeSnippet = lines.slice(startLine, endLine).join('\n');
|
|
320
|
+
const referencingSymbol = {
|
|
321
|
+
name: symbolName,
|
|
322
|
+
namePath: `/${relativePath}:${line}`,
|
|
323
|
+
kind: SymbolKind.Variable,
|
|
324
|
+
location: {
|
|
325
|
+
filepath: relativePath,
|
|
326
|
+
startLine: line,
|
|
327
|
+
endLine: line,
|
|
328
|
+
startColumn: column,
|
|
329
|
+
endColumn: column + symbolName.length,
|
|
330
|
+
},
|
|
331
|
+
depth: 0,
|
|
332
|
+
};
|
|
333
|
+
references.push({
|
|
334
|
+
referencingSymbol,
|
|
335
|
+
codeSnippet,
|
|
336
|
+
line,
|
|
337
|
+
column,
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
for (const child of node.children) {
|
|
341
|
+
findIdentifiers(child);
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
findIdentifiers(tree.rootNode);
|
|
345
|
+
return references;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Format reference results for display.
|
|
350
|
+
*/
|
|
351
|
+
export function formatReferencesResult(references) {
|
|
352
|
+
if (references.length === 0) {
|
|
353
|
+
return 'No references found.';
|
|
354
|
+
}
|
|
355
|
+
const parts = [];
|
|
356
|
+
parts.push(`Found ${references.length} reference${references.length === 1 ? '' : 's'}:\n`);
|
|
357
|
+
// Group by file
|
|
358
|
+
const byFile = new Map();
|
|
359
|
+
for (const ref of references) {
|
|
360
|
+
const file = ref.referencingSymbol.location.filepath;
|
|
361
|
+
const fileRefs = byFile.get(file) || [];
|
|
362
|
+
fileRefs.push(ref);
|
|
363
|
+
byFile.set(file, fileRefs);
|
|
364
|
+
}
|
|
365
|
+
for (const [filepath, fileRefs] of byFile) {
|
|
366
|
+
parts.push(`\n## ${filepath}\n`);
|
|
367
|
+
for (const ref of fileRefs) {
|
|
368
|
+
parts.push(`Line ${ref.line}:`);
|
|
369
|
+
parts.push('```');
|
|
370
|
+
parts.push(ref.codeSnippet);
|
|
371
|
+
parts.push('```\n');
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return parts.join('\n');
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=reference-finder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-finder.js","sourceRoot":"","sources":["../../src/symbols/reference-finder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Symbol editor for modifying symbol definitions in source files.
|
|
3
|
+
* Provides atomic operations to replace, insert before, or insert after symbols.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Result from a symbol edit operation.
|
|
7
|
+
*/
|
|
8
|
+
export interface EditResult {
|
|
9
|
+
/** Whether the edit was successful */
|
|
10
|
+
success: boolean;
|
|
11
|
+
/** Updated file path */
|
|
12
|
+
filepath: string;
|
|
13
|
+
/** Symbol that was edited */
|
|
14
|
+
symbolName: string;
|
|
15
|
+
/** New line range of the edited content */
|
|
16
|
+
newRange?: {
|
|
17
|
+
startLine: number;
|
|
18
|
+
endLine: number;
|
|
19
|
+
};
|
|
20
|
+
/** Error message if failed */
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Options for replace_symbol_body.
|
|
25
|
+
*/
|
|
26
|
+
export interface ReplaceSymbolOptions {
|
|
27
|
+
/** Name path of the symbol to replace */
|
|
28
|
+
namePath: string;
|
|
29
|
+
/** Relative path to the file containing the symbol */
|
|
30
|
+
relativePath: string;
|
|
31
|
+
/** The new body content for the symbol */
|
|
32
|
+
body: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Options for insert_before_symbol or insert_after_symbol.
|
|
36
|
+
*/
|
|
37
|
+
export interface InsertSymbolOptions {
|
|
38
|
+
/** Name path of the reference symbol */
|
|
39
|
+
namePath: string;
|
|
40
|
+
/** Relative path to the file containing the symbol */
|
|
41
|
+
relativePath: string;
|
|
42
|
+
/** The content to insert */
|
|
43
|
+
body: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Symbol editor for modifying source files.
|
|
47
|
+
*/
|
|
48
|
+
export declare class SymbolEditor {
|
|
49
|
+
private projectPath;
|
|
50
|
+
private symbolExtractor;
|
|
51
|
+
constructor(projectPath: string);
|
|
52
|
+
/**
|
|
53
|
+
* Replace a symbol's body with new content.
|
|
54
|
+
*/
|
|
55
|
+
replaceSymbolBody(options: ReplaceSymbolOptions): Promise<EditResult>;
|
|
56
|
+
/**
|
|
57
|
+
* Insert content before a symbol.
|
|
58
|
+
*/
|
|
59
|
+
insertBeforeSymbol(options: InsertSymbolOptions): Promise<EditResult>;
|
|
60
|
+
/**
|
|
61
|
+
* Insert content after a symbol.
|
|
62
|
+
*/
|
|
63
|
+
insertAfterSymbol(options: InsertSymbolOptions): Promise<EditResult>;
|
|
64
|
+
/**
|
|
65
|
+
* Find a symbol by name path pattern.
|
|
66
|
+
*/
|
|
67
|
+
private findSymbolByPattern;
|
|
68
|
+
/**
|
|
69
|
+
* Detect the indentation used on a line.
|
|
70
|
+
*/
|
|
71
|
+
private detectIndentation;
|
|
72
|
+
/**
|
|
73
|
+
* Apply indentation to a block of code.
|
|
74
|
+
*/
|
|
75
|
+
private applyIndentation;
|
|
76
|
+
/**
|
|
77
|
+
* Write a file atomically (write to temp file, then rename).
|
|
78
|
+
*/
|
|
79
|
+
private atomicWrite;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=symbol-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbol-editor.d.ts","sourceRoot":"","sources":["../../src/symbols/symbol-editor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAkB;gBAE7B,WAAW,EAAE,MAAM;IAK/B;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;IA2D3E;;OAEG;IACG,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAiE3E;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAiE1E;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;YACW,WAAW;CAe1B"}
|