habit-hooks 0.1.0-beta.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 (211) hide show
  1. package/dist/baseline/auto-prune.d.ts +4 -0
  2. package/dist/baseline/auto-prune.js +38 -0
  3. package/dist/baseline/auto-prune.js.map +1 -0
  4. package/dist/baseline/commands.js +3 -9
  5. package/dist/baseline/commands.js.map +1 -1
  6. package/dist/baseline/filter.d.ts +2 -1
  7. package/dist/baseline/filter.js +2 -15
  8. package/dist/baseline/filter.js.map +1 -1
  9. package/dist/baseline/reap.d.ts +6 -0
  10. package/dist/baseline/reap.js +22 -0
  11. package/dist/baseline/reap.js.map +1 -0
  12. package/dist/baseline/snooze-index.d.ts +5 -0
  13. package/dist/baseline/snooze-index.js +65 -0
  14. package/dist/baseline/snooze-index.js.map +1 -0
  15. package/dist/checks/comment-check.js +4 -2
  16. package/dist/checks/comment-check.js.map +1 -1
  17. package/dist/checks/eslint-wrap.js +10 -7
  18. package/dist/checks/eslint-wrap.js.map +1 -1
  19. package/dist/checks/jscpd-wrap.d.ts +4 -1
  20. package/dist/checks/jscpd-wrap.js +12 -11
  21. package/dist/checks/jscpd-wrap.js.map +1 -1
  22. package/dist/checks/knip-wrap.js +20 -12
  23. package/dist/checks/knip-wrap.js.map +1 -1
  24. package/dist/cli/init/apply-recommendations.d.ts +3 -0
  25. package/dist/cli/init/apply-recommendations.js +76 -0
  26. package/dist/cli/init/apply-recommendations.js.map +1 -0
  27. package/dist/cli/init/command-runner.d.ts +6 -0
  28. package/dist/cli/init/command-runner.js +22 -0
  29. package/dist/cli/init/command-runner.js.map +1 -0
  30. package/dist/cli/init/completion-report.d.ts +11 -0
  31. package/dist/cli/init/completion-report.js +98 -0
  32. package/dist/cli/init/completion-report.js.map +1 -0
  33. package/dist/cli/init/ctx.d.ts +12 -0
  34. package/dist/cli/init/ctx.js +16 -0
  35. package/dist/cli/init/ctx.js.map +1 -0
  36. package/dist/cli/init/detect.d.ts +2 -0
  37. package/dist/cli/init/detect.js +55 -6
  38. package/dist/cli/init/detect.js.map +1 -1
  39. package/dist/cli/init/git-hook.d.ts +2 -1
  40. package/dist/cli/init/git-hook.js +10 -6
  41. package/dist/cli/init/git-hook.js.map +1 -1
  42. package/dist/cli/init/install-commands.d.ts +3 -1
  43. package/dist/cli/init/install-commands.js +27 -0
  44. package/dist/cli/init/install-commands.js.map +1 -1
  45. package/dist/cli/init/recommendations.d.ts +14 -0
  46. package/dist/cli/init/recommendations.js +66 -0
  47. package/dist/cli/init/recommendations.js.map +1 -0
  48. package/dist/cli/init/report-language.d.ts +1 -0
  49. package/dist/cli/init/report-language.js +12 -0
  50. package/dist/cli/init/report-language.js.map +1 -0
  51. package/dist/cli/init/reporters.d.ts +1 -0
  52. package/dist/cli/init/reporters.js +8 -4
  53. package/dist/cli/init/reporters.js.map +1 -1
  54. package/dist/cli/init/run.d.ts +5 -0
  55. package/dist/cli/init/run.js +60 -96
  56. package/dist/cli/init/run.js.map +1 -1
  57. package/dist/cli/init/scaffold-config.d.ts +8 -1
  58. package/dist/cli/init/scaffold-config.js +20 -3
  59. package/dist/cli/init/scaffold-config.js.map +1 -1
  60. package/dist/cli/init/scaffold-jscpd-config.d.ts +2 -1
  61. package/dist/cli/init/scaffold-jscpd-config.js +3 -3
  62. package/dist/cli/init/scaffold-jscpd-config.js.map +1 -1
  63. package/dist/cli/init/scaffold-ruff-config.d.ts +2 -0
  64. package/dist/cli/init/scaffold-ruff-config.js +12 -0
  65. package/dist/cli/init/scaffold-ruff-config.js.map +1 -0
  66. package/dist/cli/init/skill.d.ts +2 -1
  67. package/dist/cli/init/skill.js +18 -15
  68. package/dist/cli/init/skill.js.map +1 -1
  69. package/dist/cli/init/snippet.d.ts +2 -1
  70. package/dist/cli/init/snippet.js +17 -4
  71. package/dist/cli/init/snippet.js.map +1 -1
  72. package/dist/cli/init/templates/eslint-config.d.ts +1 -1
  73. package/dist/cli/init/templates/eslint-config.js +10 -0
  74. package/dist/cli/init/templates/eslint-config.js.map +1 -1
  75. package/dist/cli/init/templates/jscpd-config.d.ts +2 -1
  76. package/dist/cli/init/templates/jscpd-config.js +14 -6
  77. package/dist/cli/init/templates/jscpd-config.js.map +1 -1
  78. package/dist/cli/init/templates/ruff-config.d.ts +2 -0
  79. package/dist/cli/init/templates/ruff-config.js +16 -0
  80. package/dist/cli/init/templates/ruff-config.js.map +1 -0
  81. package/dist/cli/init/tool-steps.d.ts +2 -0
  82. package/dist/cli/init/tool-steps.js +78 -0
  83. package/dist/cli/init/tool-steps.js.map +1 -0
  84. package/dist/cli/init-command.js +32 -6
  85. package/dist/cli/init-command.js.map +1 -1
  86. package/dist/cli.js +2 -2
  87. package/dist/cli.js.map +1 -1
  88. package/dist/config/catalogue-unused.d.ts +2 -0
  89. package/dist/config/catalogue-unused.js +39 -0
  90. package/dist/config/catalogue-unused.js.map +1 -0
  91. package/dist/config/catalogue.d.ts +2 -0
  92. package/dist/config/catalogue.js +163 -0
  93. package/dist/config/catalogue.js.map +1 -0
  94. package/dist/config/defaults.d.ts +2 -2
  95. package/dist/config/defaults.js +7 -167
  96. package/dist/config/defaults.js.map +1 -1
  97. package/dist/config/load.d.ts +1 -0
  98. package/dist/config/load.js +1 -0
  99. package/dist/config/load.js.map +1 -1
  100. package/dist/config/merge.js +1 -0
  101. package/dist/config/merge.js.map +1 -1
  102. package/dist/config/schema.d.ts +9 -0
  103. package/dist/config/schema.js.map +1 -1
  104. package/dist/config/tool-smells.d.ts +14 -0
  105. package/dist/config/tool-smells.js +69 -0
  106. package/dist/config/tool-smells.js.map +1 -0
  107. package/dist/config/validate.js +42 -11
  108. package/dist/config/validate.js.map +1 -1
  109. package/dist/detect/path.d.ts +1 -0
  110. package/dist/detect/path.js +14 -0
  111. package/dist/detect/path.js.map +1 -0
  112. package/dist/detect/tool.d.ts +2 -2
  113. package/dist/detect/tool.js +2 -0
  114. package/dist/detect/tool.js.map +1 -1
  115. package/dist/discover.d.ts +2 -0
  116. package/dist/discover.js +14 -0
  117. package/dist/discover.js.map +1 -0
  118. package/dist/guide/command.d.ts +6 -0
  119. package/dist/guide/command.js +20 -0
  120. package/dist/guide/command.js.map +1 -0
  121. package/dist/guide/guide.d.ts +11 -0
  122. package/dist/guide/guide.js +82 -0
  123. package/dist/guide/guide.js.map +1 -0
  124. package/dist/guide/render.d.ts +3 -0
  125. package/dist/guide/render.js +14 -0
  126. package/dist/guide/render.js.map +1 -0
  127. package/dist/mapper/mapper.d.ts +34 -0
  128. package/dist/mapper/mapper.js +80 -0
  129. package/dist/mapper/mapper.js.map +1 -0
  130. package/dist/prompts/packaged-dir.js +1 -1
  131. package/dist/prompts/packaged-dir.js.map +1 -1
  132. package/dist/prompts/registry.js +1 -26
  133. package/dist/prompts/registry.js.map +1 -1
  134. package/dist/rule-files.d.ts +2 -0
  135. package/dist/rule-files.js +22 -0
  136. package/dist/rule-files.js.map +1 -0
  137. package/dist/rules/registry.js +3 -3
  138. package/dist/rules/registry.js.map +1 -1
  139. package/dist/runner.d.ts +4 -4
  140. package/dist/runner.js +95 -105
  141. package/dist/runner.js.map +1 -1
  142. package/dist/sensors/adapter.d.ts +17 -0
  143. package/dist/sensors/adapter.js +81 -0
  144. package/dist/sensors/adapter.js.map +1 -0
  145. package/dist/sensors/deptry-sensor.d.ts +3 -0
  146. package/dist/sensors/deptry-sensor.js +43 -0
  147. package/dist/sensors/deptry-sensor.js.map +1 -0
  148. package/dist/sensors/line-count-sensor.d.ts +3 -0
  149. package/dist/sensors/line-count-sensor.js +50 -0
  150. package/dist/sensors/line-count-sensor.js.map +1 -0
  151. package/dist/sensors/needs-extraction.d.ts +3 -0
  152. package/dist/sensors/needs-extraction.js +57 -0
  153. package/dist/sensors/needs-extraction.js.map +1 -0
  154. package/dist/sensors/preset.d.ts +17 -0
  155. package/dist/sensors/preset.js +57 -0
  156. package/dist/sensors/preset.js.map +1 -0
  157. package/dist/sensors/python-preset.d.ts +7 -0
  158. package/dist/sensors/python-preset.js +34 -0
  159. package/dist/sensors/python-preset.js.map +1 -0
  160. package/dist/sensors/runner.d.ts +12 -0
  161. package/dist/sensors/runner.js +94 -0
  162. package/dist/sensors/runner.js.map +1 -0
  163. package/dist/sensors/types.d.ts +15 -0
  164. package/dist/sensors/types.js +5 -0
  165. package/dist/sensors/types.js.map +1 -0
  166. package/dist/types.d.ts +4 -1
  167. package/dist/wrap/notices.d.ts +6 -0
  168. package/dist/wrap/notices.js +9 -0
  169. package/dist/wrap/notices.js.map +1 -1
  170. package/dist/wrap/run.d.ts +2 -0
  171. package/dist/wrap/run.js +6 -1
  172. package/dist/wrap/run.js.map +1 -1
  173. package/dist/wrap/shell.d.ts +1 -0
  174. package/dist/wrap/shell.js +8 -2
  175. package/dist/wrap/shell.js.map +1 -1
  176. package/package.json +17 -10
  177. package/src/prompts/deep-nesting.md +13 -0
  178. package/src/prompts/needs-extraction.md +9 -0
  179. package/src/prompts/non-null-assertion.md +10 -0
  180. package/src/prompts/oversized-function.issues.njk +5 -0
  181. package/src/prompts/parse-error.md +5 -0
  182. package/src/prompts/uncoached.md +4 -3
  183. package/src/skills/habit-hooks-prompting/SKILL.md +37 -0
  184. package/dist/eslint-runner.d.ts +0 -7
  185. package/dist/eslint-runner.js +0 -34
  186. package/dist/eslint-runner.js.map +0 -1
  187. package/dist/reporter.d.ts +0 -7
  188. package/dist/reporter.js +0 -114
  189. package/dist/reporter.js.map +0 -1
  190. package/src/prompts/eslint-boundaries-dependencies.md +0 -9
  191. package/src/prompts/eslint-eqeqeq.md +0 -3
  192. package/src/prompts/eslint-fatal.md +0 -7
  193. package/src/prompts/eslint-no-duplicate-imports.md +0 -1
  194. package/src/prompts/eslint-no-unused-vars.md +0 -3
  195. package/src/prompts/eslint-no-var.md +0 -1
  196. package/src/prompts/eslint-no-warning-comments.md +0 -3
  197. package/src/prompts/eslint-prefer-const.md +0 -3
  198. package/src/prompts/eslint-typescript-eslint-no-explicit-any.md +0 -3
  199. package/src/prompts/eslint-typescript-eslint-no-inferrable-types.md +0 -3
  200. package/src/prompts/eslint-typescript-eslint-no-non-null-assertion.md +0 -3
  201. package/src/prompts/knip-classMembers.md +0 -7
  202. package/src/prompts/knip-dependencies.md +0 -9
  203. package/src/prompts/knip-exports.md +0 -9
  204. package/src/prompts/knip-files.md +0 -9
  205. package/src/prompts/knip-types.md +0 -9
  206. /package/src/prompts/{jscpd-duplication.md → duplicated-code.md} +0 -0
  207. /package/src/prompts/{eslint-complexity.md → high-complexity.md} +0 -0
  208. /package/src/prompts/{comment-non-essential.md → non-essential-comment.md} +0 -0
  209. /package/src/prompts/{eslint-max-lines.md → oversized-file.md} +0 -0
  210. /package/src/prompts/{eslint-max-lines-per-function.md → oversized-function.md} +0 -0
  211. /package/src/prompts/{eslint-max-params.md → too-many-parameters.md} +0 -0
@@ -0,0 +1,4 @@
1
+ import { type RunOptions, type RunResult } from '../runner.js';
2
+ export declare function autoPruneFullRepo(cwd: string, configPath?: string): Promise<string[]>;
3
+ export declare function autoPruneNotice(pruned: string[]): string;
4
+ export declare function runWithAutoPrune(cwd: string, options: RunOptions): Promise<RunResult>;
@@ -0,0 +1,38 @@
1
+ import { run } from '../runner.js';
2
+ import { loadBaseline, saveBaseline, BASELINE_VERSION } from './store.js';
3
+ import { toRepoRelative } from './filter.js';
4
+ import { reapBaseline } from './reap.js';
5
+ // Auto-prune reaps baseline entries whose smell is actually fixed. It runs a
6
+ // baseline-free full scan so a sensor gated off by the baseline can't make a
7
+ // snoozed file look falsely clean, then shares the reaper with `baseline prune`.
8
+ // configPath must match the one used for the main run so the re-scan sees the
9
+ // same rules — using a different (or default-discovered) config could wrongly
10
+ // mark a still-snoozed file as clean and prune it.
11
+ export async function autoPruneFullRepo(cwd, configPath) {
12
+ const baseline = loadBaseline(cwd);
13
+ if (Object.keys(baseline.files).length === 0)
14
+ return [];
15
+ const scan = await run(cwd, { configPath, scopeFlags: { all: true }, applyBaseline: false });
16
+ const violating = new Set(scan.violations.map((v) => toRepoRelative(cwd, v.file)));
17
+ const { files, pruned } = reapBaseline(cwd, baseline, violating);
18
+ if (pruned.length > 0)
19
+ saveBaseline(cwd, { version: BASELINE_VERSION, files });
20
+ return pruned;
21
+ }
22
+ export function autoPruneNotice(pruned) {
23
+ const entries = pruned.length === 1 ? 'entry' : 'entries';
24
+ return `🧹 Auto-pruned ${String(pruned.length)} fixed baseline ${entries}: ${pruned.join(', ')}\n`;
25
+ }
26
+ // run() is a pure evaluator; auto-prune is the one side effect a full-repo run
27
+ // performs. A scoped run never mutates the baseline (a file can look clean only
28
+ // because its smell is outside the diff), so it is a guaranteed no-op.
29
+ export async function runWithAutoPrune(cwd, options) {
30
+ const result = await run(cwd, options);
31
+ if (result.scopeMode !== 'all')
32
+ return result;
33
+ const pruned = await autoPruneFullRepo(cwd, options.configPath);
34
+ if (pruned.length === 0)
35
+ return result;
36
+ return { ...result, stdout: result.stdout + autoPruneNotice(pruned) };
37
+ }
38
+ //# sourceMappingURL=auto-prune.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-prune.js","sourceRoot":"","sources":["../../src/baseline/auto-prune.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAmC,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,6EAA6E;AAC7E,6EAA6E;AAC7E,iFAAiF;AACjF,8EAA8E;AAC9E,8EAA8E;AAC9E,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,UAAmB;IACtE,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7F,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,YAAY,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAgB;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,OAAO,kBAAkB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACrG,CAAC;AAED,+EAA+E;AAC/E,gFAAgF;AAChF,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,OAAmB;IACrE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACvC,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;AACxE,CAAC"}
@@ -4,6 +4,7 @@ import { run } from '../runner.js';
4
4
  import { isWorkingTreeCleanFor, lastCommitHash } from './file-hash.js';
5
5
  import { BASELINE_VERSION, baselineExists, loadBaseline, saveBaseline, } from './store.js';
6
6
  import { toRepoRelative } from './filter.js';
7
+ import { reapBaseline } from './reap.js';
7
8
  function ok(stdout = '') {
8
9
  return { stdout, stderr: '', exitCode: 0 };
9
10
  }
@@ -87,19 +88,12 @@ export function baselineForget(cwd, paths) {
87
88
  saveBaseline(cwd, { version: BASELINE_VERSION, files });
88
89
  return ok(`baseline forget: removed ${String(removed)} entry/entries\n`);
89
90
  }
90
- function shouldKeepEntry(cwd, relPath, violating) {
91
- if (!existsSync(join(cwd, relPath)))
92
- return false;
93
- return violating.has(relPath);
94
- }
95
91
  export async function baselinePrune(cwd) {
96
92
  const baseline = loadBaseline(cwd);
97
93
  const violating = new Set(await collectViolatingFiles(cwd));
98
- const kept = Object.entries(baseline.files).filter(([rel]) => shouldKeepEntry(cwd, rel, violating));
99
- const files = Object.fromEntries(kept);
100
- const removed = Object.keys(baseline.files).length - kept.length;
94
+ const { files, pruned } = reapBaseline(cwd, baseline, violating);
101
95
  saveBaseline(cwd, { version: BASELINE_VERSION, files });
102
- return ok(`baseline prune: removed ${String(removed)} entry/entries\n`);
96
+ return ok(`baseline prune: removed ${String(pruned.length)} entry/entries\n`);
103
97
  }
104
98
  function classifyEntry(cwd, relPath, entry) {
105
99
  if (!existsSync(join(cwd, relPath)))
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/baseline/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/baseline/commands.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
+ import type { SnoozeIndex } from './snooze-index.js';
1
2
  import type { BaselineFile } from './store.js';
2
3
  export declare function toRepoRelative(cwd: string, absPath: string): string;
3
4
  interface SnoozePartition {
4
5
  active: string[];
5
6
  skipped: string[];
6
7
  }
7
- export declare function partitionBySnooze(files: string[], baseline: BaselineFile, cwd: string): SnoozePartition;
8
+ export declare function partitionBySnooze(files: string[], baseline: BaselineFile, index: SnoozeIndex): SnoozePartition;
8
9
  export {};
@@ -1,30 +1,17 @@
1
1
  import { relative, sep } from 'node:path';
2
- import { isWorkingTreeCleanFor, lastCommitHash } from './file-hash.js';
3
2
  export function toRepoRelative(cwd, absPath) {
4
3
  return relative(cwd, absPath).split(sep).join('/');
5
4
  }
6
- function isSnoozed(relPath, baseline, cwd) {
7
- const entry = baseline.files[relPath];
8
- if (entry === undefined)
9
- return false;
10
- const currentHash = lastCommitHash(cwd, relPath);
11
- if (currentHash === null)
12
- return false;
13
- if (currentHash !== entry.snoozedAtCommit)
14
- return false;
15
- return isWorkingTreeCleanFor(cwd, relPath);
16
- }
17
5
  function assignToPartition(partition, abs, snoozed) {
18
6
  if (snoozed)
19
7
  partition.skipped.push(abs);
20
8
  else
21
9
  partition.active.push(abs);
22
10
  }
23
- export function partitionBySnooze(files, baseline, cwd) {
11
+ export function partitionBySnooze(files, baseline, index) {
24
12
  const partition = { active: [], skipped: [] };
25
13
  for (const abs of files) {
26
- const rel = toRepoRelative(cwd, abs);
27
- assignToPartition(partition, abs, isSnoozed(rel, baseline, cwd));
14
+ assignToPartition(partition, abs, index.isSnoozed(abs, baseline));
28
15
  }
29
16
  return partition;
30
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/baseline/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGvE,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,OAAe;IACzD,OAAO,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,QAAsB,EAAE,GAAW;IACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,WAAW,KAAK,KAAK,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAOD,SAAS,iBAAiB,CACxB,SAA0B,EAC1B,GAAW,EACX,OAAgB;IAEhB,IAAI,OAAO;QAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;QACpC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAe,EACf,QAAsB,EACtB,GAAW;IAEX,MAAM,SAAS,GAAoB,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC/D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,iBAAiB,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/baseline/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAI1C,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,OAAe;IACzD,OAAO,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC;AAOD,SAAS,iBAAiB,CACxB,SAA0B,EAC1B,GAAW,EACX,OAAgB;IAEhB,IAAI,OAAO;QAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;QACpC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAe,EACf,QAAsB,EACtB,KAAkB;IAElB,MAAM,SAAS,GAAoB,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC/D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,iBAAiB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { BaselineEntry, BaselineFile } from './store.js';
2
+ export interface ReapResult {
3
+ files: Record<string, BaselineEntry>;
4
+ pruned: string[];
5
+ }
6
+ export declare function reapBaseline(cwd: string, baseline: BaselineFile, violating: Set<string>): ReapResult;
@@ -0,0 +1,22 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ function shouldKeep(cwd, relPath, violating) {
4
+ if (!existsSync(join(cwd, relPath)))
5
+ return false;
6
+ return violating.has(relPath);
7
+ }
8
+ // The one reaper shared by manual `baseline prune` and full-repo auto-prune:
9
+ // drop an entry whose file is gone, or present but no longer in the violating
10
+ // set (the smell was fixed). `violating` must come from a baseline-free scan.
11
+ export function reapBaseline(cwd, baseline, violating) {
12
+ const files = {};
13
+ const pruned = [];
14
+ for (const [rel, entry] of Object.entries(baseline.files)) {
15
+ if (shouldKeep(cwd, rel, violating))
16
+ files[rel] = entry;
17
+ else
18
+ pruned.push(rel);
19
+ }
20
+ return { files, pruned };
21
+ }
22
+ //# sourceMappingURL=reap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reap.js","sourceRoot":"","sources":["../../src/baseline/reap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,SAAS,UAAU,CAAC,GAAW,EAAE,OAAe,EAAE,SAAsB;IACtE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,QAAsB,EAAE,SAAsB;IACtF,MAAM,KAAK,GAAkC,EAAE,CAAC;IAChD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;;YACnD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { BaselineFile } from './store.js';
2
+ export interface SnoozeIndex {
3
+ isSnoozed(_absPath: string, _baseline: BaselineFile): boolean;
4
+ }
5
+ export declare function createSnoozeIndex(cwd: string): SnoozeIndex;
@@ -0,0 +1,65 @@
1
+ import { gitExec, GitError } from '../git/exec.js';
2
+ import { lastCommitHash } from './file-hash.js';
3
+ import { toRepoRelative } from './filter.js';
4
+ // `git status --porcelain -z` record: `XY <path>`, NUL-separated, no path
5
+ // quoting. A rename/copy record is followed by an extra field for the original
6
+ // path; both sides count as dirty. Only the X (index) column ever carries R/C in
7
+ // porcelain v1, so the follow-up-field check inspects record[0] alone. Returns
8
+ // the index of the last field consumed.
9
+ function parseDirtyRecord(records, i, dirty) {
10
+ const record = records[i];
11
+ if (record.length < 4)
12
+ return i;
13
+ dirty.add(record.slice(3));
14
+ if (!/[RC]/.test(record[0]))
15
+ return i;
16
+ if (records[i + 1])
17
+ dirty.add(records[i + 1]);
18
+ return i + 1;
19
+ }
20
+ function computeDirtySet(cwd) {
21
+ let records;
22
+ try {
23
+ records = gitExec(['status', '--porcelain', '-z'], cwd).split('\0');
24
+ }
25
+ catch (err) {
26
+ if (err instanceof GitError)
27
+ return null;
28
+ throw err;
29
+ }
30
+ const dirty = new Set();
31
+ for (let i = 0; i < records.length; i += 1)
32
+ i = parseDirtyRecord(records, i, dirty);
33
+ return dirty;
34
+ }
35
+ class GitSnoozeIndex {
36
+ cwd;
37
+ hashes = new Map();
38
+ dirty;
39
+ constructor(cwd) {
40
+ this.cwd = cwd;
41
+ }
42
+ hashFor(rel) {
43
+ if (!this.hashes.has(rel))
44
+ this.hashes.set(rel, lastCommitHash(this.cwd, rel));
45
+ return this.hashes.get(rel) ?? null;
46
+ }
47
+ isClean(rel) {
48
+ if (this.dirty === undefined)
49
+ this.dirty = computeDirtySet(this.cwd);
50
+ return this.dirty !== null && !this.dirty.has(rel);
51
+ }
52
+ isSnoozed(absPath, baseline) {
53
+ const rel = toRepoRelative(this.cwd, absPath);
54
+ const entry = baseline.files[rel];
55
+ if (entry === undefined)
56
+ return false;
57
+ if (this.hashFor(rel) !== entry.snoozedAtCommit)
58
+ return false;
59
+ return this.isClean(rel);
60
+ }
61
+ }
62
+ export function createSnoozeIndex(cwd) {
63
+ return new GitSnoozeIndex(cwd);
64
+ }
65
+ //# sourceMappingURL=snooze-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snooze-index.js","sourceRoot":"","sources":["../../src/baseline/snooze-index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Project, SyntaxKind } from 'ts-morph';
2
+ import { COMMENT_SMELL } from '../config/tool-smells.js';
2
3
  export const DEFAULT_COMMENT_CHECK_THRESHOLDS = {
3
4
  maxSingleLineChars: 10,
4
5
  maxBlockChars: 15,
@@ -26,7 +27,8 @@ function truncate(text) {
26
27
  }
27
28
  function makeViolation(file, comment, kind) {
28
29
  return {
29
- ruleId: 'comment:non-essential',
30
+ ruleId: COMMENT_SMELL,
31
+ source: 'comment:non-essential',
30
32
  file,
31
33
  line: comment.getStartLineNumber(),
32
34
  message: `${kind}-line comment: "${truncate(comment.getText())}"`,
@@ -67,7 +69,7 @@ function buildProject(files) {
67
69
  return project;
68
70
  }
69
71
  function resolveThresholds(rules) {
70
- const rule = rules.find((r) => r.id === 'comment:non-essential');
72
+ const rule = rules.find((r) => r.id === COMMENT_SMELL);
71
73
  return rule?.commentCheck ?? DEFAULT_COMMENT_CHECK_THRESHOLDS;
72
74
  }
73
75
  export const commentCheck = {
@@ -1 +1 @@
1
- {"version":3,"file":"comment-check.js","sourceRoot":"","sources":["../../src/checks/comment-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"comment-check.js","sourceRoot":"","sources":["../../src/checks/comment-check.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,9 @@ import { dirname, join } from 'node:path';
3
3
  import { runTool } from '../wrap/shell.js';
4
4
  import { detectTool } from '../detect/tool.js';
5
5
  import { lookupPrompt } from '../prompts/registry.js';
6
- import { emptyOutcome, firstLine, isSpawnFailure, noticesFor, spawnFailureWarning, } from '../wrap/notices.js';
6
+ import { emptyOutcome, firstLine, isSpawnFailure, noticesFor, spawnFailureOutcome, spawnFailureWarning, } from '../wrap/notices.js';
7
7
  import { spawnTarget } from '../wrap/resolve.js';
8
+ import { ESLINT_SMELL_MAP, PARSE_ERROR_SMELL } from '../config/tool-smells.js';
8
9
  import { parseJsonStdout } from '../wrap/run.js';
9
10
  const require = createRequire(import.meta.url);
10
11
  function bundledEslintBin() {
@@ -32,14 +33,16 @@ function isConfigError(result, parsed) {
32
33
  return result.exitCode !== 0 && result.exitCode !== 1;
33
34
  }
34
35
  function messageToViolation(filePath, m) {
35
- const ruleId = `eslint:${m.ruleId}`;
36
- const prompt = lookupPrompt(ruleId);
37
- const title = prompt?.title ?? m.ruleId;
38
- return { ruleId, file: filePath, line: m.line, column: m.column, message: `${title}: ${m.message}` };
36
+ const smell = ESLINT_SMELL_MAP[m.ruleId] ?? m.ruleId;
37
+ const title = lookupPrompt(smell)?.title ?? m.ruleId;
38
+ const message = `${title}: ${m.message}`;
39
+ const source = `eslint:${m.ruleId}`;
40
+ return { ruleId: smell, source, file: filePath, line: m.line, column: m.column, message };
39
41
  }
40
42
  function fatalToViolation(filePath, m) {
41
43
  return {
42
- ruleId: 'eslint:fatal',
44
+ ruleId: PARSE_ERROR_SMELL,
45
+ source: 'eslint:fatal',
43
46
  file: filePath,
44
47
  line: m.line,
45
48
  column: m.column,
@@ -87,7 +90,7 @@ async function runEslint(resolution, cwd, files) {
87
90
  const result = await executeEslint(resolution, cwd, files);
88
91
  const parsed = tryParseJson(result.stdout);
89
92
  if (isSpawnFailure(result))
90
- return emptyOutcome([...notices, spawnFailureWarning('eslint', cwd, result.warnings)]);
93
+ return spawnFailureOutcome(notices, spawnFailureWarning('eslint', cwd, result.warnings));
91
94
  if (isConfigError(result, parsed))
92
95
  return emptyOutcome([...notices, ...failureNotices(cwd, result)]);
93
96
  return { violations: parseEslintJson(result.stdout), stderr: notices };
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-wrap.js","sourceRoot":"","sources":["../../src/checks/eslint-wrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eslint-wrap.js","sourceRoot":"","sources":["../../src/checks/eslint-wrap.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,8 @@ import { type BinResolution } from '../wrap/notices.js';
2
2
  import type { Check, CheckOutcome } from '../types.js';
3
3
  export declare function tryBundledJscpdBin(resolver?: () => string): string | null;
4
4
  export declare function resolveJscpdBin(cwd: string, fallbackResolver?: () => string): BinResolution | null;
5
- export declare function runJscpdWrap(files: string[], cwd: string, resolution: BinResolution | null): Promise<CheckOutcome>;
5
+ export declare function runJscpdWrap(files: string[], cwd: string, { resolution, tmpRoot }: {
6
+ resolution: BinResolution | null;
7
+ tmpRoot?: string;
8
+ }): Promise<CheckOutcome>;
6
9
  export declare const jscpdWrap: Check;
@@ -5,9 +5,9 @@ import { dirname, join } from 'node:path';
5
5
  import { detectTool } from '../detect/tool.js';
6
6
  import { hasPackageJsonKey } from '../detect/package-json.js';
7
7
  import { absolutize, emptyOutcome, firstLine, noticesFor } from '../wrap/notices.js';
8
- import { isSpawnSkip, spawnWrapped } from '../wrap/run.js';
8
+ import { isSpawnSkip, skipOutcome, spawnWrapped } from '../wrap/run.js';
9
+ import { JSCPD_SMELL } from '../config/tool-smells.js';
9
10
  const require = createRequire(import.meta.url);
10
- const RULE_ID = 'jscpd:duplication';
11
11
  const REPORT_FILENAME = 'jscpd-report.json';
12
12
  const JSCPD_CONFIG_FILES = ['.jscpd.json', 'jscpd.json'];
13
13
  function findPackageRoot(start) {
@@ -59,7 +59,8 @@ function locationDescription(loc, cwd) {
59
59
  }
60
60
  function buildViolation(self, partner, cwd) {
61
61
  return {
62
- ruleId: RULE_ID,
62
+ ruleId: JSCPD_SMELL,
63
+ source: 'jscpd:duplication',
63
64
  file: absolutize(cwd, self.name),
64
65
  line: self.startLoc.line,
65
66
  column: self.startLoc.column,
@@ -96,8 +97,8 @@ function tryReadReport(reportDir) {
96
97
  function buildArgs(reportDir) {
97
98
  return ['-r', 'json', '-o', reportDir, '--silent', '--noTips', '-n', '.'];
98
99
  }
99
- function makeReportDir() {
100
- return mkdtempSync(join(tmpdir(), 'hh-jscpd-'));
100
+ function makeReportDir(tmpRoot = tmpdir()) {
101
+ return mkdtempSync(join(tmpRoot, 'hh-jscpd-'));
101
102
  }
102
103
  function removeReportDir(reportDir) {
103
104
  rmSync(reportDir, { recursive: true, force: true });
@@ -112,14 +113,14 @@ async function runOnce(inputs, reportDir) {
112
113
  const { resolution, cwd } = inputs;
113
114
  const result = await spawnWrapped({ tool: 'jscpd', resolution, cwd, args: buildArgs(reportDir) });
114
115
  if (isSpawnSkip(result))
115
- return emptyOutcome([...inputs.notices, result.skipWarning]);
116
+ return skipOutcome(result, inputs.notices);
116
117
  const report = tryReadReport(reportDir);
117
118
  if (report === null)
118
119
  return missingReportOutcome(inputs, result);
119
120
  return { violations: reportToViolations(report, inputs.scope, inputs.cwd), stderr: inputs.notices };
120
121
  }
121
- async function runJscpd(inputs) {
122
- const reportDir = makeReportDir();
122
+ async function runJscpd(inputs, tmpRoot) {
123
+ const reportDir = makeReportDir(tmpRoot);
123
124
  try {
124
125
  return await runOnce(inputs, reportDir);
125
126
  }
@@ -138,7 +139,7 @@ function noConfigOutcome(cwd, notices) {
138
139
  function noBinOutcome(cwd) {
139
140
  return emptyOutcome([unresolvedBinWarning(cwd)]);
140
141
  }
141
- export async function runJscpdWrap(files, cwd, resolution) {
142
+ export async function runJscpdWrap(files, cwd, { resolution, tmpRoot }) {
142
143
  if (files.length === 0)
143
144
  return { violations: [], stderr: [] };
144
145
  if (resolution === null)
@@ -146,13 +147,13 @@ export async function runJscpdWrap(files, cwd, resolution) {
146
147
  const notices = noticesFor('jscpd', resolution, cwd);
147
148
  if (!hasJscpdConfig(cwd))
148
149
  return noConfigOutcome(cwd, notices);
149
- return runJscpd({ resolution, cwd, scope: new Set(files), notices });
150
+ return runJscpd({ resolution, cwd, scope: new Set(files), notices }, tmpRoot);
150
151
  }
151
152
  export const jscpdWrap = {
152
153
  id: 'jscpd',
153
154
  async run(files, _rules, cwd) {
154
155
  const runCwd = cwd ?? process.cwd();
155
- return runJscpdWrap(files, runCwd, resolveJscpdBin(runCwd));
156
+ return runJscpdWrap(files, runCwd, { resolution: resolveJscpdBin(runCwd) });
156
157
  },
157
158
  };
158
159
  //# sourceMappingURL=jscpd-wrap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jscpd-wrap.js","sourceRoot":"","sources":["../../src/checks/jscpd-wrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jscpd-wrap.js","sourceRoot":"","sources":["../../src/checks/jscpd-wrap.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@ import { existsSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { hasPackageJsonKey } from '../detect/package-json.js';
4
4
  import { absolutize, emptyOutcome, firstLine, noticesFor } from '../wrap/notices.js';
5
- import { isSpawnSkip, parseJsonStdout, spawnWrapped } from '../wrap/run.js';
5
+ import { isSpawnSkip, parseJsonStdout, skipOutcome, spawnWrapped } from '../wrap/run.js';
6
+ import { KNIP_SMELL_MAP } from '../config/tool-smells.js';
6
7
  import { buildKnipArgs, consumerKnipMajor, resolveKnipBin } from './knip-resolve.js';
7
8
  import { KNOWN_KEYS, LOCATION_KEYS, MEMBER_KEYS, } from './knip-schema.js';
8
9
  export { buildKnipArgs, consumerKnipMajor, resolveKnipBin };
@@ -12,17 +13,23 @@ function exitFailureWarning(cwd, code, stderr) {
12
13
  const suffix = detail.length > 0 ? `: ${detail}` : '';
13
14
  return `habit-hooks: knip skipped in ${cwd} (exit ${code})${suffix}`;
14
15
  }
16
+ function knipSmell(issueType) {
17
+ return KNIP_SMELL_MAP[issueType] ?? issueType;
18
+ }
15
19
  function buildViolation(args) {
16
- const { ruleId, file, message, loc } = args;
17
- return { ruleId, file, line: loc.line ?? 1, column: loc.col, message };
20
+ const { ruleId, source, file, message, loc } = args;
21
+ return { ruleId, source, file, line: loc.line ?? 1, column: loc.col, message };
18
22
  }
19
23
  function locationToViolation(ctx, loc) {
20
- const ruleId = `knip:${ctx.issueType}`;
21
- return buildViolation({ ruleId, file: absolutize(ctx.cwd, ctx.issueFile), message: loc.name, loc });
24
+ const ruleId = knipSmell(ctx.issueType);
25
+ const source = `knip:${ctx.issueType}`;
26
+ return buildViolation({ ruleId, source, file: absolutize(ctx.cwd, ctx.issueFile), message: loc.name, loc });
22
27
  }
23
28
  function memberToViolation(ctx, owner, loc) {
24
- const ruleId = `knip:${ctx.issueType}`;
25
- return buildViolation({ ruleId, file: absolutize(ctx.cwd, ctx.issueFile), message: `${owner}.${loc.name}`, loc });
29
+ const ruleId = knipSmell(ctx.issueType);
30
+ const source = `knip:${ctx.issueType}`;
31
+ const file = absolutize(ctx.cwd, ctx.issueFile);
32
+ return buildViolation({ ruleId, source, file, message: `${owner}.${loc.name}`, loc });
26
33
  }
27
34
  function flattenMemberMap(ctx, members) {
28
35
  return Object.entries(members).flatMap(([owner, list]) => list.map((loc) => memberToViolation(ctx, owner, loc)));
@@ -59,10 +66,11 @@ function isPopulated(value) {
59
66
  return true;
60
67
  }
61
68
  function unknownKeyToViolation(cwd, issue, key) {
62
- const ruleId = `knip:${key}`;
69
+ const ruleId = knipSmell(key);
70
+ const source = `knip:${key}`;
63
71
  const file = absolutize(cwd, issue.file);
64
72
  const message = 'unrecognised knip issue type';
65
- return { ruleId, file, line: 1, message };
73
+ return { ruleId, source, file, line: 1, message };
66
74
  }
67
75
  function unknownKeysForIssue(issue, cwd) {
68
76
  const record = issue;
@@ -78,8 +86,8 @@ function issueToViolations(issue, cwd) {
78
86
  return [...fromLocations, ...fromMembers, ...fromUnknown];
79
87
  }
80
88
  function fileEntryToViolation(cwd, file) {
81
- const ruleId = 'knip:files';
82
- return { ruleId, file: absolutize(cwd, file), line: 1, message: file };
89
+ const source = 'knip:files';
90
+ return { ruleId: knipSmell('files'), source, file: absolutize(cwd, file), line: 1, message: file };
83
91
  }
84
92
  function reportToViolations(report, cwd) {
85
93
  const filesViolations = (report.files ?? []).map((f) => fileEntryToViolation(cwd, f));
@@ -97,7 +105,7 @@ function hasKnipConfig(cwd) {
97
105
  async function runKnip(resolution, cwd, notices) {
98
106
  const result = await spawnWrapped({ tool: 'knip', resolution, cwd, args: buildKnipArgs(resolution, cwd) });
99
107
  if (isSpawnSkip(result))
100
- return emptyOutcome([...notices, result.skipWarning]);
108
+ return skipOutcome(result, notices);
101
109
  const report = parseJsonStdout(result.stdout, '{');
102
110
  if (report === null)
103
111
  return emptyOutcome([...notices, exitFailureWarning(cwd, result.exitCode, result.stderr)]);