claude-crap 0.3.7 → 0.3.8
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.
- package/README.md +25 -0
- package/dist/adapters/common.d.ts +1 -1
- package/dist/adapters/common.d.ts.map +1 -1
- package/dist/adapters/common.js +1 -1
- package/dist/adapters/common.js.map +1 -1
- package/dist/adapters/dart-analyzer.d.ts +41 -0
- package/dist/adapters/dart-analyzer.d.ts.map +1 -0
- package/dist/adapters/dart-analyzer.js +120 -0
- package/dist/adapters/dart-analyzer.js.map +1 -0
- package/dist/adapters/index.d.ts +1 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +4 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/crap-config.d.ts +2 -0
- package/dist/crap-config.d.ts.map +1 -1
- package/dist/crap-config.js +36 -28
- package/dist/crap-config.js.map +1 -1
- package/dist/dashboard/file-detail.d.ts.map +1 -1
- package/dist/dashboard/file-detail.js.map +1 -1
- package/dist/dashboard/server.d.ts +2 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +7 -12
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.js +17 -2
- package/dist/index.js.map +1 -1
- package/dist/metrics/workspace-walker.d.ts +4 -1
- package/dist/metrics/workspace-walker.d.ts.map +1 -1
- package/dist/metrics/workspace-walker.js +12 -28
- package/dist/metrics/workspace-walker.js.map +1 -1
- package/dist/scanner/auto-scan.d.ts +1 -0
- package/dist/scanner/auto-scan.d.ts.map +1 -1
- package/dist/scanner/auto-scan.js +14 -5
- package/dist/scanner/auto-scan.js.map +1 -1
- package/dist/scanner/bootstrap.d.ts +1 -1
- package/dist/scanner/bootstrap.d.ts.map +1 -1
- package/dist/scanner/bootstrap.js +9 -0
- package/dist/scanner/bootstrap.js.map +1 -1
- package/dist/scanner/complexity-scanner.d.ts +2 -0
- package/dist/scanner/complexity-scanner.d.ts.map +1 -1
- package/dist/scanner/complexity-scanner.js +11 -26
- package/dist/scanner/complexity-scanner.js.map +1 -1
- package/dist/scanner/detector.d.ts +24 -4
- package/dist/scanner/detector.d.ts.map +1 -1
- package/dist/scanner/detector.js +105 -10
- package/dist/scanner/detector.js.map +1 -1
- package/dist/scanner/runner.d.ts +4 -1
- package/dist/scanner/runner.d.ts.map +1 -1
- package/dist/scanner/runner.js +12 -3
- package/dist/scanner/runner.js.map +1 -1
- package/dist/schemas/tool-schemas.d.ts +1 -1
- package/dist/schemas/tool-schemas.js +1 -1
- package/dist/schemas/tool-schemas.js.map +1 -1
- package/dist/shared/exclusions.d.ts +53 -0
- package/dist/shared/exclusions.d.ts.map +1 -0
- package/dist/shared/exclusions.js +126 -0
- package/dist/shared/exclusions.js.map +1 -0
- package/package.json +3 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/bundle/mcp-server.mjs +393 -141
- package/plugin/bundle/mcp-server.mjs.map +4 -4
- package/plugin/package-lock.json +15 -2
- package/plugin/package.json +2 -1
- package/scripts/bundle-plugin.mjs +2 -1
- package/src/adapters/common.ts +1 -1
- package/src/adapters/dart-analyzer.ts +161 -0
- package/src/adapters/index.ts +4 -0
- package/src/crap-config.ts +55 -18
- package/src/dashboard/file-detail.ts +0 -2
- package/src/dashboard/server.ts +9 -10
- package/src/index.ts +17 -2
- package/src/metrics/workspace-walker.ts +15 -27
- package/src/scanner/auto-scan.ts +17 -6
- package/src/scanner/bootstrap.ts +11 -0
- package/src/scanner/complexity-scanner.ts +15 -26
- package/src/scanner/detector.ts +114 -10
- package/src/scanner/runner.ts +12 -2
- package/src/schemas/tool-schemas.ts +1 -1
- package/src/shared/exclusions.ts +156 -0
- package/src/tests/adapters/dispatch.test.ts +2 -2
- package/src/tests/auto-scan.test.ts +2 -2
- package/src/tests/exclusions.test.ts +117 -0
- package/src/tests/scanner-detector.test.ts +31 -11
|
@@ -90,24 +90,34 @@ describe("detectScanners", () => {
|
|
|
90
90
|
}
|
|
91
91
|
});
|
|
92
92
|
|
|
93
|
-
it("detects eslint from package.json
|
|
93
|
+
it("detects eslint from package.json — not installed vs installed", async () => {
|
|
94
94
|
const dir = makeTmpDir();
|
|
95
95
|
try {
|
|
96
96
|
writeFileSync(
|
|
97
97
|
join(dir, "package.json"),
|
|
98
98
|
JSON.stringify({ devDependencies: { eslint: "^9.0.0" } }),
|
|
99
99
|
);
|
|
100
|
+
// Without node_modules/.bin/eslint — declared but not installed
|
|
100
101
|
const results = await detectScanners(dir);
|
|
101
102
|
const eslint = results.find((r) => r.scanner === "eslint");
|
|
102
103
|
assert.ok(eslint);
|
|
103
|
-
assert.equal(eslint.available,
|
|
104
|
-
assert.ok(eslint.reason.includes("
|
|
104
|
+
assert.equal(eslint.available, false);
|
|
105
|
+
assert.ok(eslint.reason.includes("not installed"));
|
|
106
|
+
|
|
107
|
+
// With binary present — installed
|
|
108
|
+
mkdirSync(join(dir, "node_modules", ".bin"), { recursive: true });
|
|
109
|
+
writeFileSync(join(dir, "node_modules", ".bin", "eslint"), "");
|
|
110
|
+
const results2 = await detectScanners(dir);
|
|
111
|
+
const eslint2 = results2.find((r) => r.scanner === "eslint");
|
|
112
|
+
assert.ok(eslint2);
|
|
113
|
+
assert.equal(eslint2.available, true);
|
|
114
|
+
assert.ok(eslint2.reason.includes("installed"));
|
|
105
115
|
} finally {
|
|
106
116
|
rmSync(dir, { recursive: true, force: true });
|
|
107
117
|
}
|
|
108
118
|
});
|
|
109
119
|
|
|
110
|
-
it("detects stryker from package.json
|
|
120
|
+
it("detects stryker from package.json — not installed vs installed", async () => {
|
|
111
121
|
const dir = makeTmpDir();
|
|
112
122
|
try {
|
|
113
123
|
writeFileSync(
|
|
@@ -116,11 +126,21 @@ describe("detectScanners", () => {
|
|
|
116
126
|
devDependencies: { "@stryker-mutator/core": "^7.0.0" },
|
|
117
127
|
}),
|
|
118
128
|
);
|
|
129
|
+
// Without binary — declared but not installed
|
|
119
130
|
const results = await detectScanners(dir);
|
|
120
131
|
const stryker = results.find((r) => r.scanner === "stryker");
|
|
121
132
|
assert.ok(stryker);
|
|
122
|
-
assert.equal(stryker.available,
|
|
123
|
-
assert.ok(stryker.reason.includes("
|
|
133
|
+
assert.equal(stryker.available, false);
|
|
134
|
+
assert.ok(stryker.reason.includes("not installed"));
|
|
135
|
+
|
|
136
|
+
// With binary present — installed
|
|
137
|
+
mkdirSync(join(dir, "node_modules", ".bin"), { recursive: true });
|
|
138
|
+
writeFileSync(join(dir, "node_modules", ".bin", "stryker"), "");
|
|
139
|
+
const results2 = await detectScanners(dir);
|
|
140
|
+
const stryker2 = results2.find((r) => r.scanner === "stryker");
|
|
141
|
+
assert.ok(stryker2);
|
|
142
|
+
assert.equal(stryker2.available, true);
|
|
143
|
+
assert.ok(stryker2.reason.includes("installed"));
|
|
124
144
|
} finally {
|
|
125
145
|
rmSync(dir, { recursive: true, force: true });
|
|
126
146
|
}
|
|
@@ -133,9 +153,9 @@ describe("detectScanners", () => {
|
|
|
133
153
|
// Config and package.json probes will all fail.
|
|
134
154
|
// Binary probe results depend on the host — don't assert on those,
|
|
135
155
|
// but do assert the structure is correct.
|
|
136
|
-
assert.equal(results.length,
|
|
156
|
+
assert.equal(results.length, 5);
|
|
137
157
|
for (const r of results) {
|
|
138
|
-
assert.ok(["eslint", "semgrep", "bandit", "stryker"].includes(r.scanner));
|
|
158
|
+
assert.ok(["eslint", "semgrep", "bandit", "stryker", "dart_analyze"].includes(r.scanner));
|
|
139
159
|
assert.equal(typeof r.available, "boolean");
|
|
140
160
|
assert.equal(typeof r.reason, "string");
|
|
141
161
|
}
|
|
@@ -150,7 +170,7 @@ describe("detectScanners", () => {
|
|
|
150
170
|
writeFileSync(join(dir, "package.json"), "not json at all");
|
|
151
171
|
// Should not throw — just skip the package.json probe
|
|
152
172
|
const results = await detectScanners(dir);
|
|
153
|
-
assert.equal(results.length,
|
|
173
|
+
assert.equal(results.length, 5);
|
|
154
174
|
} finally {
|
|
155
175
|
rmSync(dir, { recursive: true, force: true });
|
|
156
176
|
}
|
|
@@ -172,10 +192,10 @@ describe("detectScanners", () => {
|
|
|
172
192
|
}
|
|
173
193
|
});
|
|
174
194
|
|
|
175
|
-
it("SCANNER_SIGNALS covers all
|
|
195
|
+
it("SCANNER_SIGNALS covers all supported scanners", () => {
|
|
176
196
|
assert.deepEqual(
|
|
177
197
|
Object.keys(SCANNER_SIGNALS).sort(),
|
|
178
|
-
["bandit", "eslint", "semgrep", "stryker"],
|
|
198
|
+
["bandit", "dart_analyze", "eslint", "semgrep", "stryker"],
|
|
179
199
|
);
|
|
180
200
|
});
|
|
181
201
|
});
|