@@ -2,10 +2,7 @@ import { afterEach, describe, expect, test } from "bun:test";
22import { mkdtemp , mkdir , rm , writeFile } from "node:fs/promises" ;
33import os from "node:os" ;
44import path from "node:path" ;
5- import { analyzeRepository } from "../src/core/engine" ;
6- import type { AnalyzerConfig } from "../src/config" ;
7- import { DEFAULT_CONFIG , loadConfig } from "../src/config" ;
8- import { createDefaultRegistry } from "../src/default-registry" ;
5+ import { loadConfig } from "../src/config" ;
96
107const tempDirs : string [ ] = [ ] ;
118
@@ -24,64 +21,7 @@ async function createTempRepo(): Promise<string> {
2421 return rootDir ;
2522}
2623
27- function withRuleConfig (
28- ruleId : string ,
29- config : { enabled ?: boolean ; weight ?: number } ,
30- ) : AnalyzerConfig {
31- return {
32- ...DEFAULT_CONFIG ,
33- rules : {
34- ...DEFAULT_CONFIG . rules ,
35- [ ruleId ] : config ,
36- } ,
37- } ;
38- }
39-
40- function withPathOverride (
41- files : string [ ] ,
42- rules : Record < string , { enabled ?: boolean ; weight ?: number } > ,
43- ) : AnalyzerConfig {
44- return {
45- ...DEFAULT_CONFIG ,
46- overrides : [ { files, rules } ] ,
47- } ;
48- }
49-
5024describe ( "rule config support" , ( ) => {
51- test ( "can disable a rule via config" , async ( ) => {
52- const rootDir = await createTempRepo ( ) ;
53- const result = await analyzeRepository (
54- rootDir ,
55- withRuleConfig ( "defensive.async-noise" , { enabled : false } ) ,
56- createDefaultRegistry ( ) ,
57- ) ;
58-
59- expect (
60- result . findings . filter ( ( finding ) => finding . ruleId === "defensive.async-noise" ) ,
61- ) . toHaveLength ( 0 ) ;
62- } ) ;
63-
64- test ( "can weight a rule via config" , async ( ) => {
65- const rootDir = await createTempRepo ( ) ;
66- const baseline = await analyzeRepository ( rootDir , DEFAULT_CONFIG , createDefaultRegistry ( ) ) ;
67- const weighted = await analyzeRepository (
68- rootDir ,
69- withRuleConfig ( "defensive.async-noise" , { weight : 2 } ) ,
70- createDefaultRegistry ( ) ,
71- ) ;
72-
73- const baselineAsyncNoise = baseline . findings . find (
74- ( finding ) => finding . ruleId === "defensive.async-noise" ,
75- ) ;
76- const weightedAsyncNoise = weighted . findings . find (
77- ( finding ) => finding . ruleId === "defensive.async-noise" ,
78- ) ;
79-
80- expect ( baselineAsyncNoise ) . toBeDefined ( ) ;
81- expect ( weightedAsyncNoise ) . toBeDefined ( ) ;
82- expect ( weightedAsyncNoise ?. score ) . toBeCloseTo ( ( baselineAsyncNoise ?. score ?? 0 ) * 2 , 6 ) ;
83- } ) ;
84-
8525 test ( "loadConfig reads slop-scan.config.json" , async ( ) => {
8626 const rootDir = await createTempRepo ( ) ;
8727 await writeFile (
@@ -109,62 +49,6 @@ describe("rule config support", () => {
10949 expect ( second . ignores ) . toEqual ( [ "src/nested.ts" ] ) ;
11050 } ) ;
11151
112- test ( "can apply a path-scoped file override" , async ( ) => {
113- const rootDir = await createTempRepo ( ) ;
114- await writeFile (
115- path . join ( rootDir , "src" , "nested.ts" ) ,
116- "function fetchRemote(input: string) {\n return Promise.resolve(input);\n}\n\nexport async function loadValue(id: string) {\n return await fetchRemote(id);\n}\n" ,
117- ) ;
118-
119- const result = await analyzeRepository (
120- rootDir ,
121- withPathOverride ( [ "src/comments.ts" ] , {
122- "defensive.async-noise" : { enabled : false } ,
123- } ) ,
124- createDefaultRegistry ( ) ,
125- ) ;
126-
127- const asyncNoiseFindings = result . findings . filter (
128- ( finding ) => finding . ruleId === "defensive.async-noise" ,
129- ) ;
130-
131- expect ( asyncNoiseFindings ) . toHaveLength ( 1 ) ;
132- expect ( asyncNoiseFindings [ 0 ] ?. path ) . toBe ( "src/nested.ts" ) ;
133- } ) ;
134-
135- test ( "can apply a path-scoped directory override" , async ( ) => {
136- const rootDir = await createTempRepo ( ) ;
137-
138- await mkdir ( path . join ( rootDir , "src/rules/defensive" ) , { recursive : true } ) ;
139- await writeFile (
140- path . join ( rootDir , "src/rules/defensive/service.ts" ) ,
141- "function fetchRule(input: string) {\n return Promise.resolve(input);\n}\n\nexport async function loadRule(id: string) {\n return await fetchRule(id);\n}\n" ,
142- ) ;
143-
144- await mkdir ( path . join ( rootDir , "src/other/defensive" ) , { recursive : true } ) ;
145- await writeFile (
146- path . join ( rootDir , "src/other/defensive/service.ts" ) ,
147- "function fetchOther(input: string) {\n return Promise.resolve(input);\n}\n\nexport async function loadOther(id: string) {\n return await fetchOther(id);\n}\n" ,
148- ) ;
149-
150- const result = await analyzeRepository (
151- rootDir ,
152- withPathOverride ( [ "src/rules/**" ] , {
153- "defensive.async-noise" : { enabled : false } ,
154- } ) ,
155- createDefaultRegistry ( ) ,
156- ) ;
157-
158- const asyncNoiseFindings = result . findings . filter (
159- ( finding ) => finding . ruleId === "defensive.async-noise" ,
160- ) ;
161-
162- expect ( asyncNoiseFindings . map ( ( finding ) => finding . path ) . sort ( ) ) . toEqual ( [
163- "src/comments.ts" ,
164- "src/other/defensive/service.ts" ,
165- ] ) ;
166- } ) ;
167-
16852 test ( "loadConfig reads path-scoped overrides" , async ( ) => {
16953 const rootDir = await createTempRepo ( ) ;
17054 await writeFile (
@@ -174,7 +58,7 @@ describe("rule config support", () => {
17458 {
17559 files : [ "src/comments.ts" ] ,
17660 rules : {
177- "defensive.async-noise " : { enabled : false } ,
61+ "defensive.error-obscuring " : { enabled : false } ,
17862 } ,
17963 } ,
18064 ] ,
@@ -187,7 +71,7 @@ describe("rule config support", () => {
18771 {
18872 files : [ "src/comments.ts" ] ,
18973 rules : {
190- "defensive.async-noise " : { enabled : false } ,
74+ "defensive.error-obscuring " : { enabled : false } ,
19175 } ,
19276 } ,
19377 ] ) ;
0 commit comments