chore: replace Biome with oxlint, oxfmt and Knip - #6
Open
Thomasims wants to merge 6 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 option goes away. The module stays on commonjs so the emit keeps using require, which is what the AntelopeJS resolver hooks; the compiled output is byte-identical to the previous one. Nothing in the source needed changing: oxlint reports no findings at all and Knip none either. This package is a contract, so its surface is reachable only from consumers Knip cannot see.
Biome is gone, so the directives suppress nothing. The explanations they carried are kept as plain comments.
Biome is gone, so they suppressed nothing. AGENTS.md mandates self-documenting code without non-TSDoc comments, so the directives are dropped rather than demoted to plain comments.
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.
Moves this repository off Biome and onto the shared
@antelopejs/tooling-configspresets, in step with the rest of the ecosystem.
Tooling swap
@biomejs/biomeandbiome.jsonare gone.oxlint(pinned to1.81.0, the version the presets' JS plugin API matches),oxfmt,knip,oxlint-tsgolintandeslint-plugin-perfectionistcome in asdev dependencies.
oxlint.config.ts,oxfmt.config.tsandknip.config.ts, each extendingthe shared preset.
lint→oxlint,lint:fix→oxlint --fix,format→oxfmt .,plus new
format:checkandknip. Every other script is untouched. Afollow-up
ci:commit gatespnpm format:checkandpnpm knipin.github/workflows/ci.ymlalongside the existingpnpm lintstep; there isno
testscript in this repository, so no test step was added.The
.github/ISSUE_TEMPLATE/**ignore inoxfmt.config.tsis temporary: thosefiles are Markdown templates with a
.ymlextension, which oxfmt cannot parse.It goes away once
tooling-configs#5 ships
the shared ignore.
tsconfig
Type-aware linting runs through tsgolint, which rejects compiler options
TypeScript 7 removed and auto-discovers each file's
tsconfig.json. The onlyoffender here was
"moduleResolution": "node"(the removednode10), so thefield is dropped; tsgolint only objects to the explicit value, and the default
for
module: "commonjs"is the same resolver, so the emit is unaffected."module": "commonjs"deliberately stays. Raising it tonode16looks like theobvious fix and is a runtime break: tsc would stop downlevelling dynamic imports
and emit native ESM ones, bypassing the CommonJS resolver detour the
ajsruntime installs.
What the linter forced
Nothing. This repository is a single
src/index.ts, and oxlint reports noerrors and no warnings on it — not even an import-order fix. Nothing was
disabled and no rule was silenced.
The one source edit is unrelated to the linter and lives in its own
chore:commit: the
// biome-ignore lint/style/useConstdirective aboveexport let connectedis removed. Biome is gone, so it suppressed nothing, andoxlint does not flag the line. AGENTS.md mandates self-documenting code without
non-TSDoc comments, so the directive is dropped outright rather than demoted to a
plain comment.
Knip
No findings, so
knip.config.tsis the bare preset with no ignores at all — themongodbruntime dependency is genuinely imported bysrc/index.tsand Knipresolves it. No exports were removed. This package is a versioned contract: its
surface is reachable only from consumers Knip cannot see, so an "unused export"
here would never be evidence of dead code.
Verification
distwas built from untouchedorigin/mainand from this branch. The package publishes one code subpath (
., plus./package.json), and its runtime export keys —GetClientandinternal—are identical. The
disttree differs from the baseline by exactly one line —the dead directive removed above, which
mainstill carries and tsc copies intodist/index.jsand its source map. Nothing else changes.testscript, onorigin/mainor on this branch, so there is no baseline to compare — thecontract is exercised by the modules that implement it.
pnpm lint,pnpm knipandpnpm buildall exit 0.Commits
The oxfmt pass is its own commit and is recorded in
.git-blame-ignore-revs, sogit blamestays readable. It only touched Markdown andpackage.json; noTypeScript source was reformatted. oxfmt also normalizes
package.jsonkeyorder and sorts
keywords; that is expected.