sverklo 0.2.8 → 0.2.9

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,5 +1,7 @@
1
1
  import { execSync } from "node:child_process";
2
2
  import { basename, dirname, join } from "node:path";
3
+ import { isTestPath, candidateTestNames } from "./test-paths.js";
4
+ import { computeRiskScore, formatRiskBadge } from "./risk-score.js";
3
5
  export const testMapTool = {
4
6
  name: "sverklo_test_map",
5
7
  description: "Map a git diff to its test coverage. Given a ref/range, lists which tests likely cover " +
@@ -22,72 +24,6 @@ export const testMapTool = {
22
24
  },
23
25
  },
24
26
  };
25
- // Filename patterns that indicate a test file across common ecosystems.
26
- // Kept regex-light so additions are easy.
27
- const TEST_FILE_PATTERNS = [
28
- /\.test\.[jt]sx?$/,
29
- /\.spec\.[jt]sx?$/,
30
- /(^|\/)__tests__\//,
31
- /(^|\/)tests?\//,
32
- /_test\.go$/,
33
- /_test\.py$/,
34
- /(^|\/)test_[^/]+\.py$/,
35
- /Test\.java$/,
36
- /Tests\.java$/,
37
- /Spec\.scala$/,
38
- /_spec\.rb$/,
39
- /(^|\/)spec\//,
40
- /\.test\.exs$/,
41
- /(^|\/)test\/.*\.exs$/,
42
- ];
43
- function isTestPath(path) {
44
- return TEST_FILE_PATTERNS.some((re) => re.test(path));
45
- }
46
- /**
47
- * Generate the candidate test filenames that conventionally cover a source file.
48
- * Examples:
49
- * src/foo/bar.ts → bar.test.ts, bar.spec.ts, __tests__/bar.test.ts
50
- * src/foo/bar.py → test_bar.py, bar_test.py
51
- * com/Foo.java → FooTest.java, FooTests.java
52
- */
53
- function candidateTestNames(sourcePath) {
54
- const file = basename(sourcePath);
55
- const dot = file.lastIndexOf(".");
56
- if (dot <= 0)
57
- return [];
58
- const stem = file.slice(0, dot);
59
- const ext = file.slice(dot); // includes leading dot
60
- const names = [];
61
- // JS/TS family
62
- if (/\.[jt]sx?$/.test(ext)) {
63
- names.push(`${stem}.test${ext}`, `${stem}.spec${ext}`);
64
- }
65
- // Python
66
- if (ext === ".py") {
67
- names.push(`test_${stem}.py`, `${stem}_test.py`);
68
- }
69
- // Go
70
- if (ext === ".go") {
71
- names.push(`${stem}_test.go`);
72
- }
73
- // Java/Kotlin/Scala
74
- if (ext === ".java" || ext === ".kt" || ext === ".scala") {
75
- names.push(`${stem}Test${ext}`, `${stem}Tests${ext}`, `${stem}Spec${ext}`);
76
- }
77
- // Ruby
78
- if (ext === ".rb") {
79
- names.push(`${stem}_spec.rb`, `${stem}_test.rb`);
80
- }
81
- // Rust — convention is inline #[cfg(test)] modules; sibling file uncommon
82
- if (ext === ".rs") {
83
- names.push(`${stem}_test.rs`);
84
- }
85
- // Elixir
86
- if (ext === ".ex") {
87
- names.push(`${stem}_test.exs`);
88
- }
89
- return names;
90
- }
91
27
  export function handleTestMap(indexer, args) {
92
28
  const ref = args.ref || "main..HEAD";
93
29
  const includeImporters = args.include_importers !== false;
@@ -203,8 +139,40 @@ export function handleTestMap(indexer, args) {
203
139
  lines.push(`## ⚠️ No matching tests found (${uncovered.length})`);
204
140
  lines.push(`These changed files have no test file matching by name or import. They may be untested, ` +
205
141
  `tested via integration/e2e suites sverklo can't see, or covered by tests outside the indexed paths.`);
206
- for (const u of uncovered)
207
- lines.push(`- ${u}`);
142
+ // Compute a risk score for each uncovered file so the reviewer sees
143
+ // *which* untested files are actually dangerous (e.g. auth code with
144
+ // many importers) vs benign (e.g. a typo in a doc snippet).
145
+ const uncoveredScored = uncovered.map((u) => {
146
+ const id = pathToId.get(u);
147
+ const importerCount = id !== undefined
148
+ ? indexer.graphStore.getImporters(id).length
149
+ : 0;
150
+ const symbols = id !== undefined
151
+ ? indexer.chunkStore.getByFile(id).filter((c) => c.name).map((c) => c.name)
152
+ : [];
153
+ let totalCallers = 0;
154
+ for (const name of symbols) {
155
+ totalCallers += Math.min(indexer.symbolRefStore.getCallerCount(name), 50);
156
+ }
157
+ const score = computeRiskScore({
158
+ path: u,
159
+ added: 0,
160
+ removed: 0,
161
+ isTested: false,
162
+ importerCount,
163
+ changedSymbolNames: symbols,
164
+ totalCallerCount: totalCallers,
165
+ danglingSymbolCount: 0,
166
+ });
167
+ return { path: u, score };
168
+ });
169
+ uncoveredScored.sort((a, b) => b.score.total - a.score.total);
170
+ for (const { path: u, score } of uncoveredScored) {
171
+ lines.push(`- ${formatRiskBadge(score)} ${u}`);
172
+ if (score.reasons.length > 0) {
173
+ lines.push(` _${score.reasons.filter((r) => r !== "no matching tests").join("; ") || "no matching tests"}_`);
174
+ }
175
+ }
208
176
  lines.push("");
209
177
  }
210
178
  // Suggested next-step commands the reviewer can paste
@@ -1 +1 @@
1
- {"version":3,"file":"test-map.js","sourceRoot":"","sources":["../../../../src/server/tools/test-map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-map.js","sourceRoot":"","sources":["../../../../src/server/tools/test-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function isTestPath(path: string): boolean;
2
+ /**
3
+ * Generate the candidate test filenames that conventionally cover a source file.
4
+ * src/foo/bar.ts → bar.test.ts, bar.spec.ts
5
+ * src/foo/bar.py → test_bar.py, bar_test.py
6
+ * com/Foo.java → FooTest.java, FooTests.java
7
+ */
8
+ export declare function candidateTestNames(sourcePath: string): string[];
@@ -0,0 +1,62 @@
1
+ // Shared helpers for identifying test files and the test files that
2
+ // conventionally cover a given source file. Extracted so both test-map and
3
+ // review-diff (risk scoring) can ask "is this file tested?" without
4
+ // duplicating the patterns.
5
+ import { basename } from "node:path";
6
+ const TEST_FILE_PATTERNS = [
7
+ /\.test\.[jt]sx?$/,
8
+ /\.spec\.[jt]sx?$/,
9
+ /(^|\/)__tests__\//,
10
+ /(^|\/)tests?\//,
11
+ /_test\.go$/,
12
+ /_test\.py$/,
13
+ /(^|\/)test_[^/]+\.py$/,
14
+ /Test\.java$/,
15
+ /Tests\.java$/,
16
+ /Spec\.scala$/,
17
+ /_spec\.rb$/,
18
+ /(^|\/)spec\//,
19
+ /\.test\.exs$/,
20
+ /(^|\/)test\/.*\.exs$/,
21
+ ];
22
+ export function isTestPath(path) {
23
+ return TEST_FILE_PATTERNS.some((re) => re.test(path));
24
+ }
25
+ /**
26
+ * Generate the candidate test filenames that conventionally cover a source file.
27
+ * src/foo/bar.ts → bar.test.ts, bar.spec.ts
28
+ * src/foo/bar.py → test_bar.py, bar_test.py
29
+ * com/Foo.java → FooTest.java, FooTests.java
30
+ */
31
+ export function candidateTestNames(sourcePath) {
32
+ const file = basename(sourcePath);
33
+ const dot = file.lastIndexOf(".");
34
+ if (dot <= 0)
35
+ return [];
36
+ const stem = file.slice(0, dot);
37
+ const ext = file.slice(dot);
38
+ const names = [];
39
+ if (/\.[jt]sx?$/.test(ext)) {
40
+ names.push(`${stem}.test${ext}`, `${stem}.spec${ext}`);
41
+ }
42
+ if (ext === ".py") {
43
+ names.push(`test_${stem}.py`, `${stem}_test.py`);
44
+ }
45
+ if (ext === ".go") {
46
+ names.push(`${stem}_test.go`);
47
+ }
48
+ if (ext === ".java" || ext === ".kt" || ext === ".scala") {
49
+ names.push(`${stem}Test${ext}`, `${stem}Tests${ext}`, `${stem}Spec${ext}`);
50
+ }
51
+ if (ext === ".rb") {
52
+ names.push(`${stem}_spec.rb`, `${stem}_test.rb`);
53
+ }
54
+ if (ext === ".rs") {
55
+ names.push(`${stem}_test.rs`);
56
+ }
57
+ if (ext === ".ex") {
58
+ names.push(`${stem}_test.exs`);
59
+ }
60
+ return names;
61
+ }
62
+ //# sourceMappingURL=test-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-paths.js","sourceRoot":"","sources":["../../../../src/server/tools/test-paths.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,2EAA2E;AAC3E,oEAAoE;AACpE,4BAA4B;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,kBAAkB,GAAG;IACzB,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,YAAY;IACZ,YAAY;IACZ,uBAAuB;IACvB,aAAa;IACb,cAAc;IACd,cAAc;IACd,YAAY;IACZ,cAAc;IACd,cAAc;IACd,sBAAsB;CACvB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,QAAQ,GAAG,EAAE,EAAE,GAAG,IAAI,QAAQ,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,QAAQ,GAAG,EAAE,EAAE,GAAG,IAAI,OAAO,GAAG,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sverklo",
3
- "version": "0.2.8",
4
- "description": "Sverklo — local-first code intelligence MCP server. Hybrid search, PageRank ranking, semantic embeddings. Zero config.",
3
+ "version": "0.2.9",
4
+ "description": "Sverklo — local-first code intelligence MCP server. Diff-aware MR review, risk scoring, hybrid semantic search, PageRank ranking, persistent memory. Zero config.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "sverklo": "dist/bin/sverklo.js"