codebaxing 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +402 -0
  3. package/README.vi.md +402 -0
  4. package/dist/core/exceptions.d.ts +25 -0
  5. package/dist/core/exceptions.d.ts.map +1 -0
  6. package/dist/core/exceptions.js +46 -0
  7. package/dist/core/exceptions.js.map +1 -0
  8. package/dist/core/interfaces.d.ts +13 -0
  9. package/dist/core/interfaces.d.ts.map +1 -0
  10. package/dist/core/interfaces.js +5 -0
  11. package/dist/core/interfaces.js.map +1 -0
  12. package/dist/core/models.d.ts +132 -0
  13. package/dist/core/models.d.ts.map +1 -0
  14. package/dist/core/models.js +303 -0
  15. package/dist/core/models.js.map +1 -0
  16. package/dist/index.d.ts +17 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +20 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/indexing/embedding-service.d.ts +66 -0
  21. package/dist/indexing/embedding-service.d.ts.map +1 -0
  22. package/dist/indexing/embedding-service.js +271 -0
  23. package/dist/indexing/embedding-service.js.map +1 -0
  24. package/dist/indexing/memory-retriever.d.ts +58 -0
  25. package/dist/indexing/memory-retriever.d.ts.map +1 -0
  26. package/dist/indexing/memory-retriever.js +327 -0
  27. package/dist/indexing/memory-retriever.js.map +1 -0
  28. package/dist/indexing/parallel-indexer.d.ts +36 -0
  29. package/dist/indexing/parallel-indexer.d.ts.map +1 -0
  30. package/dist/indexing/parallel-indexer.js +67 -0
  31. package/dist/indexing/parallel-indexer.js.map +1 -0
  32. package/dist/indexing/source-retriever.d.ts +66 -0
  33. package/dist/indexing/source-retriever.d.ts.map +1 -0
  34. package/dist/indexing/source-retriever.js +420 -0
  35. package/dist/indexing/source-retriever.js.map +1 -0
  36. package/dist/mcp/server.d.ts +16 -0
  37. package/dist/mcp/server.d.ts.map +1 -0
  38. package/dist/mcp/server.js +370 -0
  39. package/dist/mcp/server.js.map +1 -0
  40. package/dist/mcp/state.d.ts +26 -0
  41. package/dist/mcp/state.d.ts.map +1 -0
  42. package/dist/mcp/state.js +154 -0
  43. package/dist/mcp/state.js.map +1 -0
  44. package/dist/parsers/language-configs.d.ts +26 -0
  45. package/dist/parsers/language-configs.d.ts.map +1 -0
  46. package/dist/parsers/language-configs.js +422 -0
  47. package/dist/parsers/language-configs.js.map +1 -0
  48. package/dist/parsers/treesitter-parser.d.ts +37 -0
  49. package/dist/parsers/treesitter-parser.d.ts.map +1 -0
  50. package/dist/parsers/treesitter-parser.js +602 -0
  51. package/dist/parsers/treesitter-parser.js.map +1 -0
  52. package/package.json +91 -0
@@ -0,0 +1,602 @@
1
+ /**
2
+ * TreeSitterParser - Multi-language code parser using tree-sitter.
3
+ *
4
+ * Supported Languages: Python, JavaScript, TypeScript, C, C++, Bash, Go, Java, Kotlin
5
+ */
6
+ import fs from 'node:fs';
7
+ import path from 'node:path';
8
+ import { createRequire } from 'node:module';
9
+ import Parser from 'tree-sitter';
10
+ import { Symbol, ParsedFile, SymbolType } from '../core/models.js';
11
+ import { getLanguageForFile, getConfigForLanguage, getSupportedExtensions, } from './language-configs.js';
12
+ // Use createRequire for synchronous grammar loading in ESM
13
+ const require = createRequire(import.meta.url);
14
+ const GRAMMAR_PACKAGES = {
15
+ // Core languages
16
+ python: 'tree-sitter-python',
17
+ javascript: 'tree-sitter-javascript',
18
+ typescript: 'tree-sitter-typescript',
19
+ c: 'tree-sitter-c',
20
+ cpp: 'tree-sitter-cpp',
21
+ bash: 'tree-sitter-bash',
22
+ go: 'tree-sitter-go',
23
+ java: 'tree-sitter-java',
24
+ kotlin: 'tree-sitter-kotlin',
25
+ // Extended languages
26
+ rust: 'tree-sitter-rust',
27
+ ruby: 'tree-sitter-ruby',
28
+ csharp: 'tree-sitter-c-sharp',
29
+ php: 'tree-sitter-php',
30
+ scala: 'tree-sitter-scala',
31
+ swift: 'tree-sitter-swift',
32
+ lua: 'tree-sitter-lua',
33
+ dart: 'tree-sitter-dart',
34
+ elixir: 'tree-sitter-elixir',
35
+ haskell: 'tree-sitter-haskell',
36
+ ocaml: 'tree-sitter-ocaml',
37
+ zig: 'tree-sitter-zig',
38
+ perl: 'tree-sitter-perl',
39
+ // Markup/Config
40
+ css: 'tree-sitter-css',
41
+ html: 'tree-sitter-html',
42
+ vue: 'tree-sitter-vue',
43
+ json: 'tree-sitter-json',
44
+ yaml: 'tree-sitter-yaml',
45
+ toml: 'tree-sitter-toml',
46
+ make: 'tree-sitter-make',
47
+ };
48
+ // ─── TreeSitterParser ────────────────────────────────────────────────────────
49
+ /** Maximum characters for code snippets (~1000-1300 tokens). */
50
+ const MAX_CODE_SNIPPET_CHARS = 4000;
51
+ /** Maximum file size before warning (10 MB). */
52
+ const MAX_FILE_SIZE_MB = 10;
53
+ // Pre-loaded grammars from async import (ESM-only packages like tree-sitter-css)
54
+ const preloadedGrammars = new Map();
55
+ export class TreeSitterParser {
56
+ parsers = new Map();
57
+ failedLanguages = new Set();
58
+ canParse(filepath) {
59
+ return getLanguageForFile(filepath) !== undefined;
60
+ }
61
+ parseFile(filepath) {
62
+ const startTime = performance.now();
63
+ // Validate file exists
64
+ if (!fs.existsSync(filepath)) {
65
+ throw new Error(`File not found: ${filepath}`);
66
+ }
67
+ // Detect language
68
+ const language = getLanguageForFile(filepath);
69
+ if (!language) {
70
+ const ext = path.extname(filepath);
71
+ return new ParsedFile({
72
+ filepath,
73
+ language: 'unknown',
74
+ error: `Unsupported file type: ${ext}`,
75
+ parseTime: (performance.now() - startTime) / 1000,
76
+ });
77
+ }
78
+ // Check file size
79
+ const stat = fs.statSync(filepath);
80
+ const fileSizeMb = stat.size / (1024 * 1024);
81
+ if (fileSizeMb > MAX_FILE_SIZE_MB) {
82
+ console.warn(`Large file (${fileSizeMb.toFixed(2)}MB): ${filepath}. Parsing may be slow.`);
83
+ }
84
+ // Read file content
85
+ let content;
86
+ try {
87
+ content = fs.readFileSync(filepath);
88
+ if (isBinaryFile(content)) {
89
+ return new ParsedFile({
90
+ filepath,
91
+ language,
92
+ error: 'Binary file detected - cannot parse',
93
+ parseTime: (performance.now() - startTime) / 1000,
94
+ });
95
+ }
96
+ }
97
+ catch (e) {
98
+ return new ParsedFile({
99
+ filepath,
100
+ language,
101
+ error: `Error reading file: ${e.message}`,
102
+ parseTime: (performance.now() - startTime) / 1000,
103
+ });
104
+ }
105
+ // Skip languages that already failed (don't retry every file)
106
+ if (this.failedLanguages.has(language)) {
107
+ return new ParsedFile({
108
+ filepath,
109
+ language,
110
+ parseTime: (performance.now() - startTime) / 1000,
111
+ });
112
+ }
113
+ // Get or create parser
114
+ let parser;
115
+ let config;
116
+ try {
117
+ parser = this.getParser(language);
118
+ config = getConfigForLanguage(language);
119
+ }
120
+ catch (e) {
121
+ this.failedLanguages.add(language);
122
+ return new ParsedFile({
123
+ filepath,
124
+ language,
125
+ error: `Failed to initialize parser: ${e.message}`,
126
+ parseTime: (performance.now() - startTime) / 1000,
127
+ });
128
+ }
129
+ // Parse the file
130
+ try {
131
+ const tree = parser.parse(content.toString('utf-8'));
132
+ const rootNode = tree.rootNode;
133
+ const symbols = this.extractSymbols(rootNode, content, filepath, language, config);
134
+ const imports = this.extractImports(rootNode, content, config);
135
+ return new ParsedFile({
136
+ filepath,
137
+ language,
138
+ symbols,
139
+ imports,
140
+ parseTime: (performance.now() - startTime) / 1000,
141
+ });
142
+ }
143
+ catch (e) {
144
+ return new ParsedFile({
145
+ filepath,
146
+ language,
147
+ error: `Parsing error: ${e.message}`,
148
+ parseTime: (performance.now() - startTime) / 1000,
149
+ });
150
+ }
151
+ }
152
+ getSupportedExtensions() {
153
+ return [...getSupportedExtensions()].sort();
154
+ }
155
+ getParser(language) {
156
+ if (this.parsers.has(language)) {
157
+ return this.parsers.get(language);
158
+ }
159
+ // Check if grammar was pre-loaded via initLanguages()
160
+ const preloaded = preloadedGrammars.get(language);
161
+ if (preloaded) {
162
+ const parser = new Parser();
163
+ parser.setLanguage(preloaded);
164
+ this.parsers.set(language, parser);
165
+ return parser;
166
+ }
167
+ const parser = new Parser();
168
+ const packageName = GRAMMAR_PACKAGES[language];
169
+ if (!packageName) {
170
+ throw new Error(`No grammar package for language: ${language}`);
171
+ }
172
+ let grammar;
173
+ try {
174
+ grammar = require(packageName);
175
+ }
176
+ catch {
177
+ throw new Error(`Grammar not loaded: ${packageName}. Call initLanguages() first.`);
178
+ }
179
+ // Some packages export language variants as named properties
180
+ grammar = resolveGrammarVariant(language, grammar);
181
+ try {
182
+ parser.setLanguage(grammar);
183
+ }
184
+ catch {
185
+ throw new Error(`Grammar for ${language} (${packageName}) is incompatible. ` +
186
+ `Try: npm install ${packageName}@latest`);
187
+ }
188
+ this.parsers.set(language, parser);
189
+ return parser;
190
+ }
191
+ /**
192
+ * Pre-load all grammar packages (handles both CJS and ESM-only packages).
193
+ * Call once at startup before parsing files.
194
+ */
195
+ async initLanguages() {
196
+ const loaded = [];
197
+ const failed = [];
198
+ for (const [language, packageName] of Object.entries(GRAMMAR_PACKAGES)) {
199
+ if (this.parsers.has(language) || preloadedGrammars.has(language)) {
200
+ loaded.push(language);
201
+ continue;
202
+ }
203
+ try {
204
+ // Try require first (CJS packages)
205
+ let grammar;
206
+ try {
207
+ grammar = require(packageName);
208
+ }
209
+ catch {
210
+ // Fallback to dynamic import (ESM-only packages like tree-sitter-css)
211
+ const mod = await import(packageName);
212
+ grammar = mod.default ?? mod;
213
+ }
214
+ grammar = resolveGrammarVariant(language, grammar);
215
+ const p = new Parser();
216
+ p.setLanguage(grammar);
217
+ this.parsers.set(language, p);
218
+ preloadedGrammars.set(language, grammar);
219
+ loaded.push(language);
220
+ }
221
+ catch {
222
+ failed.push(language);
223
+ }
224
+ }
225
+ return { loaded, failed };
226
+ }
227
+ // ─── Symbol Extraction ───────────────────────────────────────────────────
228
+ extractSymbols(rootNode, content, filepath, language, config) {
229
+ const symbols = [];
230
+ const classStack = [];
231
+ let currentClass;
232
+ const functionTypes = config.functionTypes;
233
+ const classTypes = config.classTypes;
234
+ const methodTypes = config.methodTypes;
235
+ const constantTypes = config.constantTypes ?? [];
236
+ const traverse = (node) => {
237
+ const nodeType = node.type;
238
+ if (classTypes.includes(nodeType)) {
239
+ const symbol = this.extractClassSymbol(node, content, filepath, language, config);
240
+ if (symbol) {
241
+ symbols.push(symbol);
242
+ classStack.push(symbol.name);
243
+ currentClass = symbol.name;
244
+ }
245
+ }
246
+ else if (functionTypes.includes(nodeType) && !currentClass) {
247
+ const symbol = this.extractFunctionSymbol(node, content, filepath, language, config);
248
+ if (symbol)
249
+ symbols.push(symbol);
250
+ }
251
+ else if (methodTypes.includes(nodeType) && currentClass) {
252
+ const symbol = this.extractFunctionSymbol(node, content, filepath, language, config, currentClass, true);
253
+ if (symbol)
254
+ symbols.push(symbol);
255
+ }
256
+ else if (constantTypes.includes(nodeType) && !currentClass) {
257
+ const symbol = this.extractConstantSymbol(node, content, filepath, language, config);
258
+ if (symbol)
259
+ symbols.push(symbol);
260
+ }
261
+ for (const child of node.children) {
262
+ traverse(child);
263
+ }
264
+ if (classTypes.includes(nodeType) && classStack.length > 0) {
265
+ classStack.pop();
266
+ currentClass = classStack.length > 0 ? classStack[classStack.length - 1] : undefined;
267
+ }
268
+ };
269
+ traverse(rootNode);
270
+ return symbols;
271
+ }
272
+ extractClassSymbol(node, content, filepath, language, config) {
273
+ const name = this.getNodeName(node, content, config);
274
+ if (!name)
275
+ return undefined;
276
+ const lineStart = node.startPosition.row + 1;
277
+ const lineEnd = node.endPosition.row + 1;
278
+ const signature = this.getNodeText(node, content).split('\n')[0].trim();
279
+ const docstring = this.extractDocstring(node, content, config);
280
+ const codeSnippet = this.getCodeSnippet(node, content);
281
+ const imports = this.extractImportsFromNode(node, content, config);
282
+ const calls = this.extractCallsFromNode(node, content, config);
283
+ return new Symbol({
284
+ name,
285
+ type: SymbolType.CLASS,
286
+ filepath,
287
+ lineStart,
288
+ lineEnd,
289
+ language,
290
+ signature,
291
+ docstring,
292
+ codeSnippet,
293
+ imports,
294
+ calls,
295
+ });
296
+ }
297
+ extractFunctionSymbol(node, content, filepath, language, config, parent, isMethod = false) {
298
+ const name = this.getNodeName(node, content, config);
299
+ if (!name)
300
+ return undefined;
301
+ const lineStart = node.startPosition.row + 1;
302
+ const lineEnd = node.endPosition.row + 1;
303
+ const signature = this.getNodeText(node, content).split('\n')[0].trim();
304
+ const docstring = this.extractDocstring(node, content, config);
305
+ const codeSnippet = this.getCodeSnippet(node, content);
306
+ const imports = this.extractImportsFromNode(node, content, config);
307
+ const calls = this.extractCallsFromNode(node, content, config);
308
+ return new Symbol({
309
+ name,
310
+ type: isMethod ? SymbolType.METHOD : SymbolType.FUNCTION,
311
+ filepath,
312
+ lineStart,
313
+ lineEnd,
314
+ language,
315
+ signature,
316
+ docstring,
317
+ parent,
318
+ codeSnippet,
319
+ imports,
320
+ calls,
321
+ });
322
+ }
323
+ extractConstantSymbol(node, content, filepath, language, config) {
324
+ const fullText = this.getNodeText(node, content).trim();
325
+ let name;
326
+ if (language === 'python') {
327
+ for (const child of node.children) {
328
+ if (child.type === 'assignment') {
329
+ for (const subchild of child.children) {
330
+ if (subchild.type === 'identifier') {
331
+ const potentialName = this.getNodeText(subchild, content);
332
+ if (isUpperCase(potentialName))
333
+ name = potentialName;
334
+ break;
335
+ }
336
+ }
337
+ break;
338
+ }
339
+ }
340
+ }
341
+ else if (language === 'javascript' || language === 'typescript') {
342
+ if (fullText.startsWith('const ')) {
343
+ for (const child of node.children) {
344
+ if (child.type === 'variable_declarator') {
345
+ for (const subchild of child.children) {
346
+ if (subchild.type === 'identifier') {
347
+ const potentialName = this.getNodeText(subchild, content);
348
+ if (isUpperCase(potentialName))
349
+ name = potentialName;
350
+ break;
351
+ }
352
+ }
353
+ break;
354
+ }
355
+ }
356
+ }
357
+ }
358
+ else if (language === 'go') {
359
+ const constNames = [];
360
+ for (const child of node.children) {
361
+ if (child.type === 'const_spec') {
362
+ for (const subchild of child.children) {
363
+ if (subchild.type === 'identifier') {
364
+ constNames.push(this.getNodeText(subchild, content));
365
+ break;
366
+ }
367
+ }
368
+ }
369
+ }
370
+ if (constNames.length > 0)
371
+ name = constNames.join(', ');
372
+ }
373
+ else if (language === 'bash') {
374
+ if (node.type === 'declaration_command') {
375
+ for (const child of node.children) {
376
+ if (child.type === 'variable_assignment') {
377
+ for (const subchild of child.children) {
378
+ if (subchild.type === 'variable_name') {
379
+ const potentialName = this.getNodeText(subchild, content);
380
+ if (isUpperCase(potentialName))
381
+ name = potentialName;
382
+ break;
383
+ }
384
+ }
385
+ break;
386
+ }
387
+ }
388
+ }
389
+ }
390
+ if (!name)
391
+ return undefined;
392
+ return new Symbol({
393
+ name,
394
+ type: SymbolType.VARIABLE,
395
+ filepath,
396
+ lineStart: node.startPosition.row + 1,
397
+ lineEnd: node.endPosition.row + 1,
398
+ language,
399
+ signature: fullText,
400
+ docstring: '',
401
+ codeSnippet: fullText,
402
+ imports: [],
403
+ calls: [],
404
+ });
405
+ }
406
+ // ─── Imports and Calls ─────────────────────────────────────────────────
407
+ extractImports(rootNode, content, config) {
408
+ const imports = [];
409
+ const importTypes = config.importTypes;
410
+ const traverse = (node) => {
411
+ if (importTypes.includes(node.type)) {
412
+ const importText = this.getNodeText(node, content).trim();
413
+ if (importText && !imports.includes(importText)) {
414
+ imports.push(importText);
415
+ }
416
+ }
417
+ for (const child of node.children) {
418
+ traverse(child);
419
+ }
420
+ };
421
+ traverse(rootNode);
422
+ return imports;
423
+ }
424
+ extractImportsFromNode(node, content, config) {
425
+ const imports = [];
426
+ const importTypes = config.importTypes;
427
+ const traverse = (n) => {
428
+ if (importTypes.includes(n.type)) {
429
+ const importText = this.getNodeText(n, content).trim();
430
+ if (importText && !imports.includes(importText)) {
431
+ imports.push(importText);
432
+ }
433
+ }
434
+ for (const child of n.children) {
435
+ traverse(child);
436
+ }
437
+ };
438
+ traverse(node);
439
+ return imports;
440
+ }
441
+ extractCallsFromNode(node, content, config) {
442
+ const calls = new Set();
443
+ const callTypes = config.callTypes;
444
+ const traverse = (n) => {
445
+ if (callTypes.includes(n.type)) {
446
+ const callName = this.getCallName(n, content);
447
+ if (callName)
448
+ calls.add(callName);
449
+ }
450
+ for (const child of n.children) {
451
+ traverse(child);
452
+ }
453
+ };
454
+ traverse(node);
455
+ return [...calls].sort();
456
+ }
457
+ getCallName(callNode, content) {
458
+ for (const child of callNode.children) {
459
+ if (['identifier', 'name', 'word', 'field_identifier'].includes(child.type)) {
460
+ return this.getNodeText(child, content).trim();
461
+ }
462
+ if (child.type === 'attribute') {
463
+ for (const subchild of child.children) {
464
+ if (['identifier', 'property_identifier', 'field_identifier'].includes(subchild.type)) {
465
+ return this.getNodeText(subchild, content).trim();
466
+ }
467
+ }
468
+ }
469
+ if (child.type === 'member_expression') {
470
+ for (const subchild of child.children) {
471
+ if (['property_identifier', 'identifier'].includes(subchild.type)) {
472
+ return this.getNodeText(subchild, content).trim();
473
+ }
474
+ }
475
+ }
476
+ if (child.type === 'selector_expression') {
477
+ for (const subchild of child.children) {
478
+ if (['field_identifier', 'identifier'].includes(subchild.type)) {
479
+ return this.getNodeText(subchild, content).trim();
480
+ }
481
+ }
482
+ }
483
+ }
484
+ if (callNode.childCount > 0) {
485
+ return this.getNodeText(callNode.children[0], content).trim().split('(')[0];
486
+ }
487
+ return undefined;
488
+ }
489
+ // ─── Helpers ───────────────────────────────────────────────────────────
490
+ extractDocstring(node, content, config) {
491
+ const body = this.getBodyNode(node, config);
492
+ if (!body)
493
+ return '';
494
+ for (const child of body.children) {
495
+ if (child.type === 'expression_statement') {
496
+ for (const subchild of child.children) {
497
+ if (['string', 'string_literal'].includes(subchild.type)) {
498
+ return cleanDocstring(this.getNodeText(subchild, content));
499
+ }
500
+ }
501
+ }
502
+ else if (['string', 'string_literal', 'comment'].includes(child.type)) {
503
+ return cleanDocstring(this.getNodeText(child, content));
504
+ }
505
+ }
506
+ return '';
507
+ }
508
+ getBodyNode(node, config) {
509
+ const bodyTypes = ['block', 'body', 'compound_statement', 'statement_block'];
510
+ for (const child of node.children) {
511
+ if (bodyTypes.includes(child.type))
512
+ return child;
513
+ }
514
+ const bodyField = config.bodyField;
515
+ const body = node.childForFieldName(bodyField);
516
+ if (body)
517
+ return body;
518
+ return undefined;
519
+ }
520
+ getNodeName(node, content, config) {
521
+ // Try field-based access
522
+ const nameNode = node.childForFieldName('name');
523
+ if (nameNode)
524
+ return this.getNodeText(nameNode, content).trim();
525
+ // Try finding identifier child
526
+ const idTypes = ['identifier', 'name', 'type_identifier', 'field_identifier', 'property_identifier'];
527
+ for (const child of node.children) {
528
+ if (idTypes.includes(child.type)) {
529
+ return this.getNodeText(child, content).trim();
530
+ }
531
+ }
532
+ // For C/C++ functions with declarators
533
+ for (const child of node.children) {
534
+ if (['declarator', 'function_declarator'].includes(child.type)) {
535
+ return this.getNodeName(child, content, config);
536
+ }
537
+ }
538
+ return undefined;
539
+ }
540
+ getNodeText(node, content) {
541
+ return content.subarray(node.startIndex, node.endIndex).toString('utf-8');
542
+ }
543
+ getCodeSnippet(node, content) {
544
+ const text = this.getNodeText(node, content);
545
+ if (text.length > MAX_CODE_SNIPPET_CHARS) {
546
+ return text.substring(0, MAX_CODE_SNIPPET_CHARS) + '...';
547
+ }
548
+ return text;
549
+ }
550
+ }
551
+ // ─── Utility Functions ───────────────────────────────────────────────────────
552
+ function resolveGrammarVariant(language, grammar) {
553
+ if (language === 'typescript' && grammar.typescript)
554
+ return grammar.typescript;
555
+ if (language === 'php' && grammar.php)
556
+ return grammar.php;
557
+ if (language === 'ocaml' && grammar.ocaml)
558
+ return grammar.ocaml;
559
+ return grammar;
560
+ }
561
+ function isBinaryFile(content) {
562
+ const sample = content.subarray(0, 8192);
563
+ if (sample.includes(0))
564
+ return true;
565
+ try {
566
+ sample.toString('utf-8');
567
+ return false;
568
+ }
569
+ catch {
570
+ let textChars = 0;
571
+ for (const b of sample) {
572
+ if ((b >= 32 && b < 127) || b === 9 || b === 10 || b === 13)
573
+ textChars++;
574
+ }
575
+ return sample.length > 0 && textChars / sample.length < 0.7;
576
+ }
577
+ }
578
+ function isUpperCase(name) {
579
+ return name === name.toUpperCase() && /[A-Z]/.test(name);
580
+ }
581
+ function cleanDocstring(raw) {
582
+ let cleaned = raw.trim();
583
+ // Remove triple quotes
584
+ for (const quote of ['"""', "'''"]) {
585
+ if (cleaned.startsWith(quote) && cleaned.endsWith(quote)) {
586
+ cleaned = cleaned.slice(3, -3);
587
+ break;
588
+ }
589
+ }
590
+ // Remove single quotes
591
+ for (const quote of ['"', "'"]) {
592
+ if (cleaned.startsWith(quote) && cleaned.endsWith(quote)) {
593
+ cleaned = cleaned.slice(1, -1);
594
+ break;
595
+ }
596
+ }
597
+ cleaned = cleaned.trim();
598
+ // Extract first line/paragraph
599
+ const lines = cleaned.split('\n').map(l => l.trim()).filter(l => l.length > 0);
600
+ return lines.length > 0 ? lines[0] : cleaned;
601
+ }
602
+ //# sourceMappingURL=treesitter-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treesitter-parser.js","sourceRoot":"","sources":["../../src/parsers/treesitter-parser.ts"],"names":[],"mappings":"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"}