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.
Files changed (40) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +24 -8
  3. package/dist/cli/index.js +85 -4
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/config/defaults.js +3 -0
  6. package/dist/config/defaults.js.map +1 -1
  7. package/dist/config/mergeConfig.js +5 -0
  8. package/dist/config/mergeConfig.js.map +1 -1
  9. package/dist/config/schema.js +12 -0
  10. package/dist/config/schema.js.map +1 -1
  11. package/dist/core/scan.js +33 -18
  12. package/dist/core/scan.js.map +1 -1
  13. package/dist/core/types.d.ts +11 -0
  14. package/dist/detectors/duplicateLogic.js +3 -0
  15. package/dist/detectors/duplicateLogic.js.map +1 -1
  16. package/dist/detectors/effectComplexity.js +4 -3
  17. package/dist/detectors/effectComplexity.js.map +1 -1
  18. package/dist/detectors/propDrilling.js +2 -1
  19. package/dist/detectors/propDrilling.js.map +1 -1
  20. package/dist/reporters/index.d.ts +1 -0
  21. package/dist/reporters/index.js +1 -1
  22. package/dist/reporters/index.js.map +1 -1
  23. package/dist/reporters/sarifReporter.js +2 -2
  24. package/dist/reporters/sarifReporter.js.map +1 -1
  25. package/dist/reporters/terminalReporter.d.ts +1 -0
  26. package/dist/reporters/terminalReporter.js +3 -0
  27. package/dist/reporters/terminalReporter.js.map +1 -1
  28. package/dist/utils/git.d.ts +6 -0
  29. package/dist/utils/git.js +39 -1
  30. package/dist/utils/git.js.map +1 -1
  31. package/dist/utils/hostComponents.d.ts +4 -1
  32. package/dist/utils/hostComponents.js +8 -2
  33. package/dist/utils/hostComponents.js.map +1 -1
  34. package/dist/utils/packageInfo.d.ts +1 -0
  35. package/dist/utils/packageInfo.js +22 -0
  36. package/dist/utils/packageInfo.js.map +1 -0
  37. package/docs/good-first-issues.md +127 -16
  38. package/docs/rules.md +43 -1
  39. package/package.json +1 -1
  40. 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 `useEffect` blocks | Medium |
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("0.1.0");
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
@@ -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;AAClD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,6FAA6F,CAAC;KAC1G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;KACpB,WAAW,CAAC,8DAA8D,CAAC;KAC3E,QAAQ,CAAC,UAAU,EAAE,2BAA2B,EAAE,GAAG,CAAC;KACtD,MAAM,CAAC,0BAA0B,EAAE,0CAA0C,CAAC;KAC9E,MAAM,CAAC,0BAA0B,EAAE,0CAA0C,CAAC;KAC9E,MAAM,CAAC,2BAA2B,EAAE,4BAA4B,EAAE,KAAK,CAAC;KACxE,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;KAC3F,MAAM,CAAC,0BAA0B,EAAE,+CAA+C,CAAC;KACnF,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,YAAY,CAAC;KACpE,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,UAAU,CAAC;KAC7E,MAAM,CAAC,qBAAqB,EAAE,8CAA8C,CAAC;KAC7E,MAAM,CAAC,sBAAsB,EAAE,qDAAqD,CAAC;KACrF,MAAM,CAAC,mBAAmB,EAAE,mDAAmD,CAAC;KAChF,MAAM,CAAC,yBAAyB,EAAE,kDAAkD,CAAC;KACrF,MAAM,CAAC,iBAAiB,EAAE,wDAAwD,CAAC;KACnF,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;KACzD,MAAM,CAAC,cAAc,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC1D,MAAM,CAAC,YAAY,EAAE,uCAAuC,CAAC;KAC7D,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,UAAmC,EAAE,EAAE;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9F,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEhG,IAAI,YAAkC,CAAC;QACvC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAClF,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC3C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE;YAC9C,GAAG;YACH,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,OAA6B,CAAC;YACjE,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,OAA6B,CAAC;YACjE,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,KAA2B,CAAC;YAC5D,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC,SAA+B,CAAC;YACvE,WAAW;YACX,QAAQ,EAAE,UAAU,CAAC,QAA8B;YACnD,YAAY;SACb,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnC,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC7B,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,KAAK,IAAI;gBACpD,CAAC,CAAC,yBAAyB;gBAC3B,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,MAAM,CAAC,MAAM,cAAc,OAAO,IAAI,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ;YAClC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvE,CAAC,CAAC,MAAM,CAAC;QAEX,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,KAAK,KAAK,IAAI,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAEtI,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3D,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACpG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;KACpB,WAAW,CAAC,iEAAiE,CAAC;KAC9E,MAAM,CAAC,SAAS,EAAE,mCAAmC,CAAC;KACtD,MAAM,CAAC,cAAc,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC1D,MAAM,CAAC,CAAC,UAAmC,EAAE,EAAE;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvC,SAAS,aAAa,CAAC,KAAyB;IAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,OAAO,GAA2B;QACtC,UAAU,EAAE,iBAAiB;QAC7B,SAAS,EAAE,iBAAiB;QAC5B,KAAK,EAAE,cAAc;QACrB,OAAO,EAAE,mBAAmB;QAC5B,MAAM,EAAE,mBAAmB;QAC3B,UAAU,EAAE,iBAAiB;QAC7B,SAAS,EAAE,iBAAiB;QAC5B,YAAY,EAAE,kBAAkB;QAChC,WAAW,EAAE,kBAAkB;QAC/B,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,cAAc;QACxB,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,cAAc;KACvB,CAAC;IACF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,0CAA0C,KAAK,IAAI,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACxG,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,iDAAiD,CAAC,CAAC;AAC7F,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -36,5 +36,8 @@ export const defaultConfig = {
36
36
  },
37
37
  maxFiles: 2000,
38
38
  vocabulary: {},
39
+ propDrilling: {
40
+ ignoreComponents: [],
41
+ },
39
42
  };
40
43
  //# sourceMappingURL=defaults.js.map
@@ -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;CACf,CAAC"}
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"}
@@ -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 sourceFile = project.addSourceFileAtPathIfExists(absolutePath);
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;
@@ -1 +1 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/core/scan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/core/scan.ts"],"names":[],"mappings":"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"}
@@ -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 useEffect blocks that are long, branchy, or overloaded with dependencies.",
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 !== "useEffect")
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 useEffect spans ${span.lines} lines, has ${dependencyCount} dependencies, ${branchCount} branches, and ${callCount} nested calls.`,
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":"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"}
1
+ {"version":3,"file":"effectComplexity.js","sourceRoot":"","sources":["../../src/detectors/effectComplexity.ts"],"names":[],"mappings":"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"}