debtlens 0.1.0 → 0.2.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.
- package/CHANGELOG.md +30 -0
- package/README.md +24 -8
- package/dist/cli/index.js +85 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/config/defaults.js +3 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/mergeConfig.js +5 -0
- package/dist/config/mergeConfig.js.map +1 -1
- package/dist/config/schema.js +12 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/core/scan.js +33 -18
- package/dist/core/scan.js.map +1 -1
- package/dist/core/types.d.ts +11 -0
- package/dist/detectors/duplicateLogic.js +3 -0
- package/dist/detectors/duplicateLogic.js.map +1 -1
- package/dist/detectors/effectComplexity.js +4 -3
- package/dist/detectors/effectComplexity.js.map +1 -1
- package/dist/detectors/propDrilling.js +2 -1
- package/dist/detectors/propDrilling.js.map +1 -1
- package/dist/reporters/index.d.ts +1 -0
- package/dist/reporters/index.js +1 -1
- package/dist/reporters/index.js.map +1 -1
- package/dist/reporters/sarifReporter.js +2 -2
- package/dist/reporters/sarifReporter.js.map +1 -1
- package/dist/reporters/terminalReporter.d.ts +1 -0
- package/dist/reporters/terminalReporter.js +3 -0
- package/dist/reporters/terminalReporter.js.map +1 -1
- package/dist/utils/git.d.ts +6 -0
- package/dist/utils/git.js +39 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/hostComponents.d.ts +4 -1
- package/dist/utils/hostComponents.js +8 -2
- package/dist/utils/hostComponents.js.map +1 -1
- package/dist/utils/packageInfo.d.ts +1 -0
- package/dist/utils/packageInfo.js +22 -0
- package/dist/utils/packageInfo.js.map +1 -0
- package/docs/good-first-issues.md +127 -16
- package/docs/rules.md +43 -1
- package/package.json +1 -1
- package/schema/debtlens.config.schema.json +14 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,36 @@
|
|
|
3
3
|
All notable changes to DebtLens are documented here. This project adheres to
|
|
4
4
|
[Semantic Versioning](https://semver.org/).
|
|
5
5
|
|
|
6
|
+
## [0.2.0] - 2026-06-06
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
- **`debtlens rules`** command to list built-in rule ids, default severities, and
|
|
10
|
+
descriptions in terminal or JSON format.
|
|
11
|
+
- **`--staged`** scan mode for pre-commit workflows. Staged scans read staged git blob
|
|
12
|
+
contents, so unstaged edits in the same file are not reported.
|
|
13
|
+
- `effect-complexity` now covers `useLayoutEffect` and `useInsertionEffect` in addition
|
|
14
|
+
to `useEffect`.
|
|
15
|
+
- `duplicate-logic` now emits an advisory warning when `duplicate-logic.maxSnippets`
|
|
16
|
+
caps comparison coverage. JSON reports include the same warning under
|
|
17
|
+
`summary.warnings`.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- CLI `--version` and SARIF `tool.driver.version` now share the package version from
|
|
21
|
+
`package.json`.
|
|
22
|
+
- Contributor issue docs now reflect completed issue status after the `0.2.0` batch.
|
|
23
|
+
|
|
24
|
+
## [0.1.1] - 2026-06-01
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- **`--quiet` / `-q`** on `debtlens scan`: terminal output shows header and summary
|
|
28
|
+
counts only; individual findings are suppressed. Exit codes and `--fail-on` are unchanged.
|
|
29
|
+
- **Configurable prop-drilling ignores** via `propDrilling.ignoreComponents` in
|
|
30
|
+
`debtlens.config.json` (extends the built-in host-component list).
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
- Contributor docs: [`docs/good-first-issues.md`](./docs/good-first-issues.md) links to
|
|
34
|
+
GitHub issues #1–#28.
|
|
35
|
+
|
|
6
36
|
## [0.1.0] - 2026-06-01
|
|
7
37
|
|
|
8
38
|
First public release.
|
package/README.md
CHANGED
|
@@ -59,7 +59,7 @@ DebtLens gives maintainers and newer contributors a neutral, explainable report
|
|
|
59
59
|
| --- | --- | --- |
|
|
60
60
|
| `large-component` | React-style components with too many lines, hooks, or branch points | Medium |
|
|
61
61
|
| `state-sprawl` | Components/hooks with many local stateful hooks | Medium |
|
|
62
|
-
| `effect-complexity` | Long or overloaded
|
|
62
|
+
| `effect-complexity` | Long or overloaded React effect hooks | Medium |
|
|
63
63
|
| `duplicate-logic` | Near-duplicate functions/components using normalized AST/text similarity | Medium |
|
|
64
64
|
| `dead-abstraction` | Thin wrappers that add little behavior | Low |
|
|
65
65
|
| `prop-drilling` | Components that forward many props to children | Medium |
|
|
@@ -82,6 +82,7 @@ npx debtlens scan
|
|
|
82
82
|
|
|
83
83
|
```bash
|
|
84
84
|
debtlens init # write a starter debtlens.config.json (use --force to overwrite)
|
|
85
|
+
debtlens rules # list built-in rule ids and descriptions
|
|
85
86
|
debtlens scan [target]
|
|
86
87
|
```
|
|
87
88
|
|
|
@@ -100,9 +101,11 @@ Options:
|
|
|
100
101
|
--baseline <path> report only issues absent from this baseline file
|
|
101
102
|
--write-baseline [path] write current issues to a baseline file and exit
|
|
102
103
|
--changed [ref] scan only files changed vs HEAD (or vs <ref> if given)
|
|
104
|
+
--staged scan only files staged in git
|
|
103
105
|
--config <path> path to debtlens.config.json
|
|
104
106
|
--cwd <path> working directory
|
|
105
107
|
--no-color disable terminal color
|
|
108
|
+
-q, --quiet terminal only: suppress per-finding detail
|
|
106
109
|
```
|
|
107
110
|
|
|
108
111
|
Examples:
|
|
@@ -129,10 +132,24 @@ debtlens scan --baseline debtlens-baseline.json --fail-on high
|
|
|
129
132
|
|
|
130
133
|
# Pull-request scan: only the files this branch changed vs main
|
|
131
134
|
debtlens scan --changed origin/main --fail-on high
|
|
135
|
+
|
|
136
|
+
# Pre-commit scan: only files currently staged in git
|
|
137
|
+
debtlens scan --staged --fail-on high
|
|
138
|
+
|
|
139
|
+
# List rule ids for config, CI, or --rules
|
|
140
|
+
debtlens rules
|
|
141
|
+
debtlens rules --format json
|
|
142
|
+
|
|
143
|
+
# Quiet terminal output: hide per-finding detail
|
|
144
|
+
debtlens scan --quiet
|
|
132
145
|
```
|
|
133
146
|
|
|
134
147
|
Baseline fingerprints are stable across line shifts, so moving existing code up or down does not resurface already-recorded debt — only genuinely new issues are reported.
|
|
135
148
|
|
|
149
|
+
When a scan reads zero files, DebtLens prints a stderr warning with likely causes such as include/exclude globs, the target path, `--cwd`, or an empty git file set from `--changed` / `--staged`. The warning is advisory and does not change the exit code for `--fail-on`.
|
|
150
|
+
|
|
151
|
+
When `duplicate-logic` reaches `duplicate-logic.maxSnippets`, DebtLens warns that duplicate comparisons were capped. JSON output includes the same advisory under `summary.warnings`.
|
|
152
|
+
|
|
136
153
|
## Configuration
|
|
137
154
|
|
|
138
155
|
Create `debtlens.config.json`:
|
|
@@ -157,6 +174,9 @@ Create `debtlens.config.json`:
|
|
|
157
174
|
"state-sprawl.maxStatefulHooks": 6,
|
|
158
175
|
"effect-complexity.maxLines": 30,
|
|
159
176
|
"duplicate-logic.minSimilarity": 0.86
|
|
177
|
+
},
|
|
178
|
+
"propDrilling": {
|
|
179
|
+
"ignoreComponents": ["DesignSystemCard", "DesignSystemModal"]
|
|
160
180
|
}
|
|
161
181
|
}
|
|
162
182
|
```
|
|
@@ -208,6 +228,8 @@ jobs:
|
|
|
208
228
|
changed: origin/${{ github.base_ref }}
|
|
209
229
|
format: sarif
|
|
210
230
|
output: debtlens.sarif
|
|
231
|
+
thresholds: large-component.maxLines=300
|
|
232
|
+
quiet: true
|
|
211
233
|
fail-on: high
|
|
212
234
|
- uses: github/codeql-action/upload-sarif@v3
|
|
213
235
|
if: always()
|
|
@@ -215,7 +237,7 @@ jobs:
|
|
|
215
237
|
sarif_file: debtlens.sarif
|
|
216
238
|
```
|
|
217
239
|
|
|
218
|
-
Inputs: `target`, `min-severity`, `rules`, `fail-on`, `format`, `output`, `changed`, `baseline`, `config`, `working-directory`. Each maps to the matching `scan` flag. With `fail-on`, a qualifying issue fails the job (gating the merge); `if: always()` still uploads the SARIF so annotations appear even on a failing run.
|
|
240
|
+
Inputs: `target`, `min-severity`, `rules`, `fail-on`, `format`, `output`, `changed`, `baseline`, `config`, `write-baseline`, `thresholds`, `max-files`, `working-directory`, `quiet`. Each maps to the matching `scan` flag. `write-baseline` and `baseline` are mutually exclusive. With `fail-on`, a qualifying issue fails the job (gating the merge); `if: always()` still uploads the SARIF so annotations appear even on a failing run.
|
|
219
241
|
|
|
220
242
|
## Development
|
|
221
243
|
|
|
@@ -233,12 +255,6 @@ node dist/cli/index.js scan examples/react --min-severity info
|
|
|
233
255
|
|
|
234
256
|
DebtLens is currently a v0.1 proof-of-concept. The architecture is intentionally simple so maintainers can add rules quickly. The next milestones are documented in [`ROADMAP.md`](./ROADMAP.md), and starter contribution ideas are tracked in [`docs/good-first-issues.md`](./docs/good-first-issues.md).
|
|
235
257
|
|
|
236
|
-
## Positioning
|
|
237
|
-
|
|
238
|
-
DebtLens should be pitched as open-source maintainer infrastructure:
|
|
239
|
-
|
|
240
|
-
> AI-assisted development increases code throughput, but also increases review burden and architectural drift. DebtLens gives maintainers an explainable, open-source way to find maintainability debt before it ships.
|
|
241
|
-
|
|
242
258
|
## License
|
|
243
259
|
|
|
244
260
|
MIT
|
package/dist/cli/index.js
CHANGED
|
@@ -6,9 +6,10 @@ import { loadConfig } from "../config/loadConfig.js";
|
|
|
6
6
|
import { mergeConfig } from "../config/mergeConfig.js";
|
|
7
7
|
import { DEFAULT_BASELINE_FILENAME, applyBaseline, createBaseline, loadBaseline, writeBaseline } from "../core/baseline.js";
|
|
8
8
|
import { scan } from "../core/scan.js";
|
|
9
|
-
import { getChangedFiles } from "../utils/git.js";
|
|
9
|
+
import { getChangedFiles, getStagedFiles } from "../utils/git.js";
|
|
10
10
|
import { parseSeverity, severityRank } from "../core/severity.js";
|
|
11
|
-
import { detectorIds } from "../detectors/index.js";
|
|
11
|
+
import { allDetectors, detectorIds } from "../detectors/index.js";
|
|
12
|
+
import { packageVersion } from "../utils/packageInfo.js";
|
|
12
13
|
import { renderReport } from "../reporters/index.js";
|
|
13
14
|
import { runInit } from "./init.js";
|
|
14
15
|
import { parseCommaList, parseThresholds } from "./parseList.js";
|
|
@@ -16,7 +17,7 @@ const program = new Command();
|
|
|
16
17
|
program
|
|
17
18
|
.name("debtlens")
|
|
18
19
|
.description("Find maintainability debt common in fast-moving AI-assisted TypeScript and React codebases.")
|
|
19
|
-
.version(
|
|
20
|
+
.version(packageVersion);
|
|
20
21
|
program.command("scan")
|
|
21
22
|
.description("Scan a project, directory, or file for maintainability debt.")
|
|
22
23
|
.argument("[target]", "directory or file to scan", ".")
|
|
@@ -32,9 +33,11 @@ program.command("scan")
|
|
|
32
33
|
.option("--baseline <path>", "report only issues absent from this baseline file")
|
|
33
34
|
.option("--write-baseline [path]", "write current issues to a baseline file and exit")
|
|
34
35
|
.option("--changed [ref]", "scan only files changed vs HEAD (or vs <ref> if given)")
|
|
36
|
+
.option("--staged", "scan only files staged in git")
|
|
35
37
|
.option("--config <path>", "path to debtlens.config.json")
|
|
36
38
|
.option("--cwd <path>", "working directory", process.cwd())
|
|
37
39
|
.option("--no-color", "disable ANSI color in terminal output")
|
|
40
|
+
.option("-q, --quiet", "print only the summary line, suppress individual findings")
|
|
38
41
|
.action(async (target, rawOptions) => {
|
|
39
42
|
try {
|
|
40
43
|
const format = parseFormat(String(rawOptions.format ?? "terminal"));
|
|
@@ -43,6 +46,10 @@ program.command("scan")
|
|
|
43
46
|
const minSeverity = parseSeverity(String(rawOptions.minSeverity ?? "low"), "low");
|
|
44
47
|
const failOn = rawOptions.failOn ? parseSeverity(String(rawOptions.failOn), "high") : undefined;
|
|
45
48
|
let changedFiles;
|
|
49
|
+
let fileContents;
|
|
50
|
+
if (rawOptions.staged === true && rawOptions.changed !== undefined) {
|
|
51
|
+
throw new Error("Use either --staged or --changed, not both.");
|
|
52
|
+
}
|
|
46
53
|
if (rawOptions.changed) {
|
|
47
54
|
const base = rawOptions.changed === true ? undefined : String(rawOptions.changed);
|
|
48
55
|
const changed = getChangedFiles(cwd, base);
|
|
@@ -53,6 +60,16 @@ program.command("scan")
|
|
|
53
60
|
changedFiles = changed.files;
|
|
54
61
|
}
|
|
55
62
|
}
|
|
63
|
+
else if (rawOptions.staged === true) {
|
|
64
|
+
const staged = getStagedFiles(cwd);
|
|
65
|
+
if (staged === null) {
|
|
66
|
+
process.stderr.write("DebtLens: --staged ignored (not a git repository).\n");
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
changedFiles = staged.files;
|
|
70
|
+
fileContents = staged.contents;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
56
73
|
const options = mergeConfig(target, fileConfig, {
|
|
57
74
|
cwd,
|
|
58
75
|
include: parseCommaList(rawOptions.include),
|
|
@@ -62,11 +79,20 @@ program.command("scan")
|
|
|
62
79
|
minSeverity,
|
|
63
80
|
maxFiles: rawOptions.maxFiles,
|
|
64
81
|
changedFiles,
|
|
82
|
+
fileContents,
|
|
65
83
|
});
|
|
66
84
|
if (rawOptions.writeBaseline && rawOptions.baseline) {
|
|
67
85
|
throw new Error("Use either --write-baseline or --baseline, not both.");
|
|
68
86
|
}
|
|
69
87
|
const result = await scan(options);
|
|
88
|
+
if (result.summary.filesScanned === 0) {
|
|
89
|
+
process.stderr.write(buildZeroFilesScannedWarning(options.target, options.include, rawOptions.changed !== undefined || rawOptions.staged === true));
|
|
90
|
+
}
|
|
91
|
+
if (result.summary.warnings?.length) {
|
|
92
|
+
for (const warning of result.summary.warnings) {
|
|
93
|
+
process.stderr.write(`DebtLens warning: ${warning}\n`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
70
96
|
if (rawOptions.writeBaseline) {
|
|
71
97
|
const baselinePath = rawOptions.writeBaseline === true
|
|
72
98
|
? DEFAULT_BASELINE_FILENAME
|
|
@@ -78,7 +104,7 @@ program.command("scan")
|
|
|
78
104
|
const reported = rawOptions.baseline
|
|
79
105
|
? applyBaseline(result, loadBaseline(cwd, String(rawOptions.baseline)))
|
|
80
106
|
: result;
|
|
81
|
-
const report = renderReport(reported, format, { color: rawOptions.color !== false && format === "terminal" && process.stdout.isTTY });
|
|
107
|
+
const report = renderReport(reported, format, { color: rawOptions.color !== false && format === "terminal" && process.stdout.isTTY, quiet: rawOptions.quiet === true });
|
|
82
108
|
if (rawOptions.output) {
|
|
83
109
|
const outputPath = resolve(cwd, String(rawOptions.output));
|
|
84
110
|
mkdirSync(dirname(outputPath), { recursive: true });
|
|
@@ -97,6 +123,30 @@ program.command("scan")
|
|
|
97
123
|
process.exitCode = 1;
|
|
98
124
|
}
|
|
99
125
|
});
|
|
126
|
+
program.command("rules")
|
|
127
|
+
.description("List built-in DebtLens rule ids.")
|
|
128
|
+
.option("--format <format>", "terminal or json", "terminal")
|
|
129
|
+
.action((rawOptions) => {
|
|
130
|
+
try {
|
|
131
|
+
const format = parseRulesFormat(String(rawOptions.format ?? "terminal"));
|
|
132
|
+
const rules = allDetectors.map((detector) => ({
|
|
133
|
+
id: detector.id,
|
|
134
|
+
name: detector.name,
|
|
135
|
+
defaultSeverity: detector.defaultSeverity,
|
|
136
|
+
description: detector.description,
|
|
137
|
+
}));
|
|
138
|
+
if (format === "json") {
|
|
139
|
+
process.stdout.write(`${JSON.stringify({ rules }, null, 2)}\n`);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
process.stdout.write(renderRulesTable(rules));
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
146
|
+
process.stderr.write(`DebtLens failed: ${message}\n`);
|
|
147
|
+
process.exitCode = 1;
|
|
148
|
+
}
|
|
149
|
+
});
|
|
100
150
|
program.command("init")
|
|
101
151
|
.description("Create a starter debtlens.config.json in the current directory.")
|
|
102
152
|
.option("--force", "overwrite an existing config file")
|
|
@@ -150,4 +200,35 @@ function parseFormat(value) {
|
|
|
150
200
|
return value;
|
|
151
201
|
throw new Error(`Invalid format "${value}". Expected terminal, json, markdown, or sarif.`);
|
|
152
202
|
}
|
|
203
|
+
function parseRulesFormat(value) {
|
|
204
|
+
if (value === "terminal" || value === "json")
|
|
205
|
+
return value;
|
|
206
|
+
throw new Error(`Invalid rules format "${value}". Expected terminal or json.`);
|
|
207
|
+
}
|
|
208
|
+
function renderRulesTable(rules) {
|
|
209
|
+
const idWidth = Math.max("Rule".length, ...rules.map((rule) => rule.id.length));
|
|
210
|
+
const severityWidth = Math.max("Severity".length, ...rules.map((rule) => rule.defaultSeverity.length));
|
|
211
|
+
const lines = [
|
|
212
|
+
`${"Rule".padEnd(idWidth)} ${"Severity".padEnd(severityWidth)} Description`,
|
|
213
|
+
`${"-".repeat(idWidth)} ${"-".repeat(severityWidth)} -----------`,
|
|
214
|
+
...rules.map((rule) => `${rule.id.padEnd(idWidth)} ${rule.defaultSeverity.padEnd(severityWidth)} ${rule.description}`),
|
|
215
|
+
];
|
|
216
|
+
return `${lines.join("\n")}\n`;
|
|
217
|
+
}
|
|
218
|
+
function buildZeroFilesScannedWarning(target, include, usedGitFileFilter) {
|
|
219
|
+
const hints = [
|
|
220
|
+
"check your include/exclude globs",
|
|
221
|
+
"verify the target path or --cwd",
|
|
222
|
+
];
|
|
223
|
+
if (usedGitFileFilter) {
|
|
224
|
+
hints.push("confirm the git file filter resolves to tracked files");
|
|
225
|
+
}
|
|
226
|
+
return [
|
|
227
|
+
"DebtLens warning: scanned 0 files.",
|
|
228
|
+
`Target: ${target}`,
|
|
229
|
+
`Include globs: ${include.join(", ")}`,
|
|
230
|
+
`Likely causes: ${hints.join("; ")}.`,
|
|
231
|
+
"",
|
|
232
|
+
].join("\n");
|
|
233
|
+
}
|
|
153
234
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5H,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD,OAAO,EAAE,CAAC,sBAAsB,CAAC;IACjC,OAAO,EAAE;QACP,iBAAiB;QACjB,SAAS;QACT,UAAU;QACV,aAAa;QACb,UAAU;QACV,UAAU;QACV,WAAW;QACX,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,aAAa;QACb,2BAA2B;QAC3B,2BAA2B;QAC3B,iBAAiB;QACjB,iBAAiB;KAClB;IACD,WAAW,EAAE,KAAK;IAClB,KAAK,EAAE,EAAE;IACT,UAAU,EAAE;QACV,0BAA0B,EAAE,GAAG;QAC/B,6BAA6B,EAAE,EAAE;QACjC,0BAA0B,EAAE,EAAE;QAC9B,+BAA+B,EAAE,CAAC;QAClC,4BAA4B,EAAE,EAAE;QAChC,mCAAmC,EAAE,CAAC;QACtC,+BAA+B,EAAE,IAAI;QACrC,0BAA0B,EAAE,CAAC;QAC7B,6BAA6B,EAAE,GAAG;QAClC,kCAAkC,EAAE,CAAC;QACrC,iCAAiC,EAAE,CAAC;QACpC,0BAA0B,EAAE,CAAC;QAC7B,yCAAyC,EAAE,GAAG;KAC/C;IACD,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD,OAAO,EAAE,CAAC,sBAAsB,CAAC;IACjC,OAAO,EAAE;QACP,iBAAiB;QACjB,SAAS;QACT,UAAU;QACV,aAAa;QACb,UAAU;QACV,UAAU;QACV,WAAW;QACX,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,aAAa;QACb,2BAA2B;QAC3B,2BAA2B;QAC3B,iBAAiB;QACjB,iBAAiB;KAClB;IACD,WAAW,EAAE,KAAK;IAClB,KAAK,EAAE,EAAE;IACT,UAAU,EAAE;QACV,0BAA0B,EAAE,GAAG;QAC/B,6BAA6B,EAAE,EAAE;QACjC,0BAA0B,EAAE,EAAE;QAC9B,+BAA+B,EAAE,CAAC;QAClC,4BAA4B,EAAE,EAAE;QAChC,mCAAmC,EAAE,CAAC;QACtC,+BAA+B,EAAE,IAAI;QACrC,0BAA0B,EAAE,CAAC;QAC7B,6BAA6B,EAAE,GAAG;QAClC,kCAAkC,EAAE,CAAC;QACrC,iCAAiC,EAAE,CAAC;QACpC,0BAA0B,EAAE,CAAC;QAC7B,yCAAyC,EAAE,GAAG;KAC/C;IACD,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,EAAE;IACd,YAAY,EAAE;QACZ,gBAAgB,EAAE,EAAE;KACrB;CACF,CAAC"}
|
|
@@ -20,7 +20,12 @@ export function mergeConfig(target, fileConfig, cliOptions) {
|
|
|
20
20
|
},
|
|
21
21
|
maxFiles: cliOptions.maxFiles ?? fileConfig.maxFiles ?? defaultConfig.maxFiles,
|
|
22
22
|
vocabulary: { ...defaultConfig.vocabulary, ...(fileConfig.vocabulary ?? {}) },
|
|
23
|
+
propDrillingIgnoreComponents: [
|
|
24
|
+
...(defaultConfig.propDrilling?.ignoreComponents ?? []),
|
|
25
|
+
...(fileConfig.propDrilling?.ignoreComponents ?? []),
|
|
26
|
+
],
|
|
23
27
|
changedFiles: cliOptions.changedFiles,
|
|
28
|
+
fileContents: cliOptions.fileContents,
|
|
24
29
|
};
|
|
25
30
|
}
|
|
26
31
|
//# sourceMappingURL=mergeConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeConfig.js","sourceRoot":"","sources":["../../src/config/mergeConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,UAA0B,EAAE,UAAsB;IAC5F,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAErD,OAAO;QACL,GAAG;QACH,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;QAC5B,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;QACtG,OAAO,EAAE;YACP,GAAG,aAAa,CAAC,OAAO;YACxB,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;YAC7B,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;SAC9B;QACD,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,IAAI,aAAa,CAAC,WAAW;QAC1F,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK;QACrE,UAAU,EAAE;YACV,GAAG,aAAa,CAAC,UAAU;YAC3B,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;YAChC,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;SACjC;QACD,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ;QAC9E,UAAU,EAAE,EAAE,GAAG,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE;QAC7E,YAAY,EAAE,UAAU,CAAC,YAAY;KACtC,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"mergeConfig.js","sourceRoot":"","sources":["../../src/config/mergeConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,UAA0B,EAAE,UAAsB;IAC5F,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAErD,OAAO;QACL,GAAG;QACH,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;QAC5B,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;QACtG,OAAO,EAAE;YACP,GAAG,aAAa,CAAC,OAAO;YACxB,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;YAC7B,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;SAC9B;QACD,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,IAAI,aAAa,CAAC,WAAW;QAC1F,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK;QACrE,UAAU,EAAE;YACV,GAAG,aAAa,CAAC,UAAU;YAC3B,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;YAChC,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;SACjC;QACD,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ;QAC9E,UAAU,EAAE,EAAE,GAAG,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE;QAC7E,4BAA4B,EAAE;YAC5B,GAAG,CAAC,aAAa,CAAC,YAAY,EAAE,gBAAgB,IAAI,EAAE,CAAC;YACvD,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,gBAAgB,IAAI,EAAE,CAAC;SACrD;QACD,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,YAAY,EAAE,UAAU,CAAC,YAAY;KACtC,CAAC;AACJ,CAAC"}
|
package/dist/config/schema.js
CHANGED
|
@@ -57,6 +57,18 @@ export function buildConfigSchema() {
|
|
|
57
57
|
items: { type: "string" },
|
|
58
58
|
},
|
|
59
59
|
},
|
|
60
|
+
propDrilling: {
|
|
61
|
+
type: "object",
|
|
62
|
+
description: "Prop-drilling rule configuration.",
|
|
63
|
+
properties: {
|
|
64
|
+
ignoreComponents: {
|
|
65
|
+
type: "array",
|
|
66
|
+
items: { type: "string" },
|
|
67
|
+
description: "Additional UI primitive component names to ignore (extends built-in host components).",
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
additionalProperties: false,
|
|
71
|
+
},
|
|
60
72
|
},
|
|
61
73
|
};
|
|
62
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,SAAS,GACpB,iGAAiG,CAAC;AAEpG;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,CACxC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAC9E,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,yCAAyC;QAClD,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,qDAAqD;QAClE,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,OAAO,EAAE;gBACP,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,wBAAwB;aACtC;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,wBAAwB;aACtC;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC;gBACrB,WAAW,EAAE,4BAA4B;aAC1C;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE;gBACjC,WAAW,EAAE,yCAAyC;aACvD;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,CAAC;gBACV,WAAW,EAAE,kCAAkC;aAChD;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;gBACpD,UAAU,EAAE,eAAe;gBAC3B,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aACzC;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8DAA8D;gBAC3E,oBAAoB,EAAE;oBACpB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC1B;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,SAAS,GACpB,iGAAiG,CAAC;AAEpG;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,CACxC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAC9E,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,yCAAyC;QAClD,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,qDAAqD;QAClE,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,OAAO,EAAE;gBACP,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,wBAAwB;aACtC;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,wBAAwB;aACtC;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC;gBACrB,WAAW,EAAE,4BAA4B;aAC1C;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE;gBACjC,WAAW,EAAE,yCAAyC;aACvD;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,CAAC;gBACV,WAAW,EAAE,kCAAkC;aAChD;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;gBACpD,UAAU,EAAE,eAAe;gBAC3B,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aACzC;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8DAA8D;gBAC3E,oBAAoB,EAAE;oBACpB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC1B;aACF;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;gBAChD,UAAU,EAAE;oBACV,gBAAgB,EAAE;wBAChB,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,WAAW,EAAE,uFAAuF;qBACrG;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;KACF,CAAC;AACJ,CAAC"}
|
package/dist/core/scan.js
CHANGED
|
@@ -19,24 +19,32 @@ export async function scan(options) {
|
|
|
19
19
|
});
|
|
20
20
|
const files = [];
|
|
21
21
|
for (const absolutePath of filePaths) {
|
|
22
|
-
const
|
|
22
|
+
const contentOverride = getContentOverride(options, absolutePath);
|
|
23
|
+
const sourceFile = contentOverride === undefined
|
|
24
|
+
? project.addSourceFileAtPathIfExists(absolutePath)
|
|
25
|
+
: project.createSourceFile(absolutePath, contentOverride, { overwrite: true });
|
|
23
26
|
if (!sourceFile)
|
|
24
27
|
continue;
|
|
25
28
|
files.push({
|
|
26
29
|
absolutePath,
|
|
27
30
|
relativePath: relative(options.target, absolutePath).replaceAll("\\", "/"),
|
|
28
|
-
content: readFileSync(absolutePath, "utf8"),
|
|
31
|
+
content: contentOverride ?? readFileSync(absolutePath, "utf8"),
|
|
29
32
|
sourceFile,
|
|
30
33
|
});
|
|
31
34
|
}
|
|
32
35
|
const detectors = selectDetectors(options.rules);
|
|
33
36
|
const issues = [];
|
|
37
|
+
const warnings = [];
|
|
34
38
|
for (const detector of detectors) {
|
|
35
39
|
const detectorIssues = await detector.detect({
|
|
36
40
|
project,
|
|
37
41
|
files,
|
|
38
42
|
options,
|
|
39
43
|
getThreshold: (key, fallback) => getThreshold(options, key, fallback),
|
|
44
|
+
addWarning: (warning) => {
|
|
45
|
+
if (!warnings.includes(warning))
|
|
46
|
+
warnings.push(warning);
|
|
47
|
+
},
|
|
40
48
|
});
|
|
41
49
|
issues.push(...detectorIssues.filter((issue) => meetsMinSeverity(issue.severity, options.minSeverity)));
|
|
42
50
|
}
|
|
@@ -49,24 +57,26 @@ export async function scan(options) {
|
|
|
49
57
|
return byFile;
|
|
50
58
|
return (a.location?.startLine ?? 0) - (b.location?.startLine ?? 0);
|
|
51
59
|
});
|
|
60
|
+
const summary = {
|
|
61
|
+
totalIssues: issues.length,
|
|
62
|
+
bySeverity: {
|
|
63
|
+
info: issues.filter((issue) => issue.severity === "info").length,
|
|
64
|
+
low: issues.filter((issue) => issue.severity === "low").length,
|
|
65
|
+
medium: issues.filter((issue) => issue.severity === "medium").length,
|
|
66
|
+
high: issues.filter((issue) => issue.severity === "high").length,
|
|
67
|
+
},
|
|
68
|
+
byRule: issues.reduce((accumulator, issue) => {
|
|
69
|
+
accumulator[issue.ruleId] = (accumulator[issue.ruleId] ?? 0) + 1;
|
|
70
|
+
return accumulator;
|
|
71
|
+
}, {}),
|
|
72
|
+
filesScanned: files.length,
|
|
73
|
+
rulesRun: detectors.length,
|
|
74
|
+
elapsedMs: Date.now() - startedAt,
|
|
75
|
+
...(warnings.length ? { warnings } : {}),
|
|
76
|
+
};
|
|
52
77
|
return {
|
|
53
78
|
issues,
|
|
54
|
-
summary
|
|
55
|
-
totalIssues: issues.length,
|
|
56
|
-
bySeverity: {
|
|
57
|
-
info: issues.filter((issue) => issue.severity === "info").length,
|
|
58
|
-
low: issues.filter((issue) => issue.severity === "low").length,
|
|
59
|
-
medium: issues.filter((issue) => issue.severity === "medium").length,
|
|
60
|
-
high: issues.filter((issue) => issue.severity === "high").length,
|
|
61
|
-
},
|
|
62
|
-
byRule: issues.reduce((accumulator, issue) => {
|
|
63
|
-
accumulator[issue.ruleId] = (accumulator[issue.ruleId] ?? 0) + 1;
|
|
64
|
-
return accumulator;
|
|
65
|
-
}, {}),
|
|
66
|
-
filesScanned: files.length,
|
|
67
|
-
rulesRun: detectors.length,
|
|
68
|
-
elapsedMs: Date.now() - startedAt,
|
|
69
|
-
},
|
|
79
|
+
summary,
|
|
70
80
|
options: {
|
|
71
81
|
target: options.target,
|
|
72
82
|
include: options.include,
|
|
@@ -110,6 +120,11 @@ function canonicalize(path) {
|
|
|
110
120
|
return path;
|
|
111
121
|
}
|
|
112
122
|
}
|
|
123
|
+
function getContentOverride(options, absolutePath) {
|
|
124
|
+
if (!options.fileContents)
|
|
125
|
+
return undefined;
|
|
126
|
+
return options.fileContents[canonicalize(absolutePath)] ?? options.fileContents[absolutePath];
|
|
127
|
+
}
|
|
113
128
|
function selectDetectors(ruleIds) {
|
|
114
129
|
if (!ruleIds || ruleIds.length === 0) {
|
|
115
130
|
return allDetectors;
|
package/dist/core/scan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/core/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtE,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAoB;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;QAC1B,eAAe,EAAE;YACf,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ;YACxB,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,YAAY,EAAE,IAAI;SACnB;QACD,2BAA2B,EAAE,IAAI;KAClC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,KAAK,MAAM,YAAY,IAAI,SAAS,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,OAAO,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/core/scan.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -38,6 +38,10 @@ export interface DebtLensConfig {
|
|
|
38
38
|
maxFiles?: number;
|
|
39
39
|
/** Concept id -> competing term variants, used by the naming-drift rule. */
|
|
40
40
|
vocabulary?: Record<string, string[]>;
|
|
41
|
+
/** Prop-drilling rule configuration. */
|
|
42
|
+
propDrilling?: {
|
|
43
|
+
ignoreComponents?: string[];
|
|
44
|
+
};
|
|
41
45
|
}
|
|
42
46
|
export interface ScanOptions {
|
|
43
47
|
cwd: string;
|
|
@@ -51,6 +55,10 @@ export interface ScanOptions {
|
|
|
51
55
|
vocabulary?: Record<string, string[]>;
|
|
52
56
|
/** When set, only scan files whose absolute path is in this list (--changed mode). */
|
|
53
57
|
changedFiles?: string[];
|
|
58
|
+
/** Absolute file path -> source text override, used when scanning staged git blobs. */
|
|
59
|
+
fileContents?: Record<string, string>;
|
|
60
|
+
/** Prop-drilling rule configuration. */
|
|
61
|
+
propDrillingIgnoreComponents?: string[];
|
|
54
62
|
}
|
|
55
63
|
export interface CliOptions {
|
|
56
64
|
cwd?: string;
|
|
@@ -66,12 +74,14 @@ export interface CliOptions {
|
|
|
66
74
|
configPath?: string;
|
|
67
75
|
noColor?: boolean;
|
|
68
76
|
changedFiles?: string[];
|
|
77
|
+
fileContents?: Record<string, string>;
|
|
69
78
|
}
|
|
70
79
|
export interface DetectorContext {
|
|
71
80
|
project: Project;
|
|
72
81
|
files: SourceFileInfo[];
|
|
73
82
|
options: ScanOptions;
|
|
74
83
|
getThreshold: (key: string, fallback: number) => number;
|
|
84
|
+
addWarning: (warning: string) => void;
|
|
75
85
|
}
|
|
76
86
|
export interface Detector {
|
|
77
87
|
id: string;
|
|
@@ -88,6 +98,7 @@ export interface ScanSummary {
|
|
|
88
98
|
filesScanned: number;
|
|
89
99
|
rulesRun: number;
|
|
90
100
|
elapsedMs: number;
|
|
101
|
+
warnings?: string[];
|
|
91
102
|
}
|
|
92
103
|
export interface ScanResult {
|
|
93
104
|
issues: DebtIssue[];
|
|
@@ -37,6 +37,9 @@ export const duplicateLogicDetector = {
|
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
+
if (snippets.length > maxSnippets) {
|
|
41
|
+
context.addWarning(`duplicate-logic inspected ${maxSnippets} of ${snippets.length} eligible snippets because duplicate-logic.maxSnippets is capped.`);
|
|
42
|
+
}
|
|
40
43
|
const limited = snippets.slice(0, maxSnippets);
|
|
41
44
|
const seenPairs = new Set();
|
|
42
45
|
for (let i = 0; i < limited.length; i += 1) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicateLogic.js","sourceRoot":"","sources":["../../src/detectors/duplicateLogic.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"duplicateLogic.js","sourceRoot":"","sources":["../../src/detectors/duplicateLogic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Node, SyntaxKind } from "ts-morph";
|
|
2
2
|
import { createIssue } from "../utils/createIssue.js";
|
|
3
3
|
import { nodeLineSpan } from "../utils/lines.js";
|
|
4
|
+
const EFFECT_HOOKS = new Set(["useEffect", "useLayoutEffect", "useInsertionEffect"]);
|
|
4
5
|
export const effectComplexityDetector = {
|
|
5
6
|
id: "effect-complexity",
|
|
6
7
|
name: "Effect complexity",
|
|
7
|
-
description: "Flags
|
|
8
|
+
description: "Flags React effect hooks that are long, branchy, or overloaded with dependencies.",
|
|
8
9
|
defaultSeverity: "medium",
|
|
9
10
|
tags: ["react", "effects", "complexity"],
|
|
10
11
|
detect(context) {
|
|
@@ -19,7 +20,7 @@ export const effectComplexityDetector = {
|
|
|
19
20
|
: Node.isPropertyAccessExpression(expression)
|
|
20
21
|
? expression.getName()
|
|
21
22
|
: undefined;
|
|
22
|
-
if (expressionName
|
|
23
|
+
if (!expressionName || !EFFECT_HOOKS.has(expressionName))
|
|
23
24
|
continue;
|
|
24
25
|
const [callback, dependencies] = call.getArguments();
|
|
25
26
|
if (!callback)
|
|
@@ -47,7 +48,7 @@ export const effectComplexityDetector = {
|
|
|
47
48
|
confidence: 0.8,
|
|
48
49
|
file: file.relativePath,
|
|
49
50
|
location: { startLine: span.startLine, endLine: span.endLine },
|
|
50
|
-
message: `This
|
|
51
|
+
message: `This ${expressionName} spans ${span.lines} lines, has ${dependencyCount} dependencies, ${branchCount} branches, and ${callCount} nested calls.`,
|
|
51
52
|
evidence: [
|
|
52
53
|
`Lines: ${span.lines} / ${maxLines}`,
|
|
53
54
|
`Dependencies: ${dependencyCount} / ${maxDependencies}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effectComplexity.js","sourceRoot":"","sources":["../../src/detectors/effectComplexity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,wBAAwB,GAAa;IAChD,EAAE,EAAE,mBAAmB;IACvB,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"effectComplexity.js","sourceRoot":"","sources":["../../src/detectors/effectComplexity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAErF,MAAM,CAAC,MAAM,wBAAwB,GAAa;IAChD,EAAE,EAAE,mBAAmB;IACvB,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mFAAmF;IAChG,eAAe,EAAE,QAAQ;IACzB,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC;IACxC,MAAM,CAAC,OAAwB;QAC7B,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAC;QAErF,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBACnF,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxC,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;oBAClD,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE;oBACtB,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC;wBAC3C,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE;wBACtB,CAAC,CAAC,SAAS,CAAC;gBAEhB,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC;oBAAE,SAAS;gBAEnE,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrD,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBAExB,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACpC,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC5B,OAAO,IAAI,KAAK,UAAU,CAAC,WAAW;2BACjC,IAAI,KAAK,UAAU,CAAC,qBAAqB;2BACzC,IAAI,KAAK,UAAU,CAAC,YAAY;2BAChC,IAAI,KAAK,UAAU,CAAC,cAAc;2BAClC,IAAI,KAAK,UAAU,CAAC,cAAc;2BAClC,IAAI,KAAK,UAAU,CAAC,eAAe,CAAC;gBAC3C,CAAC,CAAC,CAAC,MAAM,CAAC;gBAEV,MAAM,eAAe,GAAG,YAAY,IAAI,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC;oBACjF,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,MAAM;oBACnC,CAAC,CAAC,CAAC,CAAC;gBAEN,MAAM,YAAY,GAAG,QAAQ,CAAC,oBAAoB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC1F,MAAM,SAAS,GAAG,QAAQ,CAAC,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;gBAElF,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,IAAI,eAAe,GAAG,eAAe,IAAI,WAAW,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC;oBAAE,SAAS;gBAE7G,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;oBACtB,QAAQ,EAAE,wBAAwB;oBAClC,QAAQ,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ,GAAG,GAAG,IAAI,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;oBAC9E,UAAU,EAAE,GAAG;oBACf,IAAI,EAAE,IAAI,CAAC,YAAY;oBACvB,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;oBAC9D,OAAO,EAAE,QAAQ,cAAc,UAAU,IAAI,CAAC,KAAK,eAAe,eAAe,kBAAkB,WAAW,kBAAkB,SAAS,gBAAgB;oBACzJ,QAAQ,EAAE;wBACR,UAAU,IAAI,CAAC,KAAK,MAAM,QAAQ,EAAE;wBACpC,iBAAiB,eAAe,MAAM,eAAe,EAAE;wBACvD,aAAa,WAAW,EAAE;wBAC1B,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,mBAAmB;qBAC3D;oBACD,UAAU,EAAE,iIAAiI;iBAC9I,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
|