✨ Add knip for unused dependency and dead code detection
- Add check:knip using --include dependencies,exports,files (skips the noisy 'types' category, which produces false positives for libraries whose exported types are part of the public API) - Remove tslib and type-fest (both caught as unused by knip) - Add 'knip' to cspell word list - No knip config file: the --include flag keeps the scope targeted without boilerplate, matching the 'keep it simple' principle - Document in project-specs.md (CHECK section) and README.md
This commit is contained in:
1 parent
3fa72820df
commit
ec98223f8d
5 files changed
+947
-37
No files matched your search
@@ -17,6 +17,7 @@ Pattern matching for TypeScript/ESM environments (F#-style, not regex).
|
|||||||
- **oxlint** — Rust-based linter.
|
- **oxlint** — Rust-based linter.
|
||||||
- **oxfmt** — Rust-based formatter (Prettier-compatible). Formats JS/TS, JSON/JSONC, YAML, Markdown, MDX, and more; built-in `package.json` key sorting replaces `sort-package-json`.
|
- **oxfmt** — Rust-based formatter (Prettier-compatible). Formats JS/TS, JSON/JSONC, YAML, Markdown, MDX, and more; built-in `package.json` key sorting replaces `sort-package-json`.
|
||||||
- **cspell** — spell checking.
|
- **cspell** — spell checking.
|
||||||
|
- **knip** — finds unused dependencies, exports, and files. Scoped via `--include dependencies,exports,files` to skip the noisy `types` category (which produces false positives for libraries whose exported types are part of the public API).
|
||||||
- **publint** — validates `package.json` for ESM publishing correctness. Runs on publish only (in CI), not as part of `npm run check`.
|
- **publint** — validates `package.json` for ESM publishing correctness. Runs on publish only (in CI), not as part of `npm run check`.
|
||||||
- **@arethetypeswrong/cli** (`attw`) — validates `.d.ts` declarations against multiple module-resolution scenarios. Runs on publish only with `--profile esm-only` (the package is intentionally ESM-only).
|
- **@arethetypeswrong/cli** (`attw`) — validates `.d.ts` declarations against multiple module-resolution scenarios. Runs on publish only with `--profile esm-only` (the package is intentionally ESM-only).
|
||||||
- **lefthook** — git pre-commit hooks.
|
- **lefthook** — git pre-commit hooks.
|
||||||
|
|||||||
+2
-1
@@ -18,7 +18,8 @@
|
|||||||
"msvc",
|
"msvc",
|
||||||
"publint",
|
"publint",
|
||||||
"attw",
|
"attw",
|
||||||
"arethetypeswrong"
|
"arethetypeswrong",
|
||||||
|
"knip"
|
||||||
],
|
],
|
||||||
"ignorePaths": ["dist", "node_modules", "coverage", "*.svg", ".gitignore"]
|
"ignorePaths": ["dist", "node_modules", "coverage", "*.svg", ".gitignore"]
|
||||||
}
|
}
|
||||||
Generated
+932
-32
File diff suppressed because it is too large.
Load diff
+3
-3
@@ -35,8 +35,9 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc -p tsconfig.build.json",
|
"build": "tsc -p tsconfig.build.json",
|
||||||
"check": "npm run check:tsc && npm run check:oxlint && npm run check:oxfmt && npm run check:cspell && npm run check:outdated",
|
"check": "npm run check:tsc && npm run check:oxlint && npm run check:oxfmt && npm run check:cspell && npm run check:knip && npm run check:outdated",
|
||||||
"check:cspell": "cspell lint ${LEFTHOOK_FILES:-.}",
|
"check:cspell": "cspell lint ${LEFTHOOK_FILES:-.}",
|
||||||
|
"check:knip": "knip --include dependencies,exports,files",
|
||||||
"check:outdated": "check-outdated --ignore-pre-releases --ignore-packages @oxfmt/binding-darwin-arm64,@oxfmt/binding-darwin-x64,@oxfmt/binding-linux-arm64-gnu,@oxfmt/binding-linux-arm64-musl,@oxfmt/binding-linux-x64-gnu,@oxfmt/binding-linux-x64-musl,@oxfmt/binding-win32-x64-msvc,@oxlint/binding-darwin-arm64,@oxlint/binding-darwin-x64,@oxlint/binding-linux-arm64-gnu,@oxlint/binding-linux-arm64-musl,@oxlint/binding-linux-x64-gnu,@oxlint/binding-linux-x64-musl,@oxlint/binding-win32-x64-msvc",
|
"check:outdated": "check-outdated --ignore-pre-releases --ignore-packages @oxfmt/binding-darwin-arm64,@oxfmt/binding-darwin-x64,@oxfmt/binding-linux-arm64-gnu,@oxfmt/binding-linux-arm64-musl,@oxfmt/binding-linux-x64-gnu,@oxfmt/binding-linux-x64-musl,@oxfmt/binding-win32-x64-msvc,@oxlint/binding-darwin-arm64,@oxlint/binding-darwin-x64,@oxlint/binding-linux-arm64-gnu,@oxlint/binding-linux-arm64-musl,@oxlint/binding-linux-x64-gnu,@oxlint/binding-linux-x64-musl,@oxlint/binding-win32-x64-msvc",
|
||||||
"check:oxfmt": "oxfmt --check ${LEFTHOOK_FILES:-.}",
|
"check:oxfmt": "oxfmt --check ${LEFTHOOK_FILES:-.}",
|
||||||
"check:oxlint": "oxlint ${LEFTHOOK_FILES:-src}",
|
"check:oxlint": "oxlint ${LEFTHOOK_FILES:-src}",
|
||||||
@@ -60,12 +61,11 @@
|
|||||||
"check-outdated": "^3.0.0",
|
"check-outdated": "^3.0.0",
|
||||||
"cspell": "^10.2.1",
|
"cspell": "^10.2.1",
|
||||||
"expect-type": "1.4.0",
|
"expect-type": "1.4.0",
|
||||||
|
"knip": "^6.34.0",
|
||||||
"lefthook": "^2.1.12",
|
"lefthook": "^2.1.12",
|
||||||
"oxfmt": "^0.66.0",
|
"oxfmt": "^0.66.0",
|
||||||
"oxlint": "^1.81.0",
|
"oxlint": "^1.81.0",
|
||||||
"publint": "^0.3.24",
|
"publint": "^0.3.24",
|
||||||
"tslib": "^2.8.1",
|
|
||||||
"type-fest": "^5.9.0",
|
|
||||||
"typescript": "^7.0.2"
|
"typescript": "^7.0.2"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
|
|||||||
+9
-1
@@ -217,7 +217,7 @@ script does not belong in the standard pipeline.
|
|||||||
### CHECK
|
### CHECK
|
||||||
|
|
||||||
- `check`: Run all checks in order — `check:oxlint`, `check:oxfmt`,
|
- `check`: Run all checks in order — `check:oxlint`, `check:oxfmt`,
|
||||||
`check:tsc`, `check:cspell`, `check:outdated`.
|
`check:tsc`, `check:cspell`, `check:knip`, `check:outdated`.
|
||||||
- `check:oxlint`: `oxlint ${LEFTHOOK_FILES:-src}` — lints `src/`
|
- `check:oxlint`: `oxlint ${LEFTHOOK_FILES:-src}` — lints `src/`
|
||||||
by default; when invoked from the lefthook pre-commit hook with
|
by default; when invoked from the lefthook pre-commit hook with
|
||||||
`LEFTHOOK_FILES` set to the staged-files list, lints only those
|
`LEFTHOOK_FILES` set to the staged-files list, lints only those
|
||||||
@@ -239,6 +239,14 @@ script does not belong in the standard pipeline.
|
|||||||
- `check:cspell`: `cspell lint ${LEFTHOOK_FILES:-.}` — walks the
|
- `check:cspell`: `cspell lint ${LEFTHOOK_FILES:-.}` — walks the
|
||||||
project root by default; from lefthook, only the staged files.
|
project root by default; from lefthook, only the staged files.
|
||||||
- `check:outdated`: `check-outdated --ignore-pre-releases --ignore-packages @oxfmt/binding-*,@oxlint/binding-*`. The oxc native bindings are declared as `optionalDependencies` so the correct one is selected per platform automatically; the `*`-platform bindings show as "not installed" on the current platform and are explicitly ignored here.
|
- `check:outdated`: `check-outdated --ignore-pre-releases --ignore-packages @oxfmt/binding-*,@oxlint/binding-*`. The oxc native bindings are declared as `optionalDependencies` so the correct one is selected per platform automatically; the `*`-platform bindings show as "not installed" on the current platform and are explicitly ignored here.
|
||||||
|
- `check:knip`: `knip --include dependencies,exports,files` — finds
|
||||||
|
unused dependencies, value exports, and source files. The
|
||||||
|
scoped `--include` list intentionally omits the `types`
|
||||||
|
category, which produces systematic false positives for
|
||||||
|
libraries whose exported types (e.g. `Matcher`, `Pattern`) are
|
||||||
|
part of the public API and not consumed internally. The
|
||||||
|
targeted scope keeps the signal high (real unused-dep
|
||||||
|
detection) without config-file boilerplate.
|
||||||
|
|
||||||
### FIX
|
### FIX
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user