chore: replace Biome with oxlint, oxfmt and Knip - #19
Open
Thomasims wants to merge 4 commits into
Open
Conversation
Adopts the shared @antelopejs/tooling-configs presets: oxlint with the vendored anti-slop rules, oxfmt for formatting and Knip for dead code. Type-aware linting needs a tsconfig tsgolint accepts, so the removed moduleResolution node10 and baseUrl options go away and the self-referential path mapping the tests use becomes relative. The module stays on commonjs so the emit keeps using require, which is what the AntelopeJS resolver hooks. Knip needs the suites declared as entry points: they live under src/tests and are run from the compiled output by `ajs module test`, which the preset's src/test glob does not match. No export changes: this package is a contract, so its surface is reachable only from consumers Knip cannot see.
Thomasims
marked this pull request as draft
September 7, 2026 10:37
Thomasims
marked this pull request as ready for review
September 7, 2026 16:10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces Biome with the shared
@antelopejs/tooling-configspresets: oxlint(type-aware, with the vendored anti-slop rules), oxfmt for formatting and Knip
for dead-code detection.
oxlintis pinned to 1.81.0 because the JS plugin APIis still alpha and has to match the version tooling-configs builds against.
tsconfig
Type-aware linting runs through tsgolint, which rejects options TypeScript 7
removed, so
moduleResolution: "node"andbaseUrlare gone and theself-referential
@antelopejs/interface-apipath mapping the test suite uses isnow written relative (
./src/index.ts), which is what the compiler wants oncebaseUrlis absent.modulestayscommonjson purpose. Raising it tonode16would look like thetidier fix and is a runtime break: tsc stops downlevelling dynamic imports and
emits native ESM ones, which bypass the CommonJS resolver detour the
ajsruntime installs. The emit was checked to still go through
require.pnpm buildsucceeds with no source change.Code changes the linter forced
Only import ordering, all applied by
oxlint --fix(
perfectionist(sort-imports)) insrc/index.tsand the two test suites.Nothing was disabled, and no public export was touched: this package is a
versioned contract, so its surface is deliberately unchanged.
The remaining oxlint output is warnings only (
max-lines,max-params,unbound-method,anti-slop(no-chained-type-assertions)), which are adeliberate backlog and are left as they are.
pnpm lintexits 0.Knip
The suites live in
src/tests/andsrc/antelope.test.tsis read byajs module testfrompackage.json#antelopeJs.test; the preset only knows thesrc/test/spelling, so both are declared as entry points. Without that, Knipreads the whole suite as dead code and then
sinon,wsand their types asunused.
ajsitself is ignored as a binary because CI installs@antelopejs/coreglobally instead of adding the CLI to every package.Nothing was deleted. Knip reports no unused files, exports or dependencies.
Verification
pnpm build,pnpm lint,pnpm knip,pnpm format:checkall exit 0.pnpm test: 83 passing, identical to the baseline measured on an untouchedmainworktree.The oxfmt pass is a separate commit and is recorded in
.git-blame-ignore-revsso
git blamestays readable. It also normalizes Markdown, YAML and thepackage.jsonkey order, which accounts for most of the diff.