@cesarandreslopez/occ 0.10.0 → 0.11.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 (135) hide show
  1. package/README.md +17 -3
  2. package/dist/src/cli.d.ts +16 -0
  3. package/dist/src/cli.js +46 -4
  4. package/dist/src/cli.js.map +1 -1
  5. package/dist/src/code/build.d.ts +22 -0
  6. package/dist/src/code/build.js +47 -13
  7. package/dist/src/code/build.js.map +1 -1
  8. package/dist/src/code/cache.js +30 -1
  9. package/dist/src/code/cache.js.map +1 -1
  10. package/dist/src/code/check.js +46 -6
  11. package/dist/src/code/check.js.map +1 -1
  12. package/dist/src/code/command.js +96 -68
  13. package/dist/src/code/command.js.map +1 -1
  14. package/dist/src/code/context.d.ts +54 -0
  15. package/dist/src/code/context.js +67 -0
  16. package/dist/src/code/context.js.map +1 -0
  17. package/dist/src/code/diff.d.ts +12 -2
  18. package/dist/src/code/diff.js +15 -3
  19. package/dist/src/code/diff.js.map +1 -1
  20. package/dist/src/code/discover.d.ts +2 -2
  21. package/dist/src/code/discover.js +8 -10
  22. package/dist/src/code/discover.js.map +1 -1
  23. package/dist/src/code/focus.js +34 -26
  24. package/dist/src/code/focus.js.map +1 -1
  25. package/dist/src/code/incremental.js +1 -1
  26. package/dist/src/code/incremental.js.map +1 -1
  27. package/dist/src/code/index-io.js +10 -2
  28. package/dist/src/code/index-io.js.map +1 -1
  29. package/dist/src/code/isolated-chunk-runner.js +17 -2
  30. package/dist/src/code/isolated-chunk-runner.js.map +1 -1
  31. package/dist/src/code/isolated-runner.js +17 -3
  32. package/dist/src/code/isolated-runner.js.map +1 -1
  33. package/dist/src/code/isolated.js +32 -6
  34. package/dist/src/code/isolated.js.map +1 -1
  35. package/dist/src/code/languages.js +23 -3
  36. package/dist/src/code/languages.js.map +1 -1
  37. package/dist/src/code/map.d.ts +47 -0
  38. package/dist/src/code/map.js +155 -12
  39. package/dist/src/code/map.js.map +1 -1
  40. package/dist/src/code/parsers.js +115 -36
  41. package/dist/src/code/parsers.js.map +1 -1
  42. package/dist/src/code/preview.js +24 -22
  43. package/dist/src/code/preview.js.map +1 -1
  44. package/dist/src/code/query.js +0 -0
  45. package/dist/src/code/query.js.map +1 -1
  46. package/dist/src/code/search.d.ts +39 -0
  47. package/dist/src/code/search.js +154 -0
  48. package/dist/src/code/search.js.map +1 -0
  49. package/dist/src/code/session.d.ts +6 -2
  50. package/dist/src/code/session.js +12 -4
  51. package/dist/src/code/session.js.map +1 -1
  52. package/dist/src/code/slim.d.ts +2 -0
  53. package/dist/src/code/slim.js +16 -1
  54. package/dist/src/code/slim.js.map +1 -1
  55. package/dist/src/code/store.d.ts +23 -0
  56. package/dist/src/code/store.js +61 -6
  57. package/dist/src/code/store.js.map +1 -1
  58. package/dist/src/code/tree-sitter.d.ts +1 -0
  59. package/dist/src/code/tree-sitter.js +11 -10
  60. package/dist/src/code/tree-sitter.js.map +1 -1
  61. package/dist/src/code/types.d.ts +3 -0
  62. package/dist/src/code/types.js +2 -0
  63. package/dist/src/code/types.js.map +1 -1
  64. package/dist/src/doc/batch.d.ts +2 -0
  65. package/dist/src/doc/batch.js +3 -1
  66. package/dist/src/doc/batch.js.map +1 -1
  67. package/dist/src/doc/discover.js +2 -2
  68. package/dist/src/doc/discover.js.map +1 -1
  69. package/dist/src/doc/inspect-odt.js +3 -1
  70. package/dist/src/doc/inspect-odt.js.map +1 -1
  71. package/dist/src/doc/inspect-pdf.d.ts +6 -0
  72. package/dist/src/doc/inspect-pdf.js +11 -1
  73. package/dist/src/doc/inspect-pdf.js.map +1 -1
  74. package/dist/src/doc/inspect.js +2 -2
  75. package/dist/src/doc/inspect.js.map +1 -1
  76. package/dist/src/doc/types.d.ts +1 -0
  77. package/dist/src/doc/types.js +7 -0
  78. package/dist/src/doc/types.js.map +1 -1
  79. package/dist/src/git/api.d.ts +2 -1
  80. package/dist/src/git/api.js +15 -9
  81. package/dist/src/git/api.js.map +1 -1
  82. package/dist/src/git/client.js +5 -1
  83. package/dist/src/git/client.js.map +1 -1
  84. package/dist/src/git/output.js +2 -1
  85. package/dist/src/git/output.js.map +1 -1
  86. package/dist/src/git/parse.js +131 -2
  87. package/dist/src/git/parse.js.map +1 -1
  88. package/dist/src/git/types.d.ts +5 -5
  89. package/dist/src/health.d.ts +8 -0
  90. package/dist/src/health.js +12 -0
  91. package/dist/src/health.js.map +1 -1
  92. package/dist/src/index.d.ts +14 -6
  93. package/dist/src/index.js +9 -3
  94. package/dist/src/index.js.map +1 -1
  95. package/dist/src/inspect/xlsx-cells.js +4 -2
  96. package/dist/src/inspect/xlsx-cells.js.map +1 -1
  97. package/dist/src/markdown/convert.d.ts +9 -0
  98. package/dist/src/markdown/convert.js +23 -1
  99. package/dist/src/markdown/convert.js.map +1 -1
  100. package/dist/src/parsers/odf.js +4 -2
  101. package/dist/src/parsers/odf.js.map +1 -1
  102. package/dist/src/skills/command.d.ts +6 -0
  103. package/dist/src/skills/command.js +18 -3
  104. package/dist/src/skills/command.js.map +1 -1
  105. package/dist/src/slide/inspect-odp.js +3 -2
  106. package/dist/src/slide/inspect-odp.js.map +1 -1
  107. package/dist/src/slide/inspect-pptx.js +4 -3
  108. package/dist/src/slide/inspect-pptx.js.map +1 -1
  109. package/dist/src/stats.js +3 -1
  110. package/dist/src/stats.js.map +1 -1
  111. package/dist/src/structure/extract.js +16 -3
  112. package/dist/src/structure/extract.js.map +1 -1
  113. package/dist/src/utils.d.ts +7 -0
  114. package/dist/src/utils.js +19 -0
  115. package/dist/src/utils.js.map +1 -1
  116. package/dist/src/walker.js +15 -3
  117. package/dist/src/walker.js.map +1 -1
  118. package/dist/src/workspace/analyze.d.ts +3 -0
  119. package/dist/src/workspace/analyze.js +26 -15
  120. package/dist/src/workspace/analyze.js.map +1 -1
  121. package/dist/src/workspace/bundle.js +11 -3
  122. package/dist/src/workspace/bundle.js.map +1 -1
  123. package/dist/src/workspace/command.d.ts +6 -0
  124. package/dist/src/workspace/command.js +73 -44
  125. package/dist/src/workspace/command.js.map +1 -1
  126. package/dist/src/workspace/describe.js +22 -13
  127. package/dist/src/workspace/describe.js.map +1 -1
  128. package/dist/src/workspace/documents.d.ts +3 -0
  129. package/dist/src/workspace/documents.js +25 -14
  130. package/dist/src/workspace/documents.js.map +1 -1
  131. package/dist/src/workspace/prepare.js +3 -1
  132. package/dist/src/workspace/prepare.js.map +1 -1
  133. package/package.json +11 -11
  134. package/skills/occ/SKILL.md +2 -1
  135. package/skills/occ/reference/code.md +41 -1
@@ -12,8 +12,10 @@
12
12
  * Token counting is injected (`countTokens`) so a real BPE tokenizer can
13
13
  * enforce an exact budget; it defaults to the language-aware heuristic.
14
14
  */
15
+ import path from 'node:path';
15
16
  import { z } from 'zod';
16
17
  import { estimateTokenCount } from '../tokens.js';
18
+ import { getGitDiffSummary } from '../git/api.js';
17
19
  import { extractKeySection } from './query.js';
18
20
  import { toNormalizedSymbolKind } from './types.js';
19
21
  import { rankNodesCached, RankOptionsSchema } from './rank.js';
@@ -194,6 +196,57 @@ function buildContentEntry(file, charBudget) {
194
196
  return null;
195
197
  }
196
198
  }
199
+ /** Mirrors the focus descriptor the markdown/plain header renders, so its chrome is reserved accurately. */
200
+ function chromeFocusDescriptor(focus) {
201
+ const parts = [];
202
+ if (focus.query)
203
+ parts.push(`query "${focus.query}"`);
204
+ if (focus.paths.length > 0)
205
+ parts.push(`${focus.paths.length} path(s)`);
206
+ const what = parts.length > 0 ? parts.join(' + ') : 'focus';
207
+ return `${what}, ${focus.matchedFiles} matched`;
208
+ }
209
+ /**
210
+ * Fixed and per-entry token overhead the format renderer wraps around the entry
211
+ * bodies — the header line, block separators, truncation footer, and trailing
212
+ * newline. The emitted document (not just the summed entry bodies) must fit the
213
+ * budget, so this overhead is reserved before entries are admitted. Numeric
214
+ * fields use budget / total-file upper bounds and the widest tokenizer suffix so
215
+ * the reservation never underestimates the rendered chrome. `json` output is a
216
+ * structural serialization unrelated to the entry markdown, so it reserves
217
+ * nothing.
218
+ */
219
+ function documentChromeReserve(format, budget, totalFiles, focus, countTokens) {
220
+ if (format === 'json')
221
+ return { fixed: 0, perEntry: 0 };
222
+ const filesField = `${totalFiles}/${totalFiles} files`;
223
+ const tokenField = `${budget}/${budget} tokens`;
224
+ const omitted = `${totalFiles} file(s) / ${totalFiles} symbol(s) omitted to fit the ${budget}-token budget.`;
225
+ const focusSuffix = focus ? ` — focus: ${chromeFocusDescriptor(focus)}` : '';
226
+ if (format === 'plain') {
227
+ const header = `Repo Map (${filesField}, ${tokenField})${focusSuffix}`;
228
+ return {
229
+ fixed: countTokens(header) + countTokens(omitted) + countTokens('\n') * 3,
230
+ perEntry: countTokens('\n') * 2,
231
+ };
232
+ }
233
+ if (format === 'xml') {
234
+ const open = `<repomap mode="pack" tokens="${budget}" budget="${budget}" files="${totalFiles}" totalFiles="${totalFiles}" truncated="true">`;
235
+ return {
236
+ fixed: countTokens(open) + countTokens('</repomap>') + countTokens('\n') * 2,
237
+ perEntry: countTokens('\n'),
238
+ };
239
+ }
240
+ // markdown: `# Repo Map — E/M files, U/B tokens[, tokenizer][ — focus: …]`,
241
+ // blocks joined by `\n\n`, an optional italic footer, and a trailing newline.
242
+ const header = `# Repo Map — ${filesField}, ${tokenField}, cl100k_base${focusSuffix}`;
243
+ const footer = `_${omitted}_`;
244
+ const separator = '\n\n';
245
+ return {
246
+ fixed: countTokens(header) + countTokens(footer) + countTokens(separator) * 3 + countTokens('\n'),
247
+ perEntry: countTokens(separator),
248
+ };
249
+ }
197
250
  /**
198
251
  * Build a token-budgeted, importance-ranked repo map (or pack) from an index.
199
252
  *
@@ -256,20 +309,32 @@ export function buildRepoMap(index, options) {
256
309
  let tokensUsed = 0;
257
310
  let droppedFiles = 0;
258
311
  let droppedSymbols = 0;
312
+ // Reserve the format's fixed document chrome (header/footer/separators) up
313
+ // front and charge each admitted entry its block separator, so the rendered
314
+ // document — not merely the summed entry bodies — stays within budget.
315
+ const chrome = documentChromeReserve(format, budget, ranking.fileScores.length, focusResult, countTokens);
316
+ const effectiveBudget = budget - chrome.fixed;
259
317
  for (const fileScore of orderedFileScores) {
260
318
  const file = fileByPath.get(fileScore.path);
261
319
  if (!file)
262
320
  continue;
263
- const remaining = budget - tokensUsed;
264
- if (remaining <= 0) {
265
- droppedFiles++;
266
- continue;
267
- }
268
321
  let symbols = orderedSymbolsForFile(file, rankedSymbolsByPath.get(file.path) ?? []);
269
322
  if (options.maxSymbolsPerFile != null && symbols.length > options.maxSymbolsPerFile) {
270
323
  droppedSymbols += symbols.length - options.maxSymbolsPerFile;
271
324
  symbols = symbols.slice(0, options.maxSymbolsPerFile);
272
325
  }
326
+ const remaining = effectiveBudget - tokensUsed;
327
+ if (remaining <= 0) {
328
+ // Budget already spent: nothing further can be admitted. Count only files
329
+ // that would have carried information — a no-symbol map file is skipped
330
+ // uncounted here exactly as it is on the normal path — and add every
331
+ // dropped file's symbols to droppedSymbols so all drop paths agree.
332
+ if (mode === 'map' && symbols.length === 0)
333
+ continue;
334
+ droppedFiles++;
335
+ droppedSymbols += symbols.length;
336
+ continue;
337
+ }
273
338
  let content;
274
339
  let contentReason;
275
340
  if (mode === 'pack') {
@@ -312,14 +377,14 @@ export function buildRepoMap(index, options) {
312
377
  return entry;
313
378
  };
314
379
  let entry = makeEntry(symbols, content);
315
- if (tokensUsed + entry.tokens <= budget) {
316
- tokensUsed += entry.tokens;
380
+ if (tokensUsed + entry.tokens + chrome.perEntry <= effectiveBudget) {
381
+ tokensUsed += entry.tokens + chrome.perEntry;
317
382
  entries.push(entry);
318
383
  continue;
319
384
  }
320
385
  // Partial admission — shrink until it fits or the file must be dropped.
321
386
  if (mode === 'pack' && content != null) {
322
- const shrunkBudget = Math.max(200, Math.floor((budget - tokensUsed) * APPROX_CHARS_PER_TOKEN * 0.9));
387
+ const shrunkBudget = Math.max(200, Math.floor((effectiveBudget - tokensUsed) * APPROX_CHARS_PER_TOKEN * 0.9));
323
388
  const shrunk = buildContentEntry(file, shrunkBudget);
324
389
  if (shrunk) {
325
390
  content = shrunk.content;
@@ -328,11 +393,20 @@ export function buildRepoMap(index, options) {
328
393
  }
329
394
  }
330
395
  else {
331
- // map mode: drop lowest-ranked symbols from the tail until it fits.
396
+ // map mode: drop lowest-ranked symbols from the tail until it fits. Locate
397
+ // the cut by subtracting each dropped symbol's line cost from the exact
398
+ // full-entry count already measured above (avoiding an O(S^2) re-render of
399
+ // the whole entry per step), then confirm the admitted prefix with an
400
+ // exact re-count.
332
401
  let kept = symbols.length;
402
+ let approxTokens = entry.tokens;
403
+ while (kept > 0 && tokensUsed + approxTokens + chrome.perEntry > effectiveBudget) {
404
+ kept--;
405
+ approxTokens -= countTokens(`\n- ${repoMapSignatureLine(symbols[kept])}`);
406
+ }
333
407
  while (kept > 0) {
334
408
  const trial = makeEntry(symbols.slice(0, kept));
335
- if (tokensUsed + trial.tokens <= budget) {
409
+ if (tokensUsed + trial.tokens + chrome.perEntry <= effectiveBudget) {
336
410
  entry = trial;
337
411
  break;
338
412
  }
@@ -346,8 +420,8 @@ export function buildRepoMap(index, options) {
346
420
  droppedSymbols += symbols.length - kept;
347
421
  entry.droppedSymbols = symbols.length - kept;
348
422
  }
349
- if (tokensUsed + entry.tokens <= budget) {
350
- tokensUsed += entry.tokens;
423
+ if (tokensUsed + entry.tokens + chrome.perEntry <= effectiveBudget) {
424
+ tokensUsed += entry.tokens + chrome.perEntry;
351
425
  entries.push(entry);
352
426
  }
353
427
  else {
@@ -370,4 +444,73 @@ export function buildRepoMap(index, options) {
370
444
  focus: focusResult,
371
445
  };
372
446
  }
447
+ // ---------------------------------------------------------------------------
448
+ // Changed-focus repo map
449
+ // ---------------------------------------------------------------------------
450
+ export const ChangedRepoMapRangeSchema = z.object({
451
+ /** Base ref to diff from (merge-base three-dot semantics, as in `git diff base...head`). */
452
+ base: z.string().optional(),
453
+ /** Head ref to diff to; defaults to HEAD. */
454
+ head: z.string().optional(),
455
+ /** Use staged changes instead of a ref range. */
456
+ staged: z.boolean().optional(),
457
+ });
458
+ /**
459
+ * Resolve a git change range into repo-map focus inputs. Split out from
460
+ * {@link buildChangedRepoMap} so callers holding a diff summary (or a CLI
461
+ * that already fetched one) can reuse the same merge/stamp semantics.
462
+ */
463
+ export function toRepoMapChangeContext(repoRoot, summary) {
464
+ const numstatByPath = new Map(summary.numstat.map(entry => [entry.path, entry]));
465
+ const focusPaths = [];
466
+ const churnByPath = new Map();
467
+ for (const file of summary.files) {
468
+ if (file.status === 'deleted')
469
+ continue;
470
+ const absolutePath = path.resolve(repoRoot, file.path);
471
+ const numstat = numstatByPath.get(file.path);
472
+ focusPaths.push(absolutePath);
473
+ churnByPath.set(absolutePath, {
474
+ added: numstat?.added ?? 0,
475
+ deleted: numstat?.deleted ?? 0,
476
+ binary: file.binary === true || numstat?.binary === true,
477
+ });
478
+ }
479
+ return { focusPaths, churnByPath };
480
+ }
481
+ /** Stamp changed/churn metadata onto admitted entries (idempotent). */
482
+ export function stampRepoMapChanges(result, context) {
483
+ for (const entry of result.entries) {
484
+ const churn = context.churnByPath.get(entry.path);
485
+ if (!churn)
486
+ continue;
487
+ entry.changed = true;
488
+ entry.churn = churn;
489
+ }
490
+ return result;
491
+ }
492
+ /**
493
+ * {@link buildRepoMap} focused on a git change range: files changed in the
494
+ * range are added to the focus set (merged with any caller-provided focus),
495
+ * and admitted entries carry `changed`/`churn` metadata. Async because it
496
+ * shells out to git for the diff summary; the map itself builds like any
497
+ * other repo map, so token budgeting is unchanged.
498
+ */
499
+ export async function buildChangedRepoMap(index, options) {
500
+ const { changed, ...mapOptions } = options;
501
+ const summary = await getGitDiffSummary({
502
+ repoRoot: index.repoRoot,
503
+ base: changed.base,
504
+ head: changed.head,
505
+ staged: changed.staged,
506
+ });
507
+ const context = toRepoMapChangeContext(index.repoRoot, summary);
508
+ const existingFocus = mapOptions.focus;
509
+ const mergedPaths = [...new Set([...(existingFocus?.paths ?? []), ...context.focusPaths])];
510
+ const focus = (existingFocus?.query ?? '').trim().length > 0 || mergedPaths.length > 0
511
+ ? { ...existingFocus, paths: mergedPaths }
512
+ : existingFocus;
513
+ const result = buildRepoMap(index, { ...mapOptions, focus });
514
+ return stampRepoMapChanges(result, context);
515
+ }
373
516
  //# sourceMappingURL=map.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/code/map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/code/map.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,20 @@ import { readFile, stat } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { getLanguageSpec, getModuleName, isAssetSpecifier, isLocalSpecifier, normalizePath, resolveLocalImport, resolvePythonImport, resolveTsconfigImport, } from './languages.js';
4
4
  import { collectTreeSitterTagCaptures, parseTreeSitterContent } from './tree-sitter.js';
5
+ /**
6
+ * Signals that a `.vue` single-file component could not be parsed because its
7
+ * SFC structure (template/script/style blocks) is malformed. Carries a
8
+ * human-readable reason so the file can be reported as skipped rather than
9
+ * aborting the surrounding batch.
10
+ */
11
+ class VueSfcParseError extends Error {
12
+ reason;
13
+ constructor(reason) {
14
+ super(reason);
15
+ this.name = 'VueSfcParseError';
16
+ this.reason = reason;
17
+ }
18
+ }
5
19
  const DEFAULT_MAX_FILE_SIZE_BYTES = 2_097_152;
6
20
  const DEFAULT_MAX_LINES = 25_000;
7
21
  const MINIFIED_FILE_MIN_BYTES = 4_096;
@@ -122,11 +136,21 @@ function buildFullSignature(sourceFile, node) {
122
136
  function getReturnTypeText(sourceFile, node) {
123
137
  return node.type ? node.type.getText(sourceFile) : undefined;
124
138
  }
139
+ function symbolIdentityKey(symbol) {
140
+ return [symbol.type, symbol.name, symbol.line, symbol.containerName ?? ''].join('\u0000');
141
+ }
142
+ // Dedup keys are tracked per target array so insertion stays O(1); the array
143
+ // itself preserves discovery order.
144
+ const symbolIdentityKeys = new WeakMap();
125
145
  function pushUniqueSymbol(symbols, next) {
126
- if (!symbols.some(symbol => symbol.type === next.type &&
127
- symbol.name === next.name &&
128
- symbol.line === next.line &&
129
- symbol.containerName === next.containerName)) {
146
+ let seen = symbolIdentityKeys.get(symbols);
147
+ if (!seen) {
148
+ seen = new Set(symbols.map(symbolIdentityKey));
149
+ symbolIdentityKeys.set(symbols, seen);
150
+ }
151
+ const key = symbolIdentityKey(next);
152
+ if (!seen.has(key)) {
153
+ seen.add(key);
130
154
  symbols.push(next);
131
155
  }
132
156
  }
@@ -429,9 +453,13 @@ function toPascalCase(value) {
429
453
  const result = words.map(word => `${word.slice(0, 1).toUpperCase()}${word.slice(1)}`).join('');
430
454
  return result || 'VueComponent';
431
455
  }
432
- function inferVueComponentName(filePath, content) {
433
- const explicit = content.match(/\bdefineOptions\s*\(\s*\{[\s\S]*?\bname\s*:\s*['"]([^'"]+)['"]/) ??
434
- content.match(/\bname\s*:\s*['"]([^'"]+)['"]/);
456
+ function inferVueComponentName(filePath, scriptContent) {
457
+ // Only trust a `name:` field when it sits inside a component-options object
458
+ // (defineOptions/defineComponent/export default), scoped to the script block —
459
+ // a bare `name:` anywhere else is usually unrelated data.
460
+ const explicit = scriptContent.match(/\bdefineOptions\s*\(\s*\{[\s\S]*?\bname\s*:\s*['"]([^'"]+)['"]/) ??
461
+ scriptContent.match(/\bdefineComponent\s*\(\s*\{[\s\S]*?\bname\s*:\s*['"]([^'"]+)['"]/) ??
462
+ scriptContent.match(/\bexport\s+default\s*\{[\s\S]*?\bname\s*:\s*['"]([^'"]+)['"]/);
435
463
  return explicit?.[1] ?? toPascalCase(path.basename(filePath));
436
464
  }
437
465
  function composeVueVirtualScript(content, blocks) {
@@ -453,7 +481,7 @@ async function parseVueFile(filePath, content, context) {
453
481
  if (errors.length > 0) {
454
482
  const firstError = errors[0];
455
483
  const message = firstError instanceof Error ? firstError.message : String(firstError);
456
- throw new Error(`Unable to parse Vue SFC ${filePath}: ${message}`);
484
+ throw new VueSfcParseError(`Unable to parse Vue SFC: ${message}`);
457
485
  }
458
486
  const relativePath = normalizePath(path.relative(context.repoRoot, filePath));
459
487
  const scriptContent = composeVueVirtualScript(content, [descriptor.script, descriptor.scriptSetup]);
@@ -474,7 +502,7 @@ async function parseVueFile(filePath, content, context) {
474
502
  parsed.language = 'vue';
475
503
  parsed.content = content;
476
504
  parsed.lines = content.split(/\r?\n/);
477
- const componentName = inferVueComponentName(filePath, content);
505
+ const componentName = inferVueComponentName(filePath, scriptContent);
478
506
  const componentLine = descriptor.script?.loc.start.line ?? descriptor.scriptSetup?.loc.start.line ?? 1;
479
507
  pushUniqueSymbol(parsed.symbols, {
480
508
  type: 'class',
@@ -486,6 +514,21 @@ async function parseVueFile(filePath, content, context) {
486
514
  });
487
515
  return parsed;
488
516
  }
517
+ // Parses a single Go import spec (the `"path"` / `alias "path"` fragment that
518
+ // follows `import` on a line or stands alone inside a grouped `import ( ... )`
519
+ // block). The alias may be an identifier, `_` (blank), or `.` (dot import).
520
+ function parseGoImportSpec(spec) {
521
+ const match = spec.match(/^(?:([A-Za-z0-9_.]+)\s+)?["`]([^"`]+)["`]/);
522
+ if (!match)
523
+ return undefined;
524
+ const specifier = match[2];
525
+ return {
526
+ specifier,
527
+ line: 0,
528
+ kind: 'external',
529
+ bindings: [{ localName: match[1] || specifier.split('/').at(-1) || specifier, importedName: specifier }],
530
+ };
531
+ }
489
532
  function parseImportsFromLine(line, language, context, filePath) {
490
533
  const imports = [];
491
534
  if (language === 'python') {
@@ -526,14 +569,11 @@ function parseImportsFromLine(line, language, context, filePath) {
526
569
  return imports;
527
570
  }
528
571
  if (language === 'go') {
529
- const match = line.match(/^import\s+(?:([A-Za-z0-9_]+)\s+)?["`](.+)["`]$/);
530
- if (match) {
531
- imports.push({
532
- specifier: match[2],
533
- line: 0,
534
- kind: 'external',
535
- bindings: [{ localName: match[1] || match[2].split('/').at(-1) || match[2], importedName: match[2] }],
536
- });
572
+ const single = line.match(/^import\s+(.+)$/);
573
+ if (single) {
574
+ const parsed = parseGoImportSpec(single[1].trim());
575
+ if (parsed)
576
+ imports.push(parsed);
537
577
  }
538
578
  return imports;
539
579
  }
@@ -550,7 +590,9 @@ function parseImportsFromLine(line, language, context, filePath) {
550
590
  }
551
591
  return imports;
552
592
  }
553
- const generic = line.match(/^(?:import|include|require)\s+["<]?([^">;]+)[">]?/);
593
+ // Strip an optional leading `#` so C/C++ `#include <...>` / `#include "..."`
594
+ // directives are recognized alongside plain import/require forms.
595
+ const generic = line.replace(/^#\s*/, '').match(/^(?:import|include|require)\s+["<]?([^">;]+)[">]?/);
554
596
  if (generic) {
555
597
  const specifier = generic[1].trim();
556
598
  imports.push({
@@ -562,6 +604,43 @@ function parseImportsFromLine(line, language, context, filePath) {
562
604
  }
563
605
  return imports;
564
606
  }
607
+ /**
608
+ * Extracts every import across `lines`, stamping each with its 1-based line
609
+ * number. Handles Go's grouped `import ( ... )` blocks, whose inner specs are
610
+ * bare quoted paths that no single-line pattern matches.
611
+ */
612
+ function collectImportsFromLines(lines, language, context, filePath) {
613
+ const imports = [];
614
+ let inGoImportBlock = false;
615
+ for (let index = 0; index < lines.length; index++) {
616
+ const trimmed = lines[index].trim();
617
+ const lineNumber = index + 1;
618
+ if (language === 'go') {
619
+ if (inGoImportBlock) {
620
+ if (trimmed.startsWith(')')) {
621
+ inGoImportBlock = false;
622
+ continue;
623
+ }
624
+ const grouped = parseGoImportSpec(trimmed);
625
+ if (grouped)
626
+ imports.push({ ...grouped, line: lineNumber });
627
+ continue;
628
+ }
629
+ if (/^import\s*\(\s*$/.test(trimmed)) {
630
+ inGoImportBlock = true;
631
+ continue;
632
+ }
633
+ }
634
+ for (const parsedImport of parseImportsFromLine(trimmed, language, context, filePath)) {
635
+ imports.push({
636
+ ...parsedImport,
637
+ line: lineNumber,
638
+ resolvedPath: parsedImport.resolvedPath ?? resolveImportPath(language, context, filePath, parsedImport.specifier),
639
+ });
640
+ }
641
+ }
642
+ return imports;
643
+ }
565
644
  function parseRegexFile(filePath, content, context) {
566
645
  const language = getLanguageSpec(filePath)?.name ?? 'generic';
567
646
  const relativePath = normalizePath(path.relative(context.repoRoot, filePath));
@@ -584,6 +663,10 @@ function parseRegexFile(filePath, content, context) {
584
663
  }
585
664
  return classStack[classStack.length - 1];
586
665
  };
666
+ // Imports are collected up front so grouped/multi-line forms (e.g. Go's
667
+ // `import ( ... )`) and directive lines skipped as comments below are still
668
+ // captured.
669
+ imports.push(...collectImportsFromLines(lines, language, context, filePath));
587
670
  for (let index = 0; index < lines.length; index++) {
588
671
  const line = lines[index];
589
672
  const lineNumber = index + 1;
@@ -591,13 +674,6 @@ function parseRegexFile(filePath, content, context) {
591
674
  const indent = line.match(/^\s*/)?.[0].length ?? 0;
592
675
  if (trimmed.length === 0 || trimmed.startsWith('#') || trimmed.startsWith('//'))
593
676
  continue;
594
- for (const parsedImport of parseImportsFromLine(trimmed, language, context, filePath)) {
595
- imports.push({
596
- ...parsedImport,
597
- line: lineNumber,
598
- resolvedPath: parsedImport.resolvedPath ?? resolveImportPath(language, context, filePath, parsedImport.specifier),
599
- });
600
- }
601
677
  if (language === 'python') {
602
678
  const classMatch = trimmed.match(/^class\s+([A-Za-z_][A-Za-z0-9_]*)(?:\(([^)]+)\))?:/);
603
679
  if (classMatch) {
@@ -910,15 +986,7 @@ async function parseTreeSitterFile(filePath, content, context, descriptor) {
910
986
  const classNodeTypes = new Set(descriptor.classNodeTypes);
911
987
  const callNodeTypes = new Set(descriptor.callNodeTypes);
912
988
  const tagIndex = await treeSitterTagIndex(descriptor.grammar, tree.rootNode);
913
- for (let index = 0; index < lines.length; index++) {
914
- for (const parsedImport of parseImportsFromLine(lines[index].trim(), language, context, filePath)) {
915
- imports.push({
916
- ...parsedImport,
917
- line: index + 1,
918
- resolvedPath: parsedImport.resolvedPath ?? resolveImportPath(language, context, filePath, parsedImport.specifier),
919
- });
920
- }
921
- }
989
+ imports.push(...collectImportsFromLines(lines, language, context, filePath));
922
990
  const visit = (node, containers, activeFunction) => {
923
991
  let nextContainers = containers;
924
992
  let nextFunction = activeFunction;
@@ -966,7 +1034,7 @@ async function parseTreeSitterFile(filePath, content, context, descriptor) {
966
1034
  }
967
1035
  for (const child of namedChildren(node))
968
1036
  visit(child, nextContainers, nextFunction);
969
- if (activeFunction && pendingCall?.calleeName && pendingCall.calleeName !== activeFunction.name) {
1037
+ if (activeFunction && pendingCall?.calleeName) {
970
1038
  calls.push({
971
1039
  callerName: activeFunction.name,
972
1040
  callerLine: activeFunction.line,
@@ -1031,7 +1099,18 @@ export async function parseCodeFile(filePath, context, guardrails = {}) {
1031
1099
  case 'typescript':
1032
1100
  return { kind: 'parsed', file: await parseTypescriptFile(filePath, content, context) };
1033
1101
  case 'vue':
1034
- return { kind: 'parsed', file: await parseVueFile(filePath, content, context) };
1102
+ try {
1103
+ return { kind: 'parsed', file: await parseVueFile(filePath, content, context) };
1104
+ }
1105
+ catch (error) {
1106
+ // A structurally broken SFC is reported as a skipped file rather than
1107
+ // aborting the surrounding batch, matching the other parsers' tolerance
1108
+ // of malformed input.
1109
+ if (error instanceof VueSfcParseError) {
1110
+ return { kind: 'skipped', reason: error.reason };
1111
+ }
1112
+ throw error;
1113
+ }
1035
1114
  case 'python':
1036
1115
  case 'go':
1037
1116
  case 'rust':