@jafreck/lore 0.1.0 → 0.2.1
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 +345 -196
- package/dist/cli.js +133 -12
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/indexer/db.d.ts.map +1 -1
- package/dist/indexer/db.js +96 -2
- package/dist/indexer/db.js.map +1 -1
- package/dist/indexer/docs.d.ts +42 -0
- package/dist/indexer/docs.d.ts.map +1 -0
- package/dist/indexer/docs.js +214 -0
- package/dist/indexer/docs.js.map +1 -0
- package/dist/indexer/embedder.d.ts +7 -0
- package/dist/indexer/embedder.d.ts.map +1 -1
- package/dist/indexer/embedder.js +10 -0
- package/dist/indexer/embedder.js.map +1 -1
- package/dist/indexer/extractors/types.d.ts +22 -0
- package/dist/indexer/extractors/types.d.ts.map +1 -1
- package/dist/indexer/extractors/types.js +12 -0
- package/dist/indexer/extractors/types.js.map +1 -1
- package/dist/indexer/extractors/typescript.d.ts +1 -1
- package/dist/indexer/extractors/typescript.d.ts.map +1 -1
- package/dist/indexer/extractors/typescript.js +38 -8
- package/dist/indexer/extractors/typescript.js.map +1 -1
- package/dist/indexer/git-hooks.d.ts +1 -0
- package/dist/indexer/git-hooks.d.ts.map +1 -1
- package/dist/indexer/git-hooks.js +3 -2
- package/dist/indexer/git-hooks.js.map +1 -1
- package/dist/indexer/index.d.ts +32 -7
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +427 -15
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/lsp/client.d.ts +61 -0
- package/dist/indexer/lsp/client.d.ts.map +1 -0
- package/dist/indexer/lsp/client.js +217 -0
- package/dist/indexer/lsp/client.js.map +1 -0
- package/dist/indexer/lsp/config.d.ts +16 -0
- package/dist/indexer/lsp/config.d.ts.map +1 -0
- package/dist/indexer/lsp/config.js +78 -0
- package/dist/indexer/lsp/config.js.map +1 -0
- package/dist/indexer/lsp/enrichment.d.ts +55 -0
- package/dist/indexer/lsp/enrichment.d.ts.map +1 -0
- package/dist/indexer/lsp/enrichment.js +211 -0
- package/dist/indexer/lsp/enrichment.js.map +1 -0
- package/dist/indexer/lsp/registry.d.ts +19 -0
- package/dist/indexer/lsp/registry.d.ts.map +1 -0
- package/dist/indexer/lsp/registry.js +118 -0
- package/dist/indexer/lsp/registry.js.map +1 -0
- package/dist/indexer/parser.d.ts +7 -0
- package/dist/indexer/parser.d.ts.map +1 -1
- package/dist/indexer/parser.js +3 -1
- package/dist/indexer/parser.js.map +1 -1
- package/dist/indexer/poller.d.ts +7 -0
- package/dist/indexer/poller.d.ts.map +1 -1
- package/dist/indexer/poller.js +6 -0
- package/dist/indexer/poller.js.map +1 -1
- package/dist/indexer/walker.d.ts +22 -0
- package/dist/indexer/walker.d.ts.map +1 -1
- package/dist/indexer/walker.js +15 -0
- package/dist/indexer/walker.js.map +1 -1
- package/dist/indexer/watcher.d.ts +7 -0
- package/dist/indexer/watcher.d.ts.map +1 -1
- package/dist/indexer/watcher.js +6 -0
- package/dist/indexer/watcher.js.map +1 -1
- package/dist/kb-server/db.d.ts +82 -0
- package/dist/kb-server/db.d.ts.map +1 -1
- package/dist/kb-server/db.js +239 -0
- package/dist/kb-server/db.js.map +1 -1
- package/dist/kb-server/server.d.ts +11 -3
- package/dist/kb-server/server.d.ts.map +1 -1
- package/dist/kb-server/server.js +28 -6
- package/dist/kb-server/server.js.map +1 -1
- package/dist/kb-server/tools/architecture.d.ts +7 -0
- package/dist/kb-server/tools/architecture.d.ts.map +1 -1
- package/dist/kb-server/tools/architecture.js +35 -0
- package/dist/kb-server/tools/architecture.js.map +1 -1
- package/dist/kb-server/tools/docs.d.ts +78 -0
- package/dist/kb-server/tools/docs.d.ts.map +1 -0
- package/dist/kb-server/tools/docs.js +136 -0
- package/dist/kb-server/tools/docs.js.map +1 -0
- package/dist/kb-server/tools/lookup.d.ts.map +1 -1
- package/dist/kb-server/tools/lookup.js +5 -4
- package/dist/kb-server/tools/lookup.js.map +1 -1
- package/dist/kb-server/tools/notes.d.ts +1 -1
- package/dist/kb-server/tools/notes.d.ts.map +1 -1
- package/dist/kb-server/tools/notes.js +35 -0
- package/dist/kb-server/tools/notes.js.map +1 -1
- package/dist/kb-server/tools/search.d.ts +54 -11
- package/dist/kb-server/tools/search.d.ts.map +1 -1
- package/dist/kb-server/tools/search.js +138 -34
- package/dist/kb-server/tools/search.js.map +1 -1
- package/package.json +16 -7
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
2
|
+
import { LspClient } from './client.js';
|
|
3
|
+
import { resolveLspServerRegistry } from './registry.js';
|
|
4
|
+
const defaultClientFactory = (server, options) => new LspClient(server, options);
|
|
5
|
+
export class LspEnrichmentCoordinator {
|
|
6
|
+
settings;
|
|
7
|
+
rootUri;
|
|
8
|
+
resolvedServers;
|
|
9
|
+
clientFactory;
|
|
10
|
+
processEnv;
|
|
11
|
+
clients = new Map();
|
|
12
|
+
startedClients = new Set();
|
|
13
|
+
constructor(settings, rootDir, clientFactory = defaultClientFactory, processEnv = process.env) {
|
|
14
|
+
this.settings = settings;
|
|
15
|
+
this.rootUri = pathToFileURL(rootDir).toString();
|
|
16
|
+
this.clientFactory = clientFactory;
|
|
17
|
+
this.processEnv = processEnv;
|
|
18
|
+
this.resolvedServers = resolveLspServerRegistry(settings.servers, processEnv);
|
|
19
|
+
}
|
|
20
|
+
async start(languages) {
|
|
21
|
+
if (!this.settings.enabled)
|
|
22
|
+
return;
|
|
23
|
+
const uniqueLanguages = new Set(languages);
|
|
24
|
+
for (const language of uniqueLanguages) {
|
|
25
|
+
await this.getClient(language);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async dispose() {
|
|
29
|
+
const closeTasks = [...this.startedClients].map((client) => client.close());
|
|
30
|
+
await Promise.allSettled(closeTasks);
|
|
31
|
+
this.startedClients.clear();
|
|
32
|
+
this.clients.clear();
|
|
33
|
+
}
|
|
34
|
+
async enrich(request) {
|
|
35
|
+
const empty = request.targets.map(() => null);
|
|
36
|
+
if (!this.settings.enabled || request.targets.length === 0) {
|
|
37
|
+
return empty;
|
|
38
|
+
}
|
|
39
|
+
const client = await this.getClient(request.language);
|
|
40
|
+
if (!client) {
|
|
41
|
+
return empty;
|
|
42
|
+
}
|
|
43
|
+
const uri = pathToFileURL(request.filePath).toString();
|
|
44
|
+
try {
|
|
45
|
+
client.didOpen({
|
|
46
|
+
uri,
|
|
47
|
+
languageId: request.language,
|
|
48
|
+
version: 1,
|
|
49
|
+
text: request.source,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return empty;
|
|
54
|
+
}
|
|
55
|
+
const document = { uri };
|
|
56
|
+
try {
|
|
57
|
+
const results = [];
|
|
58
|
+
for (const target of request.targets) {
|
|
59
|
+
const position = {
|
|
60
|
+
line: Math.max(0, target.line),
|
|
61
|
+
character: Math.max(0, target.character),
|
|
62
|
+
};
|
|
63
|
+
let hoverResult;
|
|
64
|
+
let definitionResult;
|
|
65
|
+
try {
|
|
66
|
+
hoverResult = await client.hover(document, position);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
hoverResult = undefined;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
definitionResult = await client.definition(document, position);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
definitionResult = undefined;
|
|
76
|
+
}
|
|
77
|
+
const metadata = toResolvedTypeMetadata(hoverResult, definitionResult);
|
|
78
|
+
results.push(hasResolvedTypeMetadata(metadata) ? metadata : null);
|
|
79
|
+
}
|
|
80
|
+
return results;
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
try {
|
|
84
|
+
client.didClose(document);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Ignore didClose transport failures so indexing can continue.
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async getClient(language) {
|
|
92
|
+
const existing = this.clients.get(language);
|
|
93
|
+
if (existing) {
|
|
94
|
+
return existing;
|
|
95
|
+
}
|
|
96
|
+
const server = this.resolvedServers[language];
|
|
97
|
+
if (!server || !server.available) {
|
|
98
|
+
this.clients.set(language, Promise.resolve(null));
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
const clientPromise = this.createAndStartClient(server).catch(() => null);
|
|
102
|
+
this.clients.set(language, clientPromise);
|
|
103
|
+
return clientPromise;
|
|
104
|
+
}
|
|
105
|
+
async createAndStartClient(server) {
|
|
106
|
+
const client = this.clientFactory({
|
|
107
|
+
command: server.command,
|
|
108
|
+
args: [...server.args],
|
|
109
|
+
}, {
|
|
110
|
+
rootUri: this.rootUri,
|
|
111
|
+
requestTimeoutMs: this.settings.requestTimeoutMs,
|
|
112
|
+
processEnv: this.processEnv,
|
|
113
|
+
});
|
|
114
|
+
await client.start();
|
|
115
|
+
this.startedClients.add(client);
|
|
116
|
+
return client;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export function hasResolvedTypeMetadata(metadata) {
|
|
120
|
+
return Boolean(metadata.resolvedTypeSignature
|
|
121
|
+
|| metadata.resolvedReturnType
|
|
122
|
+
|| metadata.definitionUri
|
|
123
|
+
|| metadata.definitionPath);
|
|
124
|
+
}
|
|
125
|
+
function toResolvedTypeMetadata(hoverResult, definitionResult) {
|
|
126
|
+
const resolvedTypeSignature = extractHoverText(hoverResult);
|
|
127
|
+
const resolvedReturnType = extractReturnType(resolvedTypeSignature);
|
|
128
|
+
const definitionUri = extractDefinitionUri(definitionResult);
|
|
129
|
+
return {
|
|
130
|
+
resolvedTypeSignature,
|
|
131
|
+
resolvedReturnType,
|
|
132
|
+
definitionUri,
|
|
133
|
+
definitionPath: definitionUriToPath(definitionUri),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function extractHoverText(hoverResult) {
|
|
137
|
+
if (!isRecord(hoverResult))
|
|
138
|
+
return null;
|
|
139
|
+
const contents = hoverResult.contents;
|
|
140
|
+
const collected = extractHoverContentValue(contents);
|
|
141
|
+
if (!collected)
|
|
142
|
+
return null;
|
|
143
|
+
const normalized = collected.replace(/```[a-z0-9_+-]*\n/giu, '').replace(/```/gu, '').trim();
|
|
144
|
+
return normalized.length > 0 ? normalized : null;
|
|
145
|
+
}
|
|
146
|
+
function extractHoverContentValue(contents) {
|
|
147
|
+
if (typeof contents === 'string') {
|
|
148
|
+
return contents;
|
|
149
|
+
}
|
|
150
|
+
if (Array.isArray(contents)) {
|
|
151
|
+
const entries = contents
|
|
152
|
+
.map((entry) => extractHoverContentValue(entry))
|
|
153
|
+
.filter((entry) => Boolean(entry && entry.trim().length > 0));
|
|
154
|
+
return entries.length > 0 ? entries.join('\n') : null;
|
|
155
|
+
}
|
|
156
|
+
if (isRecord(contents) && typeof contents.value === 'string') {
|
|
157
|
+
return contents.value;
|
|
158
|
+
}
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
function extractReturnType(signature) {
|
|
162
|
+
if (!signature)
|
|
163
|
+
return null;
|
|
164
|
+
const lines = signature.split('\n').map((line) => line.trim()).filter(Boolean);
|
|
165
|
+
if (lines.length === 0)
|
|
166
|
+
return null;
|
|
167
|
+
const firstLine = lines[0];
|
|
168
|
+
const functionStyle = firstLine.match(/\)\s*:\s*([^={]+)$/u);
|
|
169
|
+
if (functionStyle?.[1])
|
|
170
|
+
return functionStyle[1].trim();
|
|
171
|
+
const arrowStyle = firstLine.match(/->\s*([^={]+)$/u);
|
|
172
|
+
if (arrowStyle?.[1])
|
|
173
|
+
return arrowStyle[1].trim();
|
|
174
|
+
const colonStyle = firstLine.match(/:\s*([^={]+)$/u);
|
|
175
|
+
if (colonStyle?.[1])
|
|
176
|
+
return colonStyle[1].trim();
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
function extractDefinitionUri(definitionResult) {
|
|
180
|
+
if (!definitionResult)
|
|
181
|
+
return null;
|
|
182
|
+
if (Array.isArray(definitionResult)) {
|
|
183
|
+
for (const entry of definitionResult) {
|
|
184
|
+
const uri = extractDefinitionUri(entry);
|
|
185
|
+
if (uri)
|
|
186
|
+
return uri;
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
if (!isRecord(definitionResult))
|
|
191
|
+
return null;
|
|
192
|
+
if (typeof definitionResult.uri === 'string')
|
|
193
|
+
return definitionResult.uri;
|
|
194
|
+
if (typeof definitionResult.targetUri === 'string')
|
|
195
|
+
return definitionResult.targetUri;
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
function definitionUriToPath(uri) {
|
|
199
|
+
if (!uri || !uri.startsWith('file://'))
|
|
200
|
+
return null;
|
|
201
|
+
try {
|
|
202
|
+
return fileURLToPath(uri);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function isRecord(value) {
|
|
209
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=enrichment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrichment.js","sourceRoot":"","sources":["../../../src/indexer/lsp/enrichment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,SAAS,EAAkE,MAAM,aAAa,CAAC;AAExG,OAAO,EAAE,wBAAwB,EAAiC,MAAM,eAAe,CAAC;AAgCxF,MAAM,oBAAoB,GAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnG,MAAM,OAAO,wBAAwB;IAShB;IARF,OAAO,CAAS;IAChB,eAAe,CAA2C;IAC1D,aAAa,CAAmB;IAChC,UAAU,CAAoB;IAC9B,OAAO,GAAG,IAAI,GAAG,EAAyC,CAAC;IAC3D,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;IAE3D,YACmB,QAA8B,EAC/C,OAAe,EACf,gBAAkC,oBAAoB,EACtD,aAAgC,OAAO,CAAC,GAAG;QAH1B,aAAQ,GAAR,QAAQ,CAAsB;QAK/C,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,wBAAwB,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAA2B;QACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,OAAO;QACnC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5E,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAA6B;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,CAAC;gBACb,GAAG;gBACH,UAAU,EAAE,OAAO,CAAC,QAAQ;gBAC5B,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,OAAO,CAAC,MAAM;aACrB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAuC,EAAE,CAAC;YACvD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,MAAM,QAAQ,GAAG;oBACf,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;oBAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC;iBACzC,CAAC;gBACF,IAAI,WAAoB,CAAC;gBACzB,IAAI,gBAAyB,CAAC;gBAE9B,IAAI,CAAC;oBACH,WAAW,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACvD,CAAC;gBAAC,MAAM,CAAC;oBACP,WAAW,GAAG,SAAS,CAAC;gBAC1B,CAAC;gBAED,IAAI,CAAC;oBACH,gBAAgB,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACjE,CAAC;gBAAC,MAAM,CAAC;oBACP,gBAAgB,GAAG,SAAS,CAAC;gBAC/B,CAAC;gBAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;gBACvE,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,QAAgB;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC1C,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,MAAgC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAC/B;YACE,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;SACvB,EACD;YACE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB;YAChD,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CACF,CAAC;QACF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,QAA8B;IACpE,OAAO,OAAO,CACZ,QAAQ,CAAC,qBAAqB;WACzB,QAAQ,CAAC,kBAAkB;WAC3B,QAAQ,CAAC,aAAa;WACtB,QAAQ,CAAC,cAAc,CAC7B,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,WAAoB,EAAE,gBAAyB;IAC7E,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IAC7D,OAAO;QACL,qBAAqB;QACrB,kBAAkB;QAClB,aAAa;QACb,cAAc,EAAE,mBAAmB,CAAC,aAAa,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAoB;IAC5C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IACtC,MAAM,SAAS,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7F,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAiB;IACjD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,QAAQ;aACrB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;aAC/C,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACjF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7D,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAwB;IACjD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IAE5B,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC7D,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEvD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACtD,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACrD,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,gBAAyB;IACrD,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,OAAO,gBAAgB,CAAC,GAAG,KAAK,QAAQ;QAAE,OAAO,gBAAgB,CAAC,GAAG,CAAC;IAC1E,IAAI,OAAO,gBAAgB,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,gBAAgB,CAAC,SAAS,CAAC;IACtF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAkB;IAC7C,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface LspServerCommand {
|
|
2
|
+
command: string;
|
|
3
|
+
args: string[];
|
|
4
|
+
}
|
|
5
|
+
export interface ResolvedLspServerCommand extends LspServerCommand {
|
|
6
|
+
language: string;
|
|
7
|
+
available: boolean;
|
|
8
|
+
resolvedPath: string | null;
|
|
9
|
+
}
|
|
10
|
+
export type LspServerRegistry = Record<string, LspServerCommand>;
|
|
11
|
+
export type LspServerRegistryOverrides = Partial<Record<string, Partial<LspServerCommand>>>;
|
|
12
|
+
export declare const DEFAULT_LSP_SERVER_REGISTRY: LspServerRegistry;
|
|
13
|
+
export declare function getDefaultLspServerRegistry(): LspServerRegistry;
|
|
14
|
+
export declare function mergeLspServerRegistry(overrides?: LspServerRegistryOverrides): LspServerRegistry;
|
|
15
|
+
export declare function resolveExecutableOnPath(command: string, env?: NodeJS.ProcessEnv): string | null;
|
|
16
|
+
export declare function resolveLspServerRegistry(registry?: LspServerRegistry, env?: NodeJS.ProcessEnv): Record<string, ResolvedLspServerCommand>;
|
|
17
|
+
export declare function getMissingLanguageServerCommands(registry?: LspServerRegistry, env?: NodeJS.ProcessEnv): string[];
|
|
18
|
+
export declare function hasCompleteLanguageCoverage(registry?: LspServerRegistry): boolean;
|
|
19
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/indexer/lsp/registry.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AACjE,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE5F,eAAO,MAAM,2BAA2B,EAAE,iBA4BzC,CAAC;AAEF,wBAAgB,2BAA2B,IAAI,iBAAiB,CAE/D;AAED,wBAAgB,sBAAsB,CAAC,SAAS,GAAE,0BAA+B,GAAG,iBAAiB,CAgBpG;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,IAAI,CAyB5G;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,GAAE,iBAA+C,EACzD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAa1C;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,GAAE,iBAA+C,EACzD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,EAAE,CAKV;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,GAAE,iBAA+C,GAAG,OAAO,CAG9G"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { accessSync, constants } from 'node:fs';
|
|
2
|
+
import { delimiter, isAbsolute, join } from 'node:path';
|
|
3
|
+
import { SUPPORTED_PARSER_LANGUAGES } from '../parser.js';
|
|
4
|
+
export const DEFAULT_LSP_SERVER_REGISTRY = {
|
|
5
|
+
c: { command: 'clangd', args: [] },
|
|
6
|
+
rust: { command: 'rust-analyzer', args: [] },
|
|
7
|
+
python: { command: 'pyright-langserver', args: ['--stdio'] },
|
|
8
|
+
cpp: { command: 'clangd', args: [] },
|
|
9
|
+
typescript: { command: 'typescript-language-server', args: ['--stdio'] },
|
|
10
|
+
javascript: { command: 'typescript-language-server', args: ['--stdio'] },
|
|
11
|
+
go: { command: 'gopls', args: [] },
|
|
12
|
+
java: { command: 'jdtls', args: [] },
|
|
13
|
+
csharp: { command: 'csharp-ls', args: [] },
|
|
14
|
+
ruby: { command: 'solargraph', args: ['stdio'] },
|
|
15
|
+
php: { command: 'intelephense', args: ['--stdio'] },
|
|
16
|
+
swift: { command: 'sourcekit-lsp', args: [] },
|
|
17
|
+
kotlin: { command: 'kotlin-language-server', args: [] },
|
|
18
|
+
scala: { command: 'metals', args: [] },
|
|
19
|
+
lua: { command: 'lua-language-server', args: [] },
|
|
20
|
+
bash: { command: 'bash-language-server', args: ['start'] },
|
|
21
|
+
elixir: { command: 'elixir-ls', args: [] },
|
|
22
|
+
zig: { command: 'zls', args: [] },
|
|
23
|
+
dart: { command: 'dart', args: ['language-server', '--protocol=lsp'] },
|
|
24
|
+
ocaml: { command: 'ocamllsp', args: [] },
|
|
25
|
+
haskell: { command: 'haskell-language-server-wrapper', args: ['--lsp'] },
|
|
26
|
+
julia: {
|
|
27
|
+
command: 'julia',
|
|
28
|
+
args: ['--startup-file=no', '--history-file=no', '--quiet', '--eval', 'using LanguageServer, SymbolServer; runserver()'],
|
|
29
|
+
},
|
|
30
|
+
elm: { command: 'elm-language-server', args: [] },
|
|
31
|
+
objc: { command: 'clangd', args: [] },
|
|
32
|
+
};
|
|
33
|
+
export function getDefaultLspServerRegistry() {
|
|
34
|
+
return cloneRegistry(DEFAULT_LSP_SERVER_REGISTRY);
|
|
35
|
+
}
|
|
36
|
+
export function mergeLspServerRegistry(overrides = {}) {
|
|
37
|
+
const merged = getDefaultLspServerRegistry();
|
|
38
|
+
for (const [language, override] of Object.entries(overrides)) {
|
|
39
|
+
if (!override)
|
|
40
|
+
continue;
|
|
41
|
+
const base = merged[language];
|
|
42
|
+
if (!base) {
|
|
43
|
+
throw new Error(`Unsupported LSP language override "${language}"`);
|
|
44
|
+
}
|
|
45
|
+
merged[language] = {
|
|
46
|
+
command: override.command ?? base.command,
|
|
47
|
+
args: override.args ?? base.args,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return merged;
|
|
51
|
+
}
|
|
52
|
+
export function resolveExecutableOnPath(command, env = process.env) {
|
|
53
|
+
if (!command.trim())
|
|
54
|
+
return null;
|
|
55
|
+
if (command.includes('/') || command.includes('\\') || isAbsolute(command)) {
|
|
56
|
+
return isExecutable(command) ? command : null;
|
|
57
|
+
}
|
|
58
|
+
const pathValue = env.PATH ?? '';
|
|
59
|
+
if (!pathValue)
|
|
60
|
+
return null;
|
|
61
|
+
const pathEntries = pathValue.split(delimiter).filter((entry) => entry.length > 0);
|
|
62
|
+
const extensions = process.platform === 'win32'
|
|
63
|
+
? (env.PATHEXT ?? '.EXE;.CMD;.BAT;.COM').split(';').filter((entry) => entry.length > 0)
|
|
64
|
+
: [''];
|
|
65
|
+
for (const entry of pathEntries) {
|
|
66
|
+
for (const extension of extensions) {
|
|
67
|
+
const candidate = join(entry, process.platform === 'win32' ? `${command}${extension}` : command);
|
|
68
|
+
if (isExecutable(candidate)) {
|
|
69
|
+
return candidate;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
export function resolveLspServerRegistry(registry = DEFAULT_LSP_SERVER_REGISTRY, env = process.env) {
|
|
76
|
+
const resolvedEntries = {};
|
|
77
|
+
for (const [language, config] of Object.entries(registry)) {
|
|
78
|
+
const resolvedPath = resolveExecutableOnPath(config.command, env);
|
|
79
|
+
resolvedEntries[language] = {
|
|
80
|
+
language,
|
|
81
|
+
command: config.command,
|
|
82
|
+
args: [...config.args],
|
|
83
|
+
available: resolvedPath !== null,
|
|
84
|
+
resolvedPath,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return resolvedEntries;
|
|
88
|
+
}
|
|
89
|
+
export function getMissingLanguageServerCommands(registry = DEFAULT_LSP_SERVER_REGISTRY, env = process.env) {
|
|
90
|
+
return Object.values(resolveLspServerRegistry(registry, env))
|
|
91
|
+
.filter((entry) => !entry.available)
|
|
92
|
+
.map((entry) => entry.language)
|
|
93
|
+
.sort();
|
|
94
|
+
}
|
|
95
|
+
export function hasCompleteLanguageCoverage(registry = DEFAULT_LSP_SERVER_REGISTRY) {
|
|
96
|
+
const languages = Object.keys(registry).sort();
|
|
97
|
+
return JSON.stringify(languages) === JSON.stringify([...SUPPORTED_PARSER_LANGUAGES].sort());
|
|
98
|
+
}
|
|
99
|
+
function cloneRegistry(registry) {
|
|
100
|
+
const cloned = {};
|
|
101
|
+
for (const [language, command] of Object.entries(registry)) {
|
|
102
|
+
cloned[language] = {
|
|
103
|
+
command: command.command,
|
|
104
|
+
args: [...command.args],
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return cloned;
|
|
108
|
+
}
|
|
109
|
+
function isExecutable(filePath) {
|
|
110
|
+
try {
|
|
111
|
+
accessSync(filePath, process.platform === 'win32' ? constants.F_OK : constants.X_OK);
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/indexer/lsp/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/indexer/parser.d.ts
CHANGED
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
* are silently skipped — `parse()` returns `null` for those languages.
|
|
7
7
|
*/
|
|
8
8
|
import Parser from 'tree-sitter';
|
|
9
|
+
/**
|
|
10
|
+
* Maps a language identifier (as returned by the file walker) to the npm
|
|
11
|
+
* package name that exports the corresponding tree-sitter grammar.
|
|
12
|
+
*/
|
|
13
|
+
export declare const LANG_PACKAGES: Record<string, string>;
|
|
14
|
+
/** Sorted list of all extractor languages with parser package mappings. */
|
|
15
|
+
export declare const SUPPORTED_PARSER_LANGUAGES: readonly string[];
|
|
9
16
|
/**
|
|
10
17
|
* Maintains one `Parser` instance per language for efficient reuse.
|
|
11
18
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/indexer/parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/indexer/parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AAgBjC;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyBhD,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAEvD,CAAC;AAIF;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI;IAe3D,OAAO,CAAC,UAAU;CA+BnB"}
|
package/dist/indexer/parser.js
CHANGED
|
@@ -21,7 +21,7 @@ const PARSER_CHUNK_SIZE = 4096;
|
|
|
21
21
|
* Maps a language identifier (as returned by the file walker) to the npm
|
|
22
22
|
* package name that exports the corresponding tree-sitter grammar.
|
|
23
23
|
*/
|
|
24
|
-
const LANG_PACKAGES = {
|
|
24
|
+
export const LANG_PACKAGES = {
|
|
25
25
|
c: 'tree-sitter-c',
|
|
26
26
|
rust: 'tree-sitter-rust',
|
|
27
27
|
python: 'tree-sitter-python',
|
|
@@ -47,6 +47,8 @@ const LANG_PACKAGES = {
|
|
|
47
47
|
elm: 'tree-sitter-elm',
|
|
48
48
|
objc: 'tree-sitter-objc',
|
|
49
49
|
};
|
|
50
|
+
/** Sorted list of all extractor languages with parser package mappings. */
|
|
51
|
+
export const SUPPORTED_PARSER_LANGUAGES = Object.freeze(Object.keys(LANG_PACKAGES).sort());
|
|
50
52
|
// ─── ParserPool ───────────────────────────────────────────────────────────────
|
|
51
53
|
/**
|
|
52
54
|
* Maintains one `Parser` instance per language for efficient reuse.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/indexer/parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,aAAa,GAA2B;
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/indexer/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/indexer/poller.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* a stored snapshot, and calls `IndexBuilder.update()` for any files that were
|
|
6
6
|
* created, modified, or deleted since the last poll.
|
|
7
7
|
*/
|
|
8
|
+
import type { EffectiveLspSettings } from './lsp/config.js';
|
|
8
9
|
import type { WalkerConfig } from './walker.js';
|
|
9
10
|
/** Configuration options for FilePoller. */
|
|
10
11
|
export interface PollerOptions {
|
|
@@ -17,6 +18,10 @@ export interface PollerOptions {
|
|
|
17
18
|
depth?: number;
|
|
18
19
|
all?: boolean;
|
|
19
20
|
};
|
|
21
|
+
/** Whether to include dependency indexing during update cycles. */
|
|
22
|
+
indexDependencies?: boolean;
|
|
23
|
+
/** Effective LSP settings forwarded to update cycles. */
|
|
24
|
+
lsp?: EffectiveLspSettings;
|
|
20
25
|
}
|
|
21
26
|
/**
|
|
22
27
|
* Polls a directory tree on a configurable interval, compares mtimes against
|
|
@@ -36,6 +41,8 @@ export declare class FilePoller {
|
|
|
36
41
|
private readonly intervalMs;
|
|
37
42
|
private readonly enabled;
|
|
38
43
|
private readonly history;
|
|
44
|
+
private readonly indexDependencies;
|
|
45
|
+
private readonly lsp;
|
|
39
46
|
/** Maps absolute path → last seen mtime (ms since epoch). */
|
|
40
47
|
private snapshot;
|
|
41
48
|
private timer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../../src/indexer/poller.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../../src/indexer/poller.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACtD,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yDAAyD;IACzD,GAAG,CAAC,EAAE,oBAAoB,CAAC;CAC5B;AAUD;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8C;IACtE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmC;IAEvD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,GAAE,aAAkB;IAUnF,uEAAuE;IACvE,KAAK,IAAI,IAAI;IAKb,iCAAiC;IACjC,IAAI,IAAI,IAAI;YASE,IAAI;CAyFnB"}
|
package/dist/indexer/poller.js
CHANGED
|
@@ -33,6 +33,8 @@ export class FilePoller {
|
|
|
33
33
|
intervalMs;
|
|
34
34
|
enabled;
|
|
35
35
|
history;
|
|
36
|
+
indexDependencies;
|
|
37
|
+
lsp;
|
|
36
38
|
/** Maps absolute path → last seen mtime (ms since epoch). */
|
|
37
39
|
snapshot = new Map();
|
|
38
40
|
timer = null;
|
|
@@ -43,6 +45,8 @@ export class FilePoller {
|
|
|
43
45
|
this.intervalMs = options.intervalMs ?? 5000;
|
|
44
46
|
this.enabled = options.enabled ?? true;
|
|
45
47
|
this.history = options.history ?? false;
|
|
48
|
+
this.indexDependencies = options.indexDependencies ?? false;
|
|
49
|
+
this.lsp = options.lsp;
|
|
46
50
|
}
|
|
47
51
|
/** Begin polling `walkerConfig.rootDir` at the configured interval. */
|
|
48
52
|
start() {
|
|
@@ -115,6 +119,8 @@ export class FilePoller {
|
|
|
115
119
|
if (changed.length > 0) {
|
|
116
120
|
const builder = new IndexBuilder(this.dbPath, this.walkerConfig, undefined, {
|
|
117
121
|
history: this.history,
|
|
122
|
+
...(this.indexDependencies && { indexDependencies: true }),
|
|
123
|
+
...(this.lsp && { lsp: this.lsp }),
|
|
118
124
|
});
|
|
119
125
|
try {
|
|
120
126
|
await builder.update(changed);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poller.js","sourceRoot":"","sources":["../../src/indexer/poller.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"poller.js","sourceRoot":"","sources":["../../src/indexer/poller.ts"],"names":[],"mappings":"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"}
|
package/dist/indexer/walker.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Walks a directory tree using fast-glob and maps each file to a detected
|
|
5
5
|
* programming language based on its extension.
|
|
6
6
|
*/
|
|
7
|
+
import { type DocumentationFile } from './docs.js';
|
|
7
8
|
/** Configuration for a `walkFiles` call. */
|
|
8
9
|
export interface WalkerConfig {
|
|
9
10
|
/** Absolute path to the directory to scan. */
|
|
@@ -29,6 +30,20 @@ export interface WalkerConfig {
|
|
|
29
30
|
* When omitted, indexing resolves the current branch from git.
|
|
30
31
|
*/
|
|
31
32
|
branch?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Glob patterns (relative to `rootDir`) for documentation files to include.
|
|
35
|
+
* When omitted, docs discovery uses default README/docs/ADR/design patterns.
|
|
36
|
+
*/
|
|
37
|
+
docsIncludeGlobs?: string[];
|
|
38
|
+
/**
|
|
39
|
+
* Glob patterns (relative to `rootDir`) for documentation paths to exclude.
|
|
40
|
+
*/
|
|
41
|
+
docsExcludeGlobs?: string[];
|
|
42
|
+
/**
|
|
43
|
+
* Explicit documentation extensions to accept (with leading dot).
|
|
44
|
+
* Defaults to markdown/reStructuredText/AsciiDoc/text when omitted.
|
|
45
|
+
*/
|
|
46
|
+
docsExtensions?: string[];
|
|
32
47
|
}
|
|
33
48
|
/** A single file discovered by `walkFiles`. */
|
|
34
49
|
export interface FileEntry {
|
|
@@ -38,11 +53,18 @@ export interface FileEntry {
|
|
|
38
53
|
language: string;
|
|
39
54
|
}
|
|
40
55
|
export declare const EXT_TO_LANG: Record<string, string>;
|
|
56
|
+
/** Sorted list of all distinct extractor languages supported by the walker. */
|
|
57
|
+
export declare const SUPPORTED_WALKER_LANGUAGES: readonly string[];
|
|
41
58
|
/**
|
|
42
59
|
* Walks `config.rootDir` and returns every source file that can be mapped
|
|
43
60
|
* to a known programming language.
|
|
44
61
|
*/
|
|
45
62
|
export declare function walkFiles(config: WalkerConfig): Promise<FileEntry[]>;
|
|
63
|
+
/**
|
|
64
|
+
* Walks `config.rootDir` and returns documentation files discovered using
|
|
65
|
+
* docs-focused defaults (README/docs/ADR/design patterns) and kind inference.
|
|
66
|
+
*/
|
|
67
|
+
export declare function walkDocumentationFiles(config: WalkerConfig): Promise<DocumentationFile[]>;
|
|
46
68
|
/**
|
|
47
69
|
* Detect the Lore language for a single file path using extension mapping.
|
|
48
70
|
* Returns `undefined` when the extension is unknown or filtered out.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/indexer/walker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/indexer/walker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAA8B,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAI/E,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,+CAA+C;AAC/C,MAAM,WAAW,SAAS;IACxB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IAEb,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyC9C,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAEvD,CAAC;AAcF;;;GAGG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAkC1E;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAO/F;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,MAAM,GAAG,SAAS,CAIrH"}
|
package/dist/indexer/walker.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import fg from 'fast-glob';
|
|
8
8
|
import { extname } from 'node:path';
|
|
9
|
+
import { discoverDocumentationFiles } from './docs.js';
|
|
9
10
|
// ─── Extension → Language mapping ────────────────────────────────────────────
|
|
10
11
|
export const EXT_TO_LANG = {
|
|
11
12
|
'.c': 'c',
|
|
@@ -49,6 +50,8 @@ export const EXT_TO_LANG = {
|
|
|
49
50
|
'.m': 'objc',
|
|
50
51
|
'.mm': 'objc',
|
|
51
52
|
};
|
|
53
|
+
/** Sorted list of all distinct extractor languages supported by the walker. */
|
|
54
|
+
export const SUPPORTED_WALKER_LANGUAGES = Object.freeze([...new Set(Object.values(EXT_TO_LANG))].sort());
|
|
52
55
|
// Paths always excluded unless the caller overrides them.
|
|
53
56
|
const DEFAULT_EXCLUDES = [
|
|
54
57
|
'**/node_modules/**',
|
|
@@ -87,6 +90,18 @@ export async function walkFiles(config) {
|
|
|
87
90
|
}
|
|
88
91
|
return results;
|
|
89
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Walks `config.rootDir` and returns documentation files discovered using
|
|
95
|
+
* docs-focused defaults (README/docs/ADR/design patterns) and kind inference.
|
|
96
|
+
*/
|
|
97
|
+
export async function walkDocumentationFiles(config) {
|
|
98
|
+
return discoverDocumentationFiles({
|
|
99
|
+
rootDir: config.rootDir,
|
|
100
|
+
includeGlobs: config.docsIncludeGlobs,
|
|
101
|
+
excludeGlobs: config.docsExcludeGlobs,
|
|
102
|
+
extensions: config.docsExtensions,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
90
105
|
/**
|
|
91
106
|
* Detect the Lore language for a single file path using extension mapping.
|
|
92
107
|
* Returns `undefined` when the extension is unknown or filtered out.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walker.js","sourceRoot":"","sources":["../../src/indexer/walker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"walker.js","sourceRoot":"","sources":["../../src/indexer/walker.ts"],"names":[],"mappings":"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"}
|