@codeledger/repo 0.2.0 → 0.5.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.
@@ -1 +1 @@
1
- {"version":3,"file":"dep-graph.d.ts","sourceRoot":"","sources":["../src/dep-graph.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAQ5D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,QAAQ,CAiC3G"}
1
+ {"version":3,"file":"dep-graph.d.ts","sourceRoot":"","sources":["../src/dep-graph.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AA8B5D,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,QAAQ,EAAE,EACjB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,QAAQ,CAmCV"}
package/dist/dep-graph.js CHANGED
@@ -1,14 +1,30 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { dirname, join } from 'node:path';
3
- // Matches: import ... from '...' / import '...' / require('...')
4
- // Also: export ... from '...'
5
- const IMPORT_RE = /(?:import|export)\s+(?:[\s\S]*?\s+from\s+)?['"]([^'"]+)['"]/g;
6
- const REQUIRE_RE = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
3
+ import { languageFamily, resolutionExtensions, indexFileNames } from './lang.js';
4
+ // ── JS/TS import regexes ────────────────────────────────────────────────────
5
+ const JS_IMPORT_RE = /(?:import|export)\s+(?:[\s\S]*?\s+from\s+)?['"]([^'"]+)['"]/g;
6
+ const JS_REQUIRE_RE = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
7
+ // ── Python import regexes ───────────────────────────────────────────────────
8
+ /** from foo.bar import baz (absolute) */
9
+ const PY_FROM_IMPORT_RE = /^from\s+([\w.]+)\s+import\b/gm;
10
+ /** import foo.bar */
11
+ const PY_IMPORT_RE = /^import\s+([\w.]+)/gm;
12
+ /** from . import foo, from ..utils import bar (relative) */
13
+ const PY_RELATIVE_IMPORT_RE = /^from\s+(\.+[\w.]*)\s+import\b/gm;
14
+ // ── Go import regexes ───────────────────────────────────────────────────────
15
+ /** Single-line: import "path/to/pkg" or import alias "path/to/pkg" */
16
+ const GO_SINGLE_IMPORT_RE = /import\s+(?:\w+\s+)?"([^"]+)"/g;
17
+ /** Multi-line: import ( ... ) */
18
+ const GO_IMPORT_BLOCK_RE = /import\s*\(([\s\S]*?)\)/g;
19
+ /** Lines within a multi-line block */
20
+ const GO_IMPORT_LINE_RE = /(?:\w+\s+)?"([^"]+)"/g;
21
+ // ─────────────────────────────────────────────────────────────────────────────
7
22
  export function buildDepGraph(root, files, contentCache) {
8
23
  const imports = {};
9
24
  const dependents = {};
10
- // Build path lookup set for fast resolution
11
25
  const fileSet = new Set(files.map((f) => f.path));
26
+ // Read go.mod once for Go import resolution
27
+ const goModPrefix = readGoModPrefix(root);
12
28
  for (const file of files) {
13
29
  let content;
14
30
  const cached = contentCache?.get(file.path);
@@ -24,7 +40,8 @@ export function buildDepGraph(root, files, contentCache) {
24
40
  continue;
25
41
  }
26
42
  }
27
- const resolved = extractImports(content, file.path, root, fileSet);
43
+ const family = languageFamily(file.language);
44
+ const resolved = extractImports(content, file.path, family, root, fileSet, goModPrefix);
28
45
  imports[file.path] = resolved;
29
46
  for (const dep of resolved) {
30
47
  if (!dependents[dep]) {
@@ -35,14 +52,26 @@ export function buildDepGraph(root, files, contentCache) {
35
52
  }
36
53
  return { imports, dependents };
37
54
  }
38
- function extractImports(content, filePath, root, fileSet) {
55
+ // ── Dispatch ────────────────────────────────────────────────────────────────
56
+ function extractImports(content, filePath, family, root, fileSet, goModPrefix) {
57
+ switch (family) {
58
+ case 'python':
59
+ return extractPythonImports(content, filePath, fileSet);
60
+ case 'go':
61
+ return extractGoImports(content, filePath, fileSet, goModPrefix);
62
+ default:
63
+ return extractJsImports(content, filePath, root, fileSet);
64
+ }
65
+ }
66
+ // ── JS/TS imports ───────────────────────────────────────────────────────────
67
+ function extractJsImports(content, filePath, root, fileSet) {
39
68
  const specifiers = new Set();
40
- for (const regex of [IMPORT_RE, REQUIRE_RE]) {
69
+ for (const regex of [JS_IMPORT_RE, JS_REQUIRE_RE]) {
41
70
  regex.lastIndex = 0;
42
71
  let match;
43
72
  while ((match = regex.exec(content)) !== null) {
44
73
  const spec = match[1];
45
- if (spec && isRelative(spec)) {
74
+ if (spec && isRelativeJs(spec)) {
46
75
  specifiers.add(spec);
47
76
  }
48
77
  }
@@ -50,24 +79,21 @@ function extractImports(content, filePath, root, fileSet) {
50
79
  const resolved = [];
51
80
  const dir = dirname(filePath);
52
81
  for (const spec of specifiers) {
53
- const target = resolveImport(dir, spec, root, fileSet);
82
+ const target = resolveJsImport(dir, spec, root, fileSet);
54
83
  if (target) {
55
84
  resolved.push(target);
56
85
  }
57
86
  }
58
87
  return resolved;
59
88
  }
60
- function isRelative(spec) {
89
+ function isRelativeJs(spec) {
61
90
  return spec.startsWith('./') || spec.startsWith('../');
62
91
  }
63
- function resolveImport(fromDir, spec, _root, fileSet) {
64
- // Resolve relative path
92
+ function resolveJsImport(fromDir, spec, _root, fileSet) {
65
93
  const base = join(fromDir, spec).replace(/\\/g, '/');
66
- // Try exact match first
67
94
  if (fileSet.has(base))
68
95
  return base;
69
- // Try common extensions
70
- const extensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];
96
+ const extensions = resolutionExtensions('javascript');
71
97
  // Strip .js extension if present (ESM convention)
72
98
  const withoutJs = base.endsWith('.js') ? base.slice(0, -3) : null;
73
99
  if (withoutJs) {
@@ -84,11 +110,145 @@ function resolveImport(fromDir, spec, _root, fileSet) {
84
110
  return candidate;
85
111
  }
86
112
  // Try index files
87
- for (const ext of extensions) {
88
- const candidate = base + '/index' + ext;
113
+ for (const name of indexFileNames('javascript')) {
114
+ const candidate = base + '/' + name;
89
115
  if (fileSet.has(candidate))
90
116
  return candidate;
91
117
  }
92
118
  return null;
93
119
  }
120
+ // ── Python imports ──────────────────────────────────────────────────────────
121
+ function extractPythonImports(content, filePath, fileSet) {
122
+ const dir = dirname(filePath);
123
+ const resolved = [];
124
+ // Relative imports: from . import foo, from ..utils import bar
125
+ PY_RELATIVE_IMPORT_RE.lastIndex = 0;
126
+ let match;
127
+ while ((match = PY_RELATIVE_IMPORT_RE.exec(content)) !== null) {
128
+ const spec = match[1];
129
+ const target = resolvePythonRelativeImport(dir, spec, fileSet);
130
+ if (target)
131
+ resolved.push(target);
132
+ }
133
+ // Absolute imports: from foo.bar import baz, import foo.bar
134
+ for (const regex of [PY_FROM_IMPORT_RE, PY_IMPORT_RE]) {
135
+ regex.lastIndex = 0;
136
+ while ((match = regex.exec(content)) !== null) {
137
+ const modulePath = match[1];
138
+ if (modulePath.startsWith('.'))
139
+ continue; // already handled
140
+ const target = resolvePythonAbsoluteImport(modulePath, fileSet);
141
+ if (target)
142
+ resolved.push(target);
143
+ }
144
+ }
145
+ return [...new Set(resolved)];
146
+ }
147
+ function resolvePythonRelativeImport(fromDir, spec, fileSet) {
148
+ // Count leading dots
149
+ let dots = 0;
150
+ while (dots < spec.length && spec[dots] === '.')
151
+ dots++;
152
+ const modulePart = spec.slice(dots);
153
+ // Navigate up (dots - 1) directories (one dot = current package)
154
+ let baseDir = fromDir;
155
+ for (let i = 1; i < dots; i++) {
156
+ baseDir = dirname(baseDir);
157
+ }
158
+ const relPath = modulePart ? modulePart.replace(/\./g, '/') : '';
159
+ const base = relPath ? join(baseDir, relPath).replace(/\\/g, '/') : baseDir;
160
+ // Try as .py file
161
+ if (fileSet.has(base + '.py'))
162
+ return base + '.py';
163
+ // Try as package (__init__.py)
164
+ if (fileSet.has(base + '/__init__.py'))
165
+ return base + '/__init__.py';
166
+ // "from . import foo" with no module part → __init__.py in current dir
167
+ if (!modulePart && fileSet.has(baseDir + '/__init__.py'))
168
+ return baseDir + '/__init__.py';
169
+ return null;
170
+ }
171
+ function resolvePythonAbsoluteImport(modulePath, fileSet) {
172
+ const relPath = modulePath.replace(/\./g, '/');
173
+ // Try as .py file
174
+ if (fileSet.has(relPath + '.py'))
175
+ return relPath + '.py';
176
+ // Try as package
177
+ if (fileSet.has(relPath + '/__init__.py'))
178
+ return relPath + '/__init__.py';
179
+ // Try under common source directories
180
+ for (const prefix of ['src/', 'lib/']) {
181
+ if (fileSet.has(prefix + relPath + '.py'))
182
+ return prefix + relPath + '.py';
183
+ if (fileSet.has(prefix + relPath + '/__init__.py'))
184
+ return prefix + relPath + '/__init__.py';
185
+ }
186
+ return null;
187
+ }
188
+ // ── Go imports ──────────────────────────────────────────────────────────────
189
+ function extractGoImports(content, filePath, fileSet, goModPrefix) {
190
+ const importPaths = new Set();
191
+ // Single-line imports
192
+ GO_SINGLE_IMPORT_RE.lastIndex = 0;
193
+ let match;
194
+ while ((match = GO_SINGLE_IMPORT_RE.exec(content)) !== null) {
195
+ importPaths.add(match[1]);
196
+ }
197
+ // Multi-line import blocks
198
+ GO_IMPORT_BLOCK_RE.lastIndex = 0;
199
+ while ((match = GO_IMPORT_BLOCK_RE.exec(content)) !== null) {
200
+ const block = match[1];
201
+ GO_IMPORT_LINE_RE.lastIndex = 0;
202
+ let lineMatch;
203
+ while ((lineMatch = GO_IMPORT_LINE_RE.exec(block)) !== null) {
204
+ importPaths.add(lineMatch[1]);
205
+ }
206
+ }
207
+ const resolved = [];
208
+ const dir = dirname(filePath);
209
+ for (const importPath of importPaths) {
210
+ // Rare relative imports (./internal/foo)
211
+ if (importPath.startsWith('./') || importPath.startsWith('../')) {
212
+ const base = join(dir, importPath).replace(/\\/g, '/');
213
+ const goFile = findGoFileInDir(base, fileSet);
214
+ if (goFile)
215
+ resolved.push(goFile);
216
+ continue;
217
+ }
218
+ // Module-local imports: strip go.mod module prefix
219
+ if (goModPrefix && importPath.startsWith(goModPrefix + '/')) {
220
+ const localPath = importPath.slice(goModPrefix.length + 1);
221
+ const goFile = findGoFileInDir(localPath, fileSet);
222
+ if (goFile)
223
+ resolved.push(goFile);
224
+ }
225
+ // External imports are silently skipped.
226
+ }
227
+ return [...new Set(resolved)];
228
+ }
229
+ /** Find a representative .go file in a package directory. */
230
+ function findGoFileInDir(dirPath, fileSet) {
231
+ // Direct .go file
232
+ if (fileSet.has(dirPath + '.go'))
233
+ return dirPath + '.go';
234
+ // Find any non-test .go file in the directory
235
+ const normalized = dirPath.replace(/\\/g, '/');
236
+ for (const f of fileSet) {
237
+ if (f.startsWith(normalized + '/') && f.endsWith('.go') && !f.includes('_test.go')) {
238
+ return f;
239
+ }
240
+ }
241
+ return null;
242
+ }
243
+ /** Read the module path from go.mod. */
244
+ function readGoModPrefix(root) {
245
+ try {
246
+ const gomod = readFileSync(join(root, 'go.mod'), 'utf-8');
247
+ const match = gomod.match(/^module\s+(\S+)/m);
248
+ return match ? match[1] : null;
249
+ }
250
+ catch {
251
+ return null;
252
+ }
253
+ }
94
254
  //# sourceMappingURL=dep-graph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dep-graph.js","sourceRoot":"","sources":["../src/dep-graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dep-graph.js","sourceRoot":"","sources":["../src/dep-graph.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,4 +4,6 @@ export { analyzeChurn } from './churn.js';
4
4
  export { buildTestMap } from './test-map.js';
5
5
  export { buildRepoIndex } from './indexer.js';
6
6
  export type { IndexerOptions } from './indexer.js';
7
+ export { detectLanguage, languageFamily, extensionFamily, resolutionExtensions, indexFileNames } from './lang.js';
8
+ export type { LanguageFamily } from './lang.js';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAClH,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -3,4 +3,5 @@ export { buildDepGraph } from './dep-graph.js';
3
3
  export { analyzeChurn } from './churn.js';
4
4
  export { buildTestMap } from './test-map.js';
5
5
  export { buildRepoIndex } from './indexer.js';
6
+ export { detectLanguage, languageFamily, extensionFamily, resolutionExtensions, indexFileNames } from './lang.js';
6
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
package/dist/lang.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Built-in language registry for CodeLedger.
3
+ *
4
+ * Provides language detection from file extensions, language family grouping,
5
+ * and per-family resolution tables for imports and index files.
6
+ *
7
+ * Users never need to configure language support — this map ships with
8
+ * CodeLedger and covers 30+ common extensions out of the box. Custom
9
+ * extensions can be added via config.language_extensions overrides.
10
+ */
11
+ export type LanguageFamily = 'javascript' | 'python' | 'go' | 'ruby' | 'rust' | 'java' | 'csharp' | 'cpp' | 'swift' | 'kotlin' | 'php' | 'shell' | 'markup' | 'data' | 'unknown';
12
+ interface LanguageEntry {
13
+ language: string;
14
+ family: LanguageFamily;
15
+ }
16
+ /**
17
+ * Detect language and family from a file extension.
18
+ * Config overrides take precedence over the built-in map.
19
+ */
20
+ export declare function detectLanguage(ext: string, configOverrides?: Record<string, string>): LanguageEntry;
21
+ /** Map a language string to a family. */
22
+ export declare function languageFamily(language: string): LanguageFamily;
23
+ /** Map a file extension directly to a family (when language string is unavailable). */
24
+ export declare function extensionFamily(ext: string): LanguageFamily;
25
+ /** Extensions to try when resolving imports for a language family. */
26
+ export declare function resolutionExtensions(family: LanguageFamily): string[];
27
+ /** Index file names for package/directory imports. */
28
+ export declare function indexFileNames(family: LanguageFamily): string[];
29
+ export {};
30
+ //# sourceMappingURL=lang.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lang.d.ts","sourceRoot":"","sources":["../src/lang.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,QAAQ,GACR,IAAI,GACJ,MAAM,GACN,MAAM,GACN,MAAM,GACN,QAAQ,GACR,KAAK,GACL,OAAO,GACP,QAAQ,GACR,KAAK,GACL,OAAO,GACP,QAAQ,GACR,MAAM,GACN,SAAS,CAAC;AAEd,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;CACxB;AAmED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,aAAa,CAYf;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAE/D;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAE3D;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAerE;AAED,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAM/D"}
package/dist/lang.js ADDED
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Built-in language registry for CodeLedger.
3
+ *
4
+ * Provides language detection from file extensions, language family grouping,
5
+ * and per-family resolution tables for imports and index files.
6
+ *
7
+ * Users never need to configure language support — this map ships with
8
+ * CodeLedger and covers 30+ common extensions out of the box. Custom
9
+ * extensions can be added via config.language_extensions overrides.
10
+ */
11
+ /** Comprehensive built-in extension→language map. */
12
+ const KNOWN_EXTENSIONS = {
13
+ // JavaScript / TypeScript
14
+ '.ts': { language: 'typescript', family: 'javascript' },
15
+ '.tsx': { language: 'typescript-react', family: 'javascript' },
16
+ '.js': { language: 'javascript', family: 'javascript' },
17
+ '.jsx': { language: 'javascript-react', family: 'javascript' },
18
+ '.mjs': { language: 'javascript', family: 'javascript' },
19
+ '.cjs': { language: 'javascript', family: 'javascript' },
20
+ '.vue': { language: 'vue', family: 'javascript' },
21
+ '.svelte': { language: 'svelte', family: 'javascript' },
22
+ // Python
23
+ '.py': { language: 'python', family: 'python' },
24
+ '.pyi': { language: 'python-stub', family: 'python' },
25
+ // Go
26
+ '.go': { language: 'go', family: 'go' },
27
+ // Rust
28
+ '.rs': { language: 'rust', family: 'rust' },
29
+ // Ruby
30
+ '.rb': { language: 'ruby', family: 'ruby' },
31
+ '.rake': { language: 'ruby', family: 'ruby' },
32
+ // Java / Kotlin
33
+ '.java': { language: 'java', family: 'java' },
34
+ '.kt': { language: 'kotlin', family: 'kotlin' },
35
+ '.kts': { language: 'kotlin', family: 'kotlin' },
36
+ // C#
37
+ '.cs': { language: 'csharp', family: 'csharp' },
38
+ // C / C++
39
+ '.c': { language: 'c', family: 'cpp' },
40
+ '.h': { language: 'c-header', family: 'cpp' },
41
+ '.cpp': { language: 'cpp', family: 'cpp' },
42
+ '.hpp': { language: 'cpp-header', family: 'cpp' },
43
+ '.cc': { language: 'cpp', family: 'cpp' },
44
+ // Swift
45
+ '.swift': { language: 'swift', family: 'swift' },
46
+ // PHP
47
+ '.php': { language: 'php', family: 'php' },
48
+ // Shell
49
+ '.sh': { language: 'shell', family: 'shell' },
50
+ '.bash': { language: 'shell', family: 'shell' },
51
+ '.zsh': { language: 'shell', family: 'shell' },
52
+ // Markup / Config
53
+ '.md': { language: 'markdown', family: 'markup' },
54
+ '.html': { language: 'html', family: 'markup' },
55
+ '.css': { language: 'css', family: 'markup' },
56
+ '.scss': { language: 'scss', family: 'markup' },
57
+ // Data / Config
58
+ '.json': { language: 'json', family: 'data' },
59
+ '.yaml': { language: 'yaml', family: 'data' },
60
+ '.yml': { language: 'yaml', family: 'data' },
61
+ '.toml': { language: 'toml', family: 'data' },
62
+ '.xml': { language: 'xml', family: 'data' },
63
+ '.sql': { language: 'sql', family: 'data' },
64
+ '.proto': { language: 'protobuf', family: 'data' },
65
+ '.graphql': { language: 'graphql', family: 'data' },
66
+ '.gql': { language: 'graphql', family: 'data' },
67
+ '.prisma': { language: 'prisma', family: 'data' },
68
+ };
69
+ /** Reverse map from language name to family (built lazily). */
70
+ const LANGUAGE_TO_FAMILY = new Map();
71
+ for (const entry of Object.values(KNOWN_EXTENSIONS)) {
72
+ LANGUAGE_TO_FAMILY.set(entry.language, entry.family);
73
+ }
74
+ /**
75
+ * Detect language and family from a file extension.
76
+ * Config overrides take precedence over the built-in map.
77
+ */
78
+ export function detectLanguage(ext, configOverrides) {
79
+ const lower = ext.toLowerCase();
80
+ // Config overrides first
81
+ if (configOverrides?.[lower]) {
82
+ const lang = configOverrides[lower];
83
+ const family = LANGUAGE_TO_FAMILY.get(lang) ?? inferFamily(lang);
84
+ return { language: lang, family };
85
+ }
86
+ // Built-in map
87
+ return KNOWN_EXTENSIONS[lower] ?? { language: 'unknown', family: 'unknown' };
88
+ }
89
+ /** Map a language string to a family. */
90
+ export function languageFamily(language) {
91
+ return LANGUAGE_TO_FAMILY.get(language) ?? inferFamily(language);
92
+ }
93
+ /** Map a file extension directly to a family (when language string is unavailable). */
94
+ export function extensionFamily(ext) {
95
+ return KNOWN_EXTENSIONS[ext.toLowerCase()]?.family ?? 'unknown';
96
+ }
97
+ /** Extensions to try when resolving imports for a language family. */
98
+ export function resolutionExtensions(family) {
99
+ switch (family) {
100
+ case 'javascript': return ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];
101
+ case 'python': return ['.py'];
102
+ case 'go': return ['.go'];
103
+ case 'ruby': return ['.rb'];
104
+ case 'rust': return ['.rs'];
105
+ case 'java': return ['.java'];
106
+ case 'kotlin': return ['.kt', '.kts'];
107
+ case 'csharp': return ['.cs'];
108
+ case 'cpp': return ['.c', '.cpp', '.cc', '.h', '.hpp'];
109
+ case 'swift': return ['.swift'];
110
+ case 'php': return ['.php'];
111
+ default: return [];
112
+ }
113
+ }
114
+ /** Index file names for package/directory imports. */
115
+ export function indexFileNames(family) {
116
+ switch (family) {
117
+ case 'javascript': return ['index.ts', 'index.tsx', 'index.js', 'index.jsx', 'index.mjs', 'index.cjs'];
118
+ case 'python': return ['__init__.py'];
119
+ default: return [];
120
+ }
121
+ }
122
+ /** Infer family from a language string using substring matching (for custom languages). */
123
+ function inferFamily(language) {
124
+ const lower = language.toLowerCase();
125
+ if (lower.includes('typescript') || lower.includes('javascript'))
126
+ return 'javascript';
127
+ if (lower.includes('python'))
128
+ return 'python';
129
+ if (lower.includes('go') || lower === 'golang')
130
+ return 'go';
131
+ if (lower.includes('ruby'))
132
+ return 'ruby';
133
+ if (lower.includes('rust'))
134
+ return 'rust';
135
+ if (lower.includes('java') && !lower.includes('javascript'))
136
+ return 'java';
137
+ if (lower.includes('kotlin'))
138
+ return 'kotlin';
139
+ if (lower.includes('csharp') || lower.includes('c#'))
140
+ return 'csharp';
141
+ if (lower.includes('swift'))
142
+ return 'swift';
143
+ if (lower.includes('php'))
144
+ return 'php';
145
+ return 'unknown';
146
+ }
147
+ //# sourceMappingURL=lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lang.js","sourceRoot":"","sources":["../src/lang.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG9D,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,EAClB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,QAAQ,EAAE,CAuCZ"}
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAK9D,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,EAClB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,QAAQ,EAAE,CAuCZ"}
package/dist/scanner.js CHANGED
@@ -1,13 +1,14 @@
1
1
  import { readFileSync, statSync } from 'node:fs';
2
2
  import { extname, relative } from 'node:path';
3
3
  import { walkFiles } from './walk.js';
4
+ import { detectLanguage, languageFamily } from './lang.js';
4
5
  export function scanFiles(root, config, contentCache) {
5
6
  const allPaths = walkFiles(root, config.include, config.exclude);
6
7
  const files = [];
7
8
  for (const absPath of allPaths) {
8
9
  const rel = relative(root, absPath);
9
10
  const ext = extname(rel);
10
- const language = config.language_extensions[ext] ?? 'unknown';
11
+ const { language } = detectLanguage(ext, config.language_extensions);
11
12
  const isTest = config.test_patterns.some((pat) => matchGlob(rel, pat));
12
13
  let lines = 0;
13
14
  let size = 0;
@@ -35,7 +36,7 @@ export function scanFiles(root, config, contentCache) {
35
36
  lines,
36
37
  size,
37
38
  is_test: isTest,
38
- content_keywords: extractContentKeywords(content),
39
+ content_keywords: extractContentKeywords(content, language),
39
40
  });
40
41
  }
41
42
  return files;
@@ -43,31 +44,56 @@ export function scanFiles(root, config, contentCache) {
43
44
  /**
44
45
  * Extract meaningful identifiers from file content for content-aware matching.
45
46
  *
46
- * Extracts from:
47
- * - Export signatures (exported functions, classes, interfaces, types, consts)
48
- * - The first ~50 lines (imports, config keys, top-level declarations)
49
- * - JSON keys (for package.json, config files)
47
+ * Dispatches to per-language declaration regexes:
48
+ * - JS/TS: function, class, interface, type, const, enum, let, var
49
+ * - Python: def, class, async def
50
+ * - Go: func, type, var, const
51
+ * - Other: falls back to JS/TS patterns + JSON keys
50
52
  *
51
53
  * Returns deduplicated lowercase tokens (length > 2) capped at 50 entries.
52
54
  */
53
- function extractContentKeywords(content) {
55
+ // JS/TS declarations
56
+ const JS_DECL_RE = /(?:export\s+)?(?:async\s+)?(?:function|class|interface|type|const|enum|let|var)\s+([A-Za-z_$][A-Za-z0-9_$]*)/g;
57
+ // Python declarations: def foo, class Foo, async def foo
58
+ const PY_DECL_RE = /(?:async\s+)?(?:def|class)\s+([A-Za-z_][A-Za-z0-9_]*)/g;
59
+ // Go declarations: func Foo, func (r *Receiver) Foo, type Foo, var foo, const foo
60
+ const GO_DECL_RE = /(?:func\s+(?:\([^)]*\)\s+)?|type\s+|var\s+|const\s+)([A-Za-z_][A-Za-z0-9_]*)/g;
61
+ // JSON-like keys: "key": or key:
62
+ const JSON_KEY_RE = /["']?([a-zA-Z_][a-zA-Z0-9_]*)["']?\s*:/g;
63
+ function getDeclRegex(family) {
64
+ switch (family) {
65
+ case 'python': return PY_DECL_RE;
66
+ case 'go': return GO_DECL_RE;
67
+ default: return JS_DECL_RE;
68
+ }
69
+ }
70
+ function isExportLine(line, family) {
71
+ const trimmed = line.trimStart();
72
+ switch (family) {
73
+ case 'python':
74
+ return /^(?:def |class |async def |@)/.test(trimmed);
75
+ case 'go':
76
+ return /^(?:func |type |var |const )/.test(trimmed);
77
+ default:
78
+ return trimmed.startsWith('export ');
79
+ }
80
+ }
81
+ function extractContentKeywords(content, language) {
54
82
  const tokens = new Set();
55
83
  const lines = content.split('\n');
56
- // Regex for identifiers in export/function/class/interface/const declarations
57
- const DECL_RE = /(?:export\s+)?(?:async\s+)?(?:function|class|interface|type|const|enum|let|var)\s+([A-Za-z_$][A-Za-z0-9_$]*)/g;
58
- // Regex for JSON-like keys: "key": or key:
59
- const JSON_KEY_RE = /["']?([a-zA-Z_][a-zA-Z0-9_]*)["']?\s*:/g;
60
- // Scan the first 50 lines for identifiers + all export lines
84
+ const family = languageFamily(language);
85
+ const declRegex = getDeclRegex(family);
86
+ // Scan the first 50 lines for identifiers + all export/declaration lines
61
87
  for (let i = 0; i < lines.length; i++) {
62
88
  const line = lines[i];
63
89
  const isHead = i < 50;
64
- const isExport = line.trimStart().startsWith('export ');
90
+ const isExport = isExportLine(line, family);
65
91
  if (!isHead && !isExport)
66
92
  continue;
67
93
  // Extract declaration names
68
94
  let m;
69
- DECL_RE.lastIndex = 0;
70
- while ((m = DECL_RE.exec(line)) !== null) {
95
+ declRegex.lastIndex = 0;
96
+ while ((m = declRegex.exec(line)) !== null) {
71
97
  addIdentifierTokens(m[1], tokens);
72
98
  }
73
99
  // Extract JSON/object keys from head section
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,MAAkB,EAClB,YAAkC;IAElC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAEvE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;YAC9B,6CAA6C;YAC7C,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;gBAAE,SAAS;YACtC,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACzC,2EAA2E;YAC3E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC1E,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACnC,YAAY,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;YACxB,SAAS;QACX,CAAC;QAED,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,GAAG;YACT,QAAQ;YACR,SAAS,EAAE,GAAG;YACd,KAAK;YACL,IAAI;YACJ,OAAO,EAAE,MAAM;YACf,gBAAgB,EAAE,sBAAsB,CAAC,OAAO,CAAC;SAClD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,sBAAsB,CAAC,OAAe;IAC7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,8EAA8E;IAC9E,MAAM,OAAO,GAAG,+GAA+G,CAAC;IAChI,2CAA2C;IAC3C,MAAM,WAAW,GAAG,yCAAyC,CAAC;IAE9D,6DAA6D;IAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAExD,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;YAAE,SAAS;QAEnC,4BAA4B;QAC5B,IAAI,CAAyB,CAAC;QAC9B,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACzC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAED,6CAA6C;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;YAC1B,OAAO,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC7C,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,2FAA2F;AAC3F,SAAS,mBAAmB,CAAC,IAAY,EAAE,MAAmB;IAC5D,2EAA2E;IAC3E,MAAM,KAAK,GAAG,IAAI;SACf,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,WAAW,EAAE;SACb,KAAK,CAAC,QAAQ,CAAC;SACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,OAAe;IAClD,qFAAqF;IACrF,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC;SAClC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC;SAC5B,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC;SAChC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACpC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;SAChC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC;SAC/B,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test-map.d.ts","sourceRoot":"","sources":["../src/test-map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,EAAE,CAqB/G"}
1
+ {"version":3,"file":"test-map.d.ts","sourceRoot":"","sources":["../src/test-map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,EAAE,CAqB/G"}
package/dist/test-map.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { readFileSync } from 'node:fs';
2
- import { basename, dirname, join } from 'node:path';
2
+ import { basename, dirname, extname, join } from 'node:path';
3
+ import { extensionFamily, resolutionExtensions, indexFileNames } from './lang.js';
3
4
  export function buildTestMap(root, files, contentCache) {
4
5
  const mappings = [];
5
6
  const sourceSet = new Set(files.filter((f) => !f.is_test).map((f) => f.path));
@@ -22,6 +23,47 @@ export function buildTestMap(root, files, contentCache) {
22
23
  function conventionMatch(testPath, sourceSet) {
23
24
  const base = basename(testPath);
24
25
  const dir = dirname(testPath);
26
+ const ext = extname(testPath);
27
+ const family = extensionFamily(ext);
28
+ // ── Python test conventions ───────────────────────────────────────────
29
+ if (family === 'python') {
30
+ // test_foo.py → foo.py (prefix-based, most common Python convention)
31
+ if (base.startsWith('test_')) {
32
+ const sourceBase = base.slice(5); // strip "test_"
33
+ // Same directory
34
+ const sameDirCandidate = join(dir, sourceBase);
35
+ if (sourceSet.has(sameDirCandidate))
36
+ return sameDirCandidate;
37
+ // tests/ → parent or src/ mirror
38
+ if (dir.includes('tests')) {
39
+ const parentDir = dir.replace(/\btests\b\/?/, '');
40
+ const parentCandidate = join(parentDir, sourceBase);
41
+ if (sourceSet.has(parentCandidate))
42
+ return parentCandidate;
43
+ const srcCandidate = join(parentDir, 'src', sourceBase);
44
+ if (sourceSet.has(srcCandidate))
45
+ return srcCandidate;
46
+ }
47
+ }
48
+ // foo_test.py → foo.py (suffix-based)
49
+ if (base.endsWith('_test.py')) {
50
+ const sourceBase = base.slice(0, -8) + '.py';
51
+ const sameDirCandidate = join(dir, sourceBase);
52
+ if (sourceSet.has(sameDirCandidate))
53
+ return sameDirCandidate;
54
+ }
55
+ }
56
+ // ── Go test conventions ───────────────────────────────────────────────
57
+ if (family === 'go') {
58
+ // foo_test.go → foo.go (Go convention: tests are co-located)
59
+ if (base.endsWith('_test.go')) {
60
+ const sourceBase = base.slice(0, -8) + '.go';
61
+ const sameDirCandidate = join(dir, sourceBase);
62
+ if (sourceSet.has(sameDirCandidate))
63
+ return sameDirCandidate;
64
+ }
65
+ }
66
+ // ── JS/TS test conventions (also fallback for other languages) ────────
25
67
  // foo.test.ts → foo.ts, foo.spec.ts → foo.ts
26
68
  const sourceBase = base
27
69
  .replace(/\.test\./, '.')
@@ -47,6 +89,14 @@ function conventionMatch(testPath, sourceSet) {
47
89
  return srcCandidate;
48
90
  }
49
91
  }
92
+ // Check tests/ convention: tests/foo.test.ts → src/foo.ts
93
+ if (dir.startsWith('tests/') || dir.startsWith('tests\\')) {
94
+ const srcDir = 'src/' + dir.slice(6);
95
+ const srcCandidate = join(srcDir, sourceBase);
96
+ if (sourceSet.has(srcCandidate)) {
97
+ return srcCandidate;
98
+ }
99
+ }
50
100
  return null;
51
101
  }
52
102
  function importMatch(root, testPath, sourceSet, contentCache) {
@@ -64,6 +114,21 @@ function importMatch(root, testPath, sourceSet, contentCache) {
64
114
  return [];
65
115
  }
66
116
  }
117
+ const ext = extname(testPath);
118
+ const family = extensionFamily(ext);
119
+ switch (family) {
120
+ case 'python':
121
+ return extractPythonTestImports(content, testPath, sourceSet);
122
+ case 'go':
123
+ // Go test mapping is primarily convention-based (co-located files).
124
+ // Import-based mapping is less useful since Go imports packages.
125
+ return [];
126
+ default:
127
+ return extractJsTestImports(content, testPath, sourceSet);
128
+ }
129
+ }
130
+ // ── JS/TS import-based test mapping ─────────────────────────────────────────
131
+ function extractJsTestImports(content, testPath, sourceSet) {
67
132
  const importRe = /(?:import|export)\s+(?:[\s\S]*?\s+from\s+)?['"]([^'"]+)['"]/g;
68
133
  const sources = [];
69
134
  let match;
@@ -71,32 +136,86 @@ function importMatch(root, testPath, sourceSet, contentCache) {
71
136
  const spec = match[1];
72
137
  if (!spec || !spec.startsWith('.'))
73
138
  continue;
74
- const resolved = resolveTestImport(dirname(testPath), spec, sourceSet);
139
+ const resolved = resolveTestImport(dirname(testPath), spec, sourceSet, 'javascript');
75
140
  if (resolved) {
76
141
  sources.push(resolved);
77
142
  }
78
143
  }
79
144
  return sources;
80
145
  }
81
- function resolveTestImport(fromDir, spec, sourceSet) {
146
+ // ── Python import-based test mapping ────────────────────────────────────────
147
+ const PY_FROM_IMPORT_RE = /^from\s+([\w.]+)\s+import\b/gm;
148
+ const PY_IMPORT_RE = /^import\s+([\w.]+)/gm;
149
+ const PY_RELATIVE_IMPORT_RE = /^from\s+(\.+[\w.]*)\s+import\b/gm;
150
+ function extractPythonTestImports(content, testPath, sourceSet) {
151
+ const dir = dirname(testPath);
152
+ const sources = [];
153
+ // Relative imports
154
+ PY_RELATIVE_IMPORT_RE.lastIndex = 0;
155
+ let match;
156
+ while ((match = PY_RELATIVE_IMPORT_RE.exec(content)) !== null) {
157
+ const spec = match[1];
158
+ let dots = 0;
159
+ while (dots < spec.length && spec[dots] === '.')
160
+ dots++;
161
+ const modulePart = spec.slice(dots);
162
+ let baseDir = dir;
163
+ for (let i = 1; i < dots; i++)
164
+ baseDir = dirname(baseDir);
165
+ const relPath = modulePart ? modulePart.replace(/\./g, '/') : '';
166
+ const base = relPath ? join(baseDir, relPath).replace(/\\/g, '/') : baseDir;
167
+ if (sourceSet.has(base + '.py'))
168
+ sources.push(base + '.py');
169
+ else if (sourceSet.has(base + '/__init__.py'))
170
+ sources.push(base + '/__init__.py');
171
+ }
172
+ // Absolute imports
173
+ for (const regex of [PY_FROM_IMPORT_RE, PY_IMPORT_RE]) {
174
+ regex.lastIndex = 0;
175
+ while ((match = regex.exec(content)) !== null) {
176
+ const modulePath = match[1];
177
+ if (modulePath.startsWith('.'))
178
+ continue;
179
+ const relPath = modulePath.replace(/\./g, '/');
180
+ for (const prefix of ['', 'src/', 'lib/']) {
181
+ const path = prefix + relPath;
182
+ if (sourceSet.has(path + '.py')) {
183
+ sources.push(path + '.py');
184
+ break;
185
+ }
186
+ if (sourceSet.has(path + '/__init__.py')) {
187
+ sources.push(path + '/__init__.py');
188
+ break;
189
+ }
190
+ }
191
+ }
192
+ }
193
+ return [...new Set(sources)];
194
+ }
195
+ // ── Shared resolution ───────────────────────────────────────────────────────
196
+ function resolveTestImport(fromDir, spec, sourceSet, family) {
82
197
  const base = join(fromDir, spec).replace(/\\/g, '/');
83
198
  if (sourceSet.has(base))
84
199
  return base;
85
- const extensions = ['.ts', '.tsx', '.js', '.jsx'];
86
- const withoutJs = base.endsWith('.js') ? base.slice(0, -3) : null;
87
- if (withoutJs) {
88
- for (const ext of extensions) {
89
- if (sourceSet.has(withoutJs + ext))
90
- return withoutJs + ext;
200
+ const extensions = resolutionExtensions(family);
201
+ // JS-specific: strip .js extension (ESM convention)
202
+ if (family === 'javascript') {
203
+ const withoutJs = base.endsWith('.js') ? base.slice(0, -3) : null;
204
+ if (withoutJs) {
205
+ for (const ext of extensions) {
206
+ if (sourceSet.has(withoutJs + ext))
207
+ return withoutJs + ext;
208
+ }
91
209
  }
92
210
  }
93
211
  for (const ext of extensions) {
94
212
  if (sourceSet.has(base + ext))
95
213
  return base + ext;
96
214
  }
97
- for (const ext of extensions) {
98
- if (sourceSet.has(base + '/index' + ext))
99
- return base + '/index' + ext;
215
+ // Index files
216
+ for (const name of indexFileNames(family)) {
217
+ if (sourceSet.has(base + '/' + name))
218
+ return base + '/' + name;
100
219
  }
101
220
  return null;
102
221
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test-map.js","sourceRoot":"","sources":["../src/test-map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-map.js","sourceRoot":"","sources":["../src/test-map.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"AAQA,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,EAAE,CAQV"}
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"AAQA,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,EAAE,CAWV"}
package/dist/walk.js CHANGED
@@ -5,28 +5,29 @@ const ALWAYS_SKIP = new Set([
5
5
  'node_modules', '.git', 'dist', 'build', '.codeledger',
6
6
  ]);
7
7
  export function walkFiles(root, includeGlobs, excludeGlobs) {
8
- // Parse root .gitignore patterns and merge with config excludes
9
- const { excludes: gitExcludes, negations } = parseGitignore(root);
10
- const allExcludes = [...excludeGlobs, ...gitExcludes];
8
+ // Parse root .gitignore and .codeledgerignore patterns, merge with config excludes.
9
+ // .codeledgerignore works like .gitignore: users specify paths to exclude from indexing.
10
+ const { excludes: gitExcludes, negations: gitNegations } = parseIgnoreFile(root, '.gitignore');
11
+ const { excludes: clExcludes, negations: clNegations } = parseIgnoreFile(root, '.codeledgerignore');
12
+ const allExcludes = [...excludeGlobs, ...gitExcludes, ...clExcludes];
13
+ const allNegations = [...gitNegations, ...clNegations];
11
14
  const results = [];
12
- walk(root, root, includeGlobs, allExcludes, negations, results);
15
+ walk(root, root, includeGlobs, allExcludes, allNegations, results);
13
16
  return results;
14
17
  }
15
18
  /**
16
- * Parse a .gitignore file and return glob patterns compatible with our
17
- * exclude matching. Only handles the most common patterns -- enough to
18
- * prevent scanning vendored/generated directories that users have
19
- * already told git to ignore.
19
+ * Parse an ignore file (.gitignore, .codeledgerignore) and return glob
20
+ * patterns compatible with our exclude matching.
20
21
  *
21
22
  * Negation patterns (lines starting with !) are returned separately so
22
23
  * the walker can un-ignore files that match them.
23
24
  */
24
- function parseGitignore(root) {
25
- const gitignorePath = join(root, '.gitignore');
26
- if (!existsSync(gitignorePath))
25
+ function parseIgnoreFile(root, filename) {
26
+ const ignorePath = join(root, filename);
27
+ if (!existsSync(ignorePath))
27
28
  return { excludes: [], negations: [] };
28
29
  try {
29
- const content = readFileSync(gitignorePath, 'utf-8');
30
+ const content = readFileSync(ignorePath, 'utf-8');
30
31
  const excludes = [];
31
32
  const negations = [];
32
33
  for (const rawLine of content.split('\n')) {
package/dist/walk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"walk.js","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,gEAAgE;AAChE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CACvD,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,YAAsB,EACtB,YAAsB;IAEtB,gEAAgE;IAChE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,WAAW,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAEvE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5B,gCAAgC;YAChC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAE5C,6DAA6D;YAC7D,0DAA0D;YAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjD,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAE5C,gEAAgE;YAChE,IAAI,CAAC,GAAG;gBAAE,SAAS;YAEnB,mEAAmE;YACnE,8EAA8E;YAC9E,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,iDAAiD;gBACjD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YACjC,CAAC;iBAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,sDAAsD;gBACtD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7C,uEAAuE;oBACvE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAc,kBAAkB;oBACjD,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAM,oBAAoB;oBACnD,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAM,oBAAoB;oBACnD,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,CAAK,4BAA4B;gBAC7D,CAAC;qBAAM,CAAC;oBACN,sDAAsD;oBACtD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAc,aAAa;oBAC5C,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAa,qBAAqB;gBACtD,CAAC;YACH,CAAC;YACD,+DAA+D;YAC/D,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CACX,IAAY,EACZ,GAAW,EACX,YAAsB,EACtB,YAAsB,EACtB,aAAuB,EACvB,OAAiB;IAEjB,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAErC,6CAA6C;QAC7C,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,iEAAiE;YACjE,qEAAqE;YACrE,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBACvC,SAAS;YACX,CAAC;YAED,iEAAiE;YACjE,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;YACzB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;mBAC5D,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;mBACzD,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACrD,IAAI,QAAQ;gBAAE,SAAS;YAEvB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/D,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,OAAe;IAChD,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACpC,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC;SAClC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;SAChC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvB,OAAO,IAAI,MAAM,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeledger/repo",
3
- "version": "0.2.0",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "description": "Repository scanning and indexing for CodeLedger",
6
6
  "license": "Apache-2.0",
@@ -24,7 +24,7 @@
24
24
  }
25
25
  },
26
26
  "dependencies": {
27
- "@codeledger/types": "0.2.0"
27
+ "@codeledger/types": "0.5.0"
28
28
  },
29
29
  "devDependencies": {
30
30
  "typescript": "^5.4.0"