✨ 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.
|
||||
- **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.
|
||||
- **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`.
|
||||
- **@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.
|
||||
|
||||
+2
-1
@@ -18,7 +18,8 @@
|
||||
"msvc",
|
||||
"publint",
|
||||
"attw",
|
||||
"arethetypeswrong"
|
||||
"arethetypeswrong",
|
||||
"knip"
|
||||
],
|
||||
"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": {
|
||||
"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: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:oxfmt": "oxfmt --check ${LEFTHOOK_FILES:-.}",
|
||||
"check:oxlint": "oxlint ${LEFTHOOK_FILES:-src}",
|
||||
@@ -60,12 +61,11 @@
|
||||
"check-outdated": "^3.0.0",
|
||||
"cspell": "^10.2.1",
|
||||
"expect-type": "1.4.0",
|
||||
"knip": "^6.34.0",
|
||||
"lefthook": "^2.1.12",
|
||||
"oxfmt": "^0.66.0",
|
||||
"oxlint": "^1.81.0",
|
||||
"publint": "^0.3.24",
|
||||
"tslib": "^2.8.1",
|
||||
"type-fest": "^5.9.0",
|
||||
"typescript": "^7.0.2"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
|
||||
+9
-1
@@ -217,7 +217,7 @@ script does not belong in the standard pipeline.
|
||||
### CHECK
|
||||
|
||||
- `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/`
|
||||
by default; when invoked from the lefthook pre-commit hook with
|
||||
`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
|
||||
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: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
|
||||
|
||||
|
||||
Reference in new issue
Block a user