Skip to content

Commit 043417f

Browse files
authored
Remove fanout hotspot from default pack (#25)
* Remove fanout hotspot from default pack * Fix flaky benchmark history delta assertion
1 parent 9f0eaec commit 043417f

5 files changed

Lines changed: 14 additions & 24 deletions

File tree

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ Current checks focus on patterns that often show up in unreviewed generated code
141141
- [async wrapper / `return await` noise](src/rules/async-noise/README.md)
142142
- [pass-through wrappers](src/rules/pass-through-wrappers/README.md)
143143
- [duplicate helper/function signatures across source files](src/rules/duplicate-function-signatures/README.md)
144-
- [directory fan-out hotspots](src/rules/directory-fanout-hotspot/README.md)
145144
- [duplicated test mock/setup patterns](src/rules/duplicate-mock-setup/README.md)
146145

147146
`scan` reports raw + normalized scores, hotspot tables, and grouped findings. Use `--json` when you want the full evidence payload.
@@ -240,7 +239,6 @@ The analyzer reads `slop-scan.config.ts`, `slop-scan.config.js`, `slop-scan.conf
240239
{
241240
"files": ["src/rules/**"],
242241
"rules": {
243-
"structure.directory-fanout-hotspot": { "enabled": false },
244242
"structure.over-fragmentation": { "enabled": false }
245243
}
246244
}

src/default-registry.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import { promiseDefaultFallbacksRule } from "./rules/promise-default-fallbacks";
2020
import { genericStatusEnvelopesRule } from "./rules/generic-status-envelopes";
2121
import { genericRecordCastsRule } from "./rules/generic-record-casts";
2222
import { stringifiedUnknownErrorsRule } from "./rules/stringified-unknown-errors";
23-
import { directoryFanoutHotspotRule } from "./rules/directory-fanout-hotspot";
2423
import { duplicateFunctionSignaturesRule } from "./rules/duplicate-function-signatures";
2524
import { passThroughWrappersRule } from "./rules/pass-through-wrappers";
2625
import { duplicateMockSetupRule } from "./rules/duplicate-mock-setup";
@@ -49,7 +48,6 @@ export function createDefaultRegistry(): Registry {
4948
registry.registerRule(stringifiedUnknownErrorsRule);
5049
registry.registerRule(passThroughWrappersRule);
5150
registry.registerRule(duplicateFunctionSignaturesRule);
52-
registry.registerRule(directoryFanoutHotspotRule);
5351
registry.registerRule(duplicateMockSetupRule);
5452

5553
registry.registerReporter(textReporter);

tests/benchmark-history.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,10 @@ describe("benchmark history support", () => {
208208
expect(summary.repos.every((repo) => repo.series.length === 2)).toBe(true);
209209
expect(
210210
summary.repos.find((repo) => repo.id === "slop-heavy")?.deltaFromPrevious?.repoScore,
211-
).toBe(2);
212-
expect(summary.repos.find((repo) => repo.id === "mixed")?.deltaFromPrevious?.repoScore).toBe(
213-
-1,
214-
);
211+
).toBeCloseTo(2, 6);
212+
expect(
213+
summary.repos.find((repo) => repo.id === "mixed")?.deltaFromPrevious?.repoScore,
214+
).toBeCloseTo(-1, 6);
215215
expect(
216216
summary.repos.find((repo) => repo.id === "slop-heavy")?.highest?.blendedVsPinnedBaseline,
217217
).toBe(adjustedSlopHeavyWeekTwo.blended.vsPinnedBaseline);

tests/fixtures-regression.test.ts

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,18 @@ describe("fixture regression suite", () => {
2828
createDefaultRegistry(),
2929
);
3030

31-
expect(result.repoScore).toBeCloseTo(10.8666666667, 6);
32-
expect(result.findings).toHaveLength(4);
31+
expect(result.repoScore).toBeCloseTo(7.7, 6);
32+
expect(result.findings).toHaveLength(3);
3333
expect([...new Set(result.findings.map((finding) => finding.ruleId))].sort()).toEqual([
3434
"defensive.async-noise",
3535
"defensive.error-obscuring",
36-
"structure.directory-fanout-hotspot",
3736
"structure.pass-through-wrappers",
3837
]);
3938
expect(result.fileScores.map((score) => score.path)).toEqual([
4039
"src/service.ts",
4140
"src/error.ts",
4241
]);
43-
expect(result.directoryScores.map((score) => score.path)).toEqual(["src/fragments"]);
42+
expect(result.directoryScores).toHaveLength(0);
4443
});
4544

4645
test("mixed fixture localizes hotspots to the slop subtree", async () => {
@@ -50,9 +49,9 @@ describe("fixture regression suite", () => {
5049
createDefaultRegistry(),
5150
);
5251

53-
expect(result.repoScore).toBeCloseTo(9.7, 6);
52+
expect(result.repoScore).toBeCloseTo(6.7, 6);
5453
expect(result.fileScores[0]?.path).toBe("src/slop/service.ts");
55-
expect(result.directoryScores[0]?.path).toBe("src/slop");
54+
expect(result.directoryScores).toHaveLength(0);
5655
expect(result.fileScores.every((score) => score.path.startsWith("src/slop/"))).toBe(true);
5756
});
5857

@@ -68,9 +67,9 @@ describe("fixture regression suite", () => {
6867
expect(output.status).toBe(0);
6968

7069
const report = JSON.parse(output.stdout);
71-
expect(report.summary.repoScore).toBeCloseTo(10.8666666667, 6);
72-
expect(report.summary.findingCount).toBe(4);
73-
expect(report.directoryScores[0].path).toBe("src/fragments");
70+
expect(report.summary.repoScore).toBeCloseTo(7.7, 6);
71+
expect(report.summary.findingCount).toBe(3);
72+
expect(report.directoryScores).toHaveLength(0);
7473
expect(report.fileScores[0].path).toBe("src/service.ts");
7574
});
7675

@@ -88,11 +87,7 @@ describe("fixture regression suite", () => {
8887
"strong Found 1 error-obscuring catch block defensive.error-obscuring",
8988
);
9089
expect(output.stdout).toContain(" at src/error.ts:2:1");
91-
expect(output.stdout).toContain(
92-
"medium Directory fan-out is a repo hotspot (7 files vs baseline 1.0) structure.directory-fanout-hotspot",
93-
);
94-
expect(output.stdout).toContain(" at src/fragments:1:1");
95-
expect(output.stdout).toContain("4 findings");
90+
expect(output.stdout).toContain("3 findings");
9691
expect(output.stdout).not.toContain("slop-scan report");
9792
});
9893

tests/heuristics.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,9 @@ describe("heuristic rule pack", () => {
9898
expect(ruleIds.has("defensive.stringified-unknown-errors")).toBe(true);
9999
expect(ruleIds.has("defensive.async-noise")).toBe(true);
100100
expect(ruleIds.has("structure.pass-through-wrappers")).toBe(true);
101-
expect(ruleIds.has("structure.directory-fanout-hotspot")).toBe(true);
102101

103102
expect(result.fileScores.some((score) => score.path === "src/service.ts")).toBe(true);
104-
expect(result.directoryScores[0]?.path).toBe("src/fragments");
103+
expect(result.directoryScores).toHaveLength(0);
105104
expect(result.repoScore).toBeGreaterThan(0);
106105
});
107106

0 commit comments

Comments
 (0)