skannr 0.1.6 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/languages/TreeSitterAdapter.d.ts +30 -0
  2. package/dist/languages/TreeSitterAdapter.d.ts.map +1 -0
  3. package/dist/languages/TreeSitterAdapter.js +466 -0
  4. package/dist/languages/TreeSitterAdapter.js.map +1 -0
  5. package/dist/languages/grammars/tree-sitter-go.wasm +0 -0
  6. package/dist/languages/grammars/tree-sitter-java.wasm +0 -0
  7. package/dist/languages/grammars/tree-sitter-python.wasm +0 -0
  8. package/dist/languages/grammars/tree-sitter-rust.wasm +0 -0
  9. package/dist/languages/lang-config.d.ts +38 -0
  10. package/dist/languages/lang-config.d.ts.map +1 -0
  11. package/dist/languages/lang-config.js +85 -0
  12. package/dist/languages/lang-config.js.map +1 -0
  13. package/dist/languages/registry.d.ts +6 -0
  14. package/dist/languages/registry.d.ts.map +1 -1
  15. package/dist/languages/registry.js +18 -4
  16. package/dist/languages/registry.js.map +1 -1
  17. package/package.json +4 -7
  18. package/src/languages/TreeSitterAdapter.ts +431 -0
  19. package/src/languages/lang-config.ts +113 -0
  20. package/src/languages/registry.ts +65 -49
  21. package/src/languages/PythonAdapter.ts +0 -302
  22. package/tests/agent.tools.test.ts +0 -81
  23. package/tests/benchmark.test.ts +0 -31
  24. package/tests/blast-radius.test.ts +0 -290
  25. package/tests/fixtures/sample.py +0 -17
  26. package/tests/fixtures/sample.ts +0 -13
  27. package/tests/fixtures/src/api/routes.ts +0 -1
  28. package/tests/fixtures/src/auth/permission.ts +0 -3
  29. package/tests/python-adapter.test.ts +0 -31
  30. package/tests/ranker-enhanced.test.ts +0 -70
  31. package/tests/ranker.test.ts +0 -79
  32. package/tests/scanner.scope.test.ts +0 -67
  33. package/tests/setup-fixtures.js +0 -29
  34. package/tests/skeletonizer.test.ts +0 -149
  35. package/uca-landing/index.html +0 -17
  36. package/uca-landing/package.json +0 -23
  37. package/uca-landing/postcss.config.js +0 -6
  38. package/uca-landing/src/App.jsx +0 -45
  39. package/uca-landing/src/components/AgentMode.jsx +0 -45
  40. package/uca-landing/src/components/CliReference.jsx +0 -89
  41. package/uca-landing/src/components/Features.jsx +0 -88
  42. package/uca-landing/src/components/Footer.jsx +0 -35
  43. package/uca-landing/src/components/Hero.jsx +0 -125
  44. package/uca-landing/src/components/HowItWorks.jsx +0 -65
  45. package/uca-landing/src/components/Install.jsx +0 -103
  46. package/uca-landing/src/components/LanguageSupport.jsx +0 -63
  47. package/uca-landing/src/components/Navbar.jsx +0 -86
  48. package/uca-landing/src/components/Problem.jsx +0 -51
  49. package/uca-landing/src/components/Reveal.jsx +0 -40
  50. package/uca-landing/src/components/TokenSavings.jsx +0 -126
  51. package/uca-landing/src/components/WorksWith.jsx +0 -59
  52. package/uca-landing/src/hooks/useScrollNav.js +0 -13
  53. package/uca-landing/src/hooks/useTypewriter.js +0 -41
  54. package/uca-landing/src/index.css +0 -13
  55. package/uca-landing/src/main.jsx +0 -10
  56. package/uca-landing/tailwind.config.js +0 -68
  57. package/uca-landing/vercel.json +0 -4
  58. package/uca-landing/vite.config.js +0 -6
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Universal tree-sitter adapter using web-tree-sitter (WASM).
3
+ * Handles Python, Go, Rust, Java, and any future language by loading
4
+ * the appropriate grammar at runtime. No native compilation required.
5
+ */
6
+ import { LanguageAdapter, SkeletonResult, Symbol } from './LanguageAdapter';
7
+ import { LangConfig } from './lang-config';
8
+ export declare class TreeSitterAdapter implements LanguageAdapter {
9
+ name: string;
10
+ extensions: string[];
11
+ private configs;
12
+ private _initDone;
13
+ constructor(configs: LangConfig[]);
14
+ canHandle(filePath: string): boolean;
15
+ /** Ensure WASM parser is initialized. Call at the start of each public method. */
16
+ private ensureReady;
17
+ /** Async initialization — must be called once before using the adapter. */
18
+ initialize(): Promise<void>;
19
+ /** Synchronous initialization attempt (for compat with existing sync API). */
20
+ initializeSync(): void;
21
+ generateSkeleton(content: string, filePath: string): SkeletonResult;
22
+ extractSymbols(content: string): Symbol[];
23
+ extractImports(content: string): string[];
24
+ /** Extract symbols with a file path hint for correct config selection. */
25
+ extractSymbolsForFile(content: string, filePath: string): Symbol[];
26
+ /** Extract imports with a file path hint for correct config selection. */
27
+ extractImportsForFile(content: string, filePath: string): string[];
28
+ private walkSymbols;
29
+ }
30
+ //# sourceMappingURL=TreeSitterAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeSitterAdapter.d.ts","sourceRoot":"","sources":["../../src/languages/TreeSitterAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAuB,MAAM,eAAe,CAAC;AAkLhE,qBAAa,iBAAkB,YAAW,eAAe;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,EAAE,UAAU,EAAE;IAMjC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKpC,kFAAkF;IAClF,OAAO,CAAC,WAAW;IAOnB,2EAA2E;IACrE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC,8EAA8E;IAC9E,cAAc,IAAI,IAAI;IAQtB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc;IA+CnE,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAwBzC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IA4BzC,0EAA0E;IAC1E,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAuBlE,0EAA0E;IAC1E,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IA2BlE,OAAO,CAAC,WAAW;CAgDpB"}
@@ -0,0 +1,466 @@
1
+ "use strict";
2
+ /**
3
+ * Universal tree-sitter adapter using web-tree-sitter (WASM).
4
+ * Handles Python, Go, Rust, Java, and any future language by loading
5
+ * the appropriate grammar at runtime. No native compilation required.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.TreeSitterAdapter = void 0;
42
+ const path = __importStar(require("path"));
43
+ const lang_config_1 = require("./lang-config");
44
+ // web-tree-sitter types (loaded dynamically to avoid ESM/CJS issues)
45
+ let Parser = null;
46
+ let initPromise = null;
47
+ const loadedLanguages = new Map();
48
+ /** Resolve path to a bundled .wasm grammar file. */
49
+ function grammarPath(filename) {
50
+ return path.join(__dirname, 'grammars', filename);
51
+ }
52
+ /** Initialize the WASM parser (once). */
53
+ async function ensureInit() {
54
+ if (Parser)
55
+ return true;
56
+ if (initPromise) {
57
+ await initPromise;
58
+ return Parser !== null;
59
+ }
60
+ initPromise = (async () => {
61
+ try {
62
+ const mod = require('web-tree-sitter');
63
+ const P = mod.default ?? mod;
64
+ await P.init();
65
+ Parser = P;
66
+ }
67
+ catch {
68
+ Parser = null;
69
+ }
70
+ })();
71
+ await initPromise;
72
+ return Parser !== null;
73
+ }
74
+ /** Load a language grammar (cached). */
75
+ async function loadLanguage(config) {
76
+ if (loadedLanguages.has(config.id)) {
77
+ return loadedLanguages.get(config.id);
78
+ }
79
+ try {
80
+ const wasmPath = grammarPath(config.grammarFile);
81
+ const lang = await Parser.Language.load(wasmPath);
82
+ loadedLanguages.set(config.id, lang);
83
+ return lang;
84
+ }
85
+ catch {
86
+ return null;
87
+ }
88
+ }
89
+ /** Synchronous wrapper — uses cached state if already initialized. */
90
+ function getParserSync(config) {
91
+ if (!Parser)
92
+ return null;
93
+ const lang = loadedLanguages.get(config.id);
94
+ if (!lang)
95
+ return null;
96
+ const parser = new Parser();
97
+ parser.setLanguage(lang);
98
+ return { parser, language: lang };
99
+ }
100
+ /**
101
+ * Extract the text of a node's named field, or null if not present.
102
+ */
103
+ function fieldText(node, fieldName) {
104
+ const child = node.childForFieldName(fieldName);
105
+ return child ? child.text : null;
106
+ }
107
+ /**
108
+ * Get the signature of a function/method node (everything except the body).
109
+ */
110
+ function getSignature(node, lines, config) {
111
+ const bodyNode = node.childForFieldName(config.bodyField);
112
+ if (!bodyNode) {
113
+ // No body field — return the whole node text (might be a declaration)
114
+ return node.text;
115
+ }
116
+ const startRow = node.startPosition.row;
117
+ const bodyStartRow = bodyNode.startPosition.row;
118
+ // Return lines from node start to body start (exclusive of body content)
119
+ const sigLines = lines.slice(startRow, bodyStartRow);
120
+ if (sigLines.length === 0) {
121
+ // Body is on the same line as the signature
122
+ const fullLine = lines[startRow] || '';
123
+ const bodyCol = bodyNode.startPosition.column;
124
+ return fullLine.slice(0, bodyCol).trimEnd();
125
+ }
126
+ return sigLines.join('\n');
127
+ }
128
+ /**
129
+ * Get the indent level of a node based on its start column.
130
+ */
131
+ function indent(node) {
132
+ return ' '.repeat(node.startPosition.column);
133
+ }
134
+ /**
135
+ * Determine the body placeholder based on language.
136
+ */
137
+ function bodyPlaceholder(config) {
138
+ if (config.id === 'python')
139
+ return ' ...';
140
+ return ' /* trimmed */';
141
+ }
142
+ /**
143
+ * Generate skeleton for a class node.
144
+ */
145
+ function skeletonizeClass(node, lines, config) {
146
+ const out = [];
147
+ const name = fieldText(node, config.nameField) || 'Unknown';
148
+ const bodyNode = node.childForFieldName(config.classBodyField);
149
+ // Class signature
150
+ const sig = getSignature(node, lines, config);
151
+ out.push(sig);
152
+ if (!bodyNode) {
153
+ return out;
154
+ }
155
+ // For Python, add body placeholder for the class opening
156
+ if (config.id === 'python') {
157
+ // Walk methods inside the class body
158
+ for (const child of bodyNode.namedChildren) {
159
+ if (config.methodTypes.includes(child.type)) {
160
+ out.push('');
161
+ const methodSig = getSignature(child, lines, config);
162
+ out.push(methodSig);
163
+ out.push(indent(child) + ' ...');
164
+ }
165
+ }
166
+ }
167
+ else {
168
+ // For braced languages, output opening brace + method signatures
169
+ if (!sig.includes('{')) {
170
+ out.push(indent(node) + '{');
171
+ }
172
+ for (const child of bodyNode.namedChildren) {
173
+ if (config.methodTypes.includes(child.type)) {
174
+ const methodSig = getSignature(child, lines, config);
175
+ out.push(methodSig);
176
+ out.push(indent(child) + bodyPlaceholder(config));
177
+ if (!config.id.match(/python/)) {
178
+ out.push(indent(child) + '}');
179
+ }
180
+ out.push('');
181
+ }
182
+ else if (child.type === 'field_declaration' ||
183
+ child.type === 'field_definition' ||
184
+ child.type === 'annotation_type_element_declaration') {
185
+ // Keep field declarations as-is
186
+ out.push(child.text);
187
+ }
188
+ }
189
+ out.push(indent(node) + '}');
190
+ }
191
+ return out;
192
+ }
193
+ /**
194
+ * Generate skeleton for a function node.
195
+ */
196
+ function skeletonizeFunction(node, lines, config) {
197
+ const out = [];
198
+ const sig = getSignature(node, lines, config);
199
+ out.push(sig);
200
+ if (config.id === 'python') {
201
+ out.push(indent(node) + ' ...');
202
+ }
203
+ else {
204
+ if (!sig.trimEnd().endsWith('{')) {
205
+ out.push(indent(node) + '{');
206
+ }
207
+ out.push(indent(node) + bodyPlaceholder(config));
208
+ out.push(indent(node) + '}');
209
+ }
210
+ return out;
211
+ }
212
+ class TreeSitterAdapter {
213
+ name;
214
+ extensions;
215
+ configs;
216
+ _initDone = false;
217
+ constructor(configs) {
218
+ this.configs = configs;
219
+ this.name = 'tree-sitter';
220
+ this.extensions = configs.flatMap((c) => c.extensions);
221
+ }
222
+ canHandle(filePath) {
223
+ const ext = path.extname(filePath).toLowerCase();
224
+ return this.extensions.includes(ext);
225
+ }
226
+ /** Ensure WASM parser is initialized. Call at the start of each public method. */
227
+ ensureReady(ext) {
228
+ const config = (0, lang_config_1.getLangConfigForExt)(ext);
229
+ if (!config)
230
+ return null;
231
+ if (!Parser || !loadedLanguages.has(config.id))
232
+ return null;
233
+ return config;
234
+ }
235
+ /** Async initialization — must be called once before using the adapter. */
236
+ async initialize() {
237
+ if (this._initDone)
238
+ return;
239
+ const ok = await ensureInit();
240
+ if (!ok)
241
+ return;
242
+ for (const config of this.configs) {
243
+ await loadLanguage(config);
244
+ }
245
+ this._initDone = true;
246
+ }
247
+ /** Synchronous initialization attempt (for compat with existing sync API). */
248
+ initializeSync() {
249
+ // Trigger async init in background. Methods will return fallbacks
250
+ // until initialization completes.
251
+ if (!this._initDone) {
252
+ this.initialize().catch(() => { });
253
+ }
254
+ }
255
+ generateSkeleton(content, filePath) {
256
+ const ext = path.extname(filePath).toLowerCase();
257
+ const config = this.ensureReady(ext);
258
+ if (!config) {
259
+ return { skeleton: content.split('\n').slice(0, 50).join('\n') };
260
+ }
261
+ try {
262
+ const ctx = getParserSync(config);
263
+ if (!ctx)
264
+ return { skeleton: content.split('\n').slice(0, 50).join('\n') };
265
+ const tree = ctx.parser.parse(content);
266
+ if (!tree)
267
+ return { skeleton: content.split('\n').slice(0, 50).join('\n') };
268
+ const lines = content.split(/\r?\n/);
269
+ const skeletonLines = [];
270
+ skeletonLines.push(`/* Skeleton of ${path.basename(filePath)} */`);
271
+ skeletonLines.push('');
272
+ for (const child of tree.rootNode.namedChildren) {
273
+ if (config.importTypes.includes(child.type)) {
274
+ skeletonLines.push(child.text);
275
+ }
276
+ else if (config.classTypes.includes(child.type)) {
277
+ skeletonLines.push('');
278
+ skeletonLines.push(...skeletonizeClass(child, lines, config));
279
+ }
280
+ else if (config.functionTypes.includes(child.type)) {
281
+ skeletonLines.push('');
282
+ skeletonLines.push(...skeletonizeFunction(child, lines, config));
283
+ }
284
+ else if (config.interfaceTypes.includes(child.type)) {
285
+ skeletonLines.push('');
286
+ skeletonLines.push(child.text);
287
+ }
288
+ else if (config.typeTypes.includes(child.type)) {
289
+ skeletonLines.push('');
290
+ skeletonLines.push(child.text);
291
+ }
292
+ }
293
+ tree.delete();
294
+ ctx.parser.delete();
295
+ return { skeleton: skeletonLines.join('\n').trim() };
296
+ }
297
+ catch {
298
+ return { skeleton: content.split('\n').slice(0, 50).join('\n') };
299
+ }
300
+ }
301
+ extractSymbols(content) {
302
+ // Determine the config from context (we don't have filePath here,
303
+ // so try each config until one parses successfully)
304
+ for (const config of this.configs) {
305
+ const ctx = getParserSync(config);
306
+ if (!ctx)
307
+ continue;
308
+ try {
309
+ const tree = ctx.parser.parse(content);
310
+ if (!tree) {
311
+ ctx.parser.delete();
312
+ continue;
313
+ }
314
+ const symbols = [];
315
+ this.walkSymbols(tree.rootNode, symbols, config);
316
+ tree.delete();
317
+ ctx.parser.delete();
318
+ if (symbols.length > 0)
319
+ return symbols;
320
+ }
321
+ catch {
322
+ ctx.parser.delete();
323
+ }
324
+ }
325
+ return [];
326
+ }
327
+ extractImports(content) {
328
+ for (const config of this.configs) {
329
+ const ctx = getParserSync(config);
330
+ if (!ctx)
331
+ continue;
332
+ try {
333
+ const tree = ctx.parser.parse(content);
334
+ if (!tree) {
335
+ ctx.parser.delete();
336
+ continue;
337
+ }
338
+ const imports = [];
339
+ for (const child of tree.rootNode.namedChildren) {
340
+ if (config.importTypes.includes(child.type)) {
341
+ // Extract module name from import
342
+ const text = child.text;
343
+ imports.push(text);
344
+ }
345
+ }
346
+ tree.delete();
347
+ ctx.parser.delete();
348
+ if (imports.length > 0)
349
+ return imports;
350
+ }
351
+ catch {
352
+ ctx.parser.delete();
353
+ }
354
+ }
355
+ return [];
356
+ }
357
+ /** Extract symbols with a file path hint for correct config selection. */
358
+ extractSymbolsForFile(content, filePath) {
359
+ const ext = path.extname(filePath).toLowerCase();
360
+ const config = this.ensureReady(ext);
361
+ if (!config)
362
+ return [];
363
+ const ctx = getParserSync(config);
364
+ if (!ctx)
365
+ return [];
366
+ try {
367
+ const tree = ctx.parser.parse(content);
368
+ if (!tree) {
369
+ ctx.parser.delete();
370
+ return [];
371
+ }
372
+ const symbols = [];
373
+ this.walkSymbols(tree.rootNode, symbols, config);
374
+ tree.delete();
375
+ ctx.parser.delete();
376
+ return symbols;
377
+ }
378
+ catch {
379
+ ctx.parser.delete();
380
+ return [];
381
+ }
382
+ }
383
+ /** Extract imports with a file path hint for correct config selection. */
384
+ extractImportsForFile(content, filePath) {
385
+ const ext = path.extname(filePath).toLowerCase();
386
+ const config = this.ensureReady(ext);
387
+ if (!config)
388
+ return [];
389
+ const ctx = getParserSync(config);
390
+ if (!ctx)
391
+ return [];
392
+ try {
393
+ const tree = ctx.parser.parse(content);
394
+ if (!tree) {
395
+ ctx.parser.delete();
396
+ return [];
397
+ }
398
+ const imports = [];
399
+ for (const child of tree.rootNode.namedChildren) {
400
+ if (config.importTypes.includes(child.type)) {
401
+ imports.push(child.text);
402
+ }
403
+ }
404
+ tree.delete();
405
+ ctx.parser.delete();
406
+ return imports;
407
+ }
408
+ catch {
409
+ ctx.parser.delete();
410
+ return [];
411
+ }
412
+ }
413
+ walkSymbols(node, symbols, config) {
414
+ for (const child of node.namedChildren) {
415
+ const name = fieldText(child, config.nameField);
416
+ if (!name)
417
+ continue;
418
+ if (config.functionTypes.includes(child.type)) {
419
+ symbols.push({
420
+ name,
421
+ kind: 'function',
422
+ line: child.startPosition.row + 1,
423
+ });
424
+ }
425
+ else if (config.classTypes.includes(child.type)) {
426
+ symbols.push({
427
+ name,
428
+ kind: 'class',
429
+ line: child.startPosition.row + 1,
430
+ });
431
+ // Walk class body for methods
432
+ const body = child.childForFieldName(config.classBodyField);
433
+ if (body) {
434
+ for (const member of body.namedChildren) {
435
+ if (config.methodTypes.includes(member.type)) {
436
+ const methodName = fieldText(member, config.nameField);
437
+ if (methodName) {
438
+ symbols.push({
439
+ name: methodName,
440
+ kind: 'function',
441
+ line: member.startPosition.row + 1,
442
+ });
443
+ }
444
+ }
445
+ }
446
+ }
447
+ }
448
+ else if (config.interfaceTypes.includes(child.type)) {
449
+ symbols.push({
450
+ name,
451
+ kind: 'interface',
452
+ line: child.startPosition.row + 1,
453
+ });
454
+ }
455
+ else if (config.typeTypes.includes(child.type)) {
456
+ symbols.push({
457
+ name,
458
+ kind: 'type',
459
+ line: child.startPosition.row + 1,
460
+ });
461
+ }
462
+ }
463
+ }
464
+ }
465
+ exports.TreeSitterAdapter = TreeSitterAdapter;
466
+ //# sourceMappingURL=TreeSitterAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeSitterAdapter.js","sourceRoot":"","sources":["../../src/languages/TreeSitterAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Per-language AST node type mappings for tree-sitter grammars.
3
+ * Adding a new language = adding one entry to this map.
4
+ */
5
+ export interface LangConfig {
6
+ /** Language identifier. */
7
+ id: string;
8
+ /** File extensions this language handles (lowercase, with dot). */
9
+ extensions: string[];
10
+ /** Filename of the .wasm grammar (relative to grammars/ dir). */
11
+ grammarFile: string;
12
+ /** AST node types that represent top-level function declarations. */
13
+ functionTypes: string[];
14
+ /** AST node types that represent class declarations. */
15
+ classTypes: string[];
16
+ /** AST node types that represent methods inside classes. */
17
+ methodTypes: string[];
18
+ /** AST node types that represent import statements. */
19
+ importTypes: string[];
20
+ /** AST node types that represent interface/protocol declarations. */
21
+ interfaceTypes: string[];
22
+ /** AST node types that represent type alias declarations. */
23
+ typeTypes: string[];
24
+ /** The field name used to extract the symbol name (usually 'name'). */
25
+ nameField: string;
26
+ /** The field name for the function/method body (usually 'body' or 'block'). */
27
+ bodyField: string;
28
+ /** The field name for class body. */
29
+ classBodyField: string;
30
+ /** The field name for function parameters. */
31
+ parametersField: string;
32
+ /** The field name for return type annotation (if the language supports it). */
33
+ returnTypeField: string;
34
+ }
35
+ export declare const LANG_CONFIGS: Record<string, LangConfig>;
36
+ /** Get the language config for a file extension, or null if unsupported. */
37
+ export declare function getLangConfigForExt(ext: string): LangConfig | null;
38
+ //# sourceMappingURL=lang-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lang-config.d.ts","sourceRoot":"","sources":["../../src/languages/lang-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,mEAAmE;IACnE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,wDAAwD;IACxD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,uDAAuD;IACvD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qEAAqE;IACrE,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAiEnD,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAQlE"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ /**
3
+ * Per-language AST node type mappings for tree-sitter grammars.
4
+ * Adding a new language = adding one entry to this map.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.LANG_CONFIGS = void 0;
8
+ exports.getLangConfigForExt = getLangConfigForExt;
9
+ exports.LANG_CONFIGS = {
10
+ python: {
11
+ id: 'python',
12
+ extensions: ['.py', '.pyi'],
13
+ grammarFile: 'tree-sitter-python.wasm',
14
+ functionTypes: ['function_definition'],
15
+ classTypes: ['class_definition'],
16
+ methodTypes: ['function_definition'],
17
+ importTypes: ['import_statement', 'import_from_statement'],
18
+ interfaceTypes: [],
19
+ typeTypes: [],
20
+ nameField: 'name',
21
+ bodyField: 'body',
22
+ classBodyField: 'body',
23
+ parametersField: 'parameters',
24
+ returnTypeField: 'return_type',
25
+ },
26
+ go: {
27
+ id: 'go',
28
+ extensions: ['.go'],
29
+ grammarFile: 'tree-sitter-go.wasm',
30
+ functionTypes: ['function_declaration'],
31
+ classTypes: ['type_declaration'],
32
+ methodTypes: ['method_declaration'],
33
+ importTypes: ['import_declaration'],
34
+ interfaceTypes: ['type_declaration'],
35
+ typeTypes: ['type_declaration'],
36
+ nameField: 'name',
37
+ bodyField: 'body',
38
+ classBodyField: 'body',
39
+ parametersField: 'parameters',
40
+ returnTypeField: 'result',
41
+ },
42
+ rust: {
43
+ id: 'rust',
44
+ extensions: ['.rs'],
45
+ grammarFile: 'tree-sitter-rust.wasm',
46
+ functionTypes: ['function_item'],
47
+ classTypes: ['struct_item', 'enum_item'],
48
+ methodTypes: ['function_item'],
49
+ importTypes: ['use_declaration'],
50
+ interfaceTypes: ['trait_item'],
51
+ typeTypes: ['type_item'],
52
+ nameField: 'name',
53
+ bodyField: 'body',
54
+ classBodyField: 'body',
55
+ parametersField: 'parameters',
56
+ returnTypeField: 'return_type',
57
+ },
58
+ java: {
59
+ id: 'java',
60
+ extensions: ['.java'],
61
+ grammarFile: 'tree-sitter-java.wasm',
62
+ functionTypes: ['method_declaration', 'constructor_declaration'],
63
+ classTypes: ['class_declaration', 'enum_declaration'],
64
+ methodTypes: ['method_declaration', 'constructor_declaration'],
65
+ importTypes: ['import_declaration'],
66
+ interfaceTypes: ['interface_declaration'],
67
+ typeTypes: [],
68
+ nameField: 'name',
69
+ bodyField: 'body',
70
+ classBodyField: 'body',
71
+ parametersField: 'parameters',
72
+ returnTypeField: 'type',
73
+ },
74
+ };
75
+ /** Get the language config for a file extension, or null if unsupported. */
76
+ function getLangConfigForExt(ext) {
77
+ const lower = ext.toLowerCase();
78
+ for (const config of Object.values(exports.LANG_CONFIGS)) {
79
+ if (config.extensions.includes(lower)) {
80
+ return config;
81
+ }
82
+ }
83
+ return null;
84
+ }
85
+ //# sourceMappingURL=lang-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lang-config.js","sourceRoot":"","sources":["../../src/languages/lang-config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAqGH,kDAQC;AA5EY,QAAA,YAAY,GAA+B;IACtD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;QAC3B,WAAW,EAAE,yBAAyB;QACtC,aAAa,EAAE,CAAC,qBAAqB,CAAC;QACtC,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,WAAW,EAAE,CAAC,qBAAqB,CAAC;QACpC,WAAW,EAAE,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;QAC1D,cAAc,EAAE,EAAE;QAClB,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;QACjB,cAAc,EAAE,MAAM;QACtB,eAAe,EAAE,YAAY;QAC7B,eAAe,EAAE,aAAa;KAC/B;IACD,EAAE,EAAE;QACF,EAAE,EAAE,IAAI;QACR,UAAU,EAAE,CAAC,KAAK,CAAC;QACnB,WAAW,EAAE,qBAAqB;QAClC,aAAa,EAAE,CAAC,sBAAsB,CAAC;QACvC,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,WAAW,EAAE,CAAC,oBAAoB,CAAC;QACnC,WAAW,EAAE,CAAC,oBAAoB,CAAC;QACnC,cAAc,EAAE,CAAC,kBAAkB,CAAC;QACpC,SAAS,EAAE,CAAC,kBAAkB,CAAC;QAC/B,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;QACjB,cAAc,EAAE,MAAM;QACtB,eAAe,EAAE,YAAY;QAC7B,eAAe,EAAE,QAAQ;KAC1B;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM;QACV,UAAU,EAAE,CAAC,KAAK,CAAC;QACnB,WAAW,EAAE,uBAAuB;QACpC,aAAa,EAAE,CAAC,eAAe,CAAC;QAChC,UAAU,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC;QACxC,WAAW,EAAE,CAAC,eAAe,CAAC;QAC9B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,cAAc,EAAE,CAAC,YAAY,CAAC;QAC9B,SAAS,EAAE,CAAC,WAAW,CAAC;QACxB,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;QACjB,cAAc,EAAE,MAAM;QACtB,eAAe,EAAE,YAAY;QAC7B,eAAe,EAAE,aAAa;KAC/B;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM;QACV,UAAU,EAAE,CAAC,OAAO,CAAC;QACrB,WAAW,EAAE,uBAAuB;QACpC,aAAa,EAAE,CAAC,oBAAoB,EAAE,yBAAyB,CAAC;QAChE,UAAU,EAAE,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;QACrD,WAAW,EAAE,CAAC,oBAAoB,EAAE,yBAAyB,CAAC;QAC9D,WAAW,EAAE,CAAC,oBAAoB,CAAC;QACnC,cAAc,EAAE,CAAC,uBAAuB,CAAC;QACzC,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;QACjB,cAAc,EAAE,MAAM;QACtB,eAAe,EAAE,YAAY;QAC7B,eAAe,EAAE,MAAM;KACxB;CACF,CAAC;AAEF,4EAA4E;AAC5E,SAAgB,mBAAmB,CAAC,GAAW;IAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAChC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,oBAAY,CAAC,EAAE,CAAC;QACjD,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}