@juicerq/check
v0.4.0
Published
Lint rules, shared config, and check runner for juicerq's code standard
Readme
@juicerq/check
One command that runs the whole gate: lint, types, and dead code.
juicerq-check runs three tools in order and prints a single summary. It exits non-zero if any of them fails.
| Step | Tool | What it does |
| --- | --- | --- |
| oxlint | oxlint | Lints with the shared config, type-aware, and applies --fix |
| typecheck | your project's script | Runs bun run typecheck — the project's own TypeScript |
| knip | knip | Finds unused files, exports, and dependencies |
When --fix rewrites files, the summary names them, so a fix never lands unnoticed.
Install
bun add -d @juicerq/checkSetup
Three pieces.
1. Extend the shared lint config. Create .oxlintrc.json in the project root:
{
"extends": ["./node_modules/@juicerq/check/.oxlintrc.json"]
}Add project rules next to extends — they win over the shared ones.
2. Add the scripts. In package.json:
{
"scripts": {
"check": "juicerq-check",
"typecheck": "tsc --noEmit"
}
}3. Run it.
bun run checkRequirements
juicerq-check stops with a message when one of these is missing:
- A
typecheckscript. It does not bring its own TypeScript setup, it calls yours. typescriptinstalled in the project. Type-aware linting cannot be skipped.- A readable
package.jsonin the directory you run from.
Knip reads the project's own knip.json when there is one, and its defaults otherwise.
Rules
Beyond the oxlint correctness set, the shared config caps cyclomatic complexity at 15 (eslint/complexity). The count charges ?. and ?? a branch each, which typescript/prefer-optional-chain (also on in this config) pushes code toward, so the ceiling stays above what ordinary branching reaches.
Read a hit as a pointer to open the file, not as a number to bring down. The count cannot tell a good extraction from a bad one, and a rewrite that scores lower is not automatically the better one.
It also turns on three rules from this package:
juicerq/no-conditional-let— an emptyletfilled by a followingif,switch, or ternary. Docsjuicerq/no-ternary-return— areturnwhose whole argument is a ternary. Docsjuicerq/no-trivial-call-wrapper— a function whose body is one call forwarding its own parameters. Docs
Exports
@juicerq/check/oxlintrc— the shared config, if you would rather import it than reference the path.@juicerq/check/plugin— the oxlint plugin holding the three rules.
License
MIT
