Skip to content

chore: replace Biome with oxlint, oxfmt and Knip - #6

Open
Thomasims wants to merge 6 commits into
mainfrom
chore/oxc-tooling
Open

chore: replace Biome with oxlint, oxfmt and Knip#6
Thomasims wants to merge 6 commits into
mainfrom
chore/oxc-tooling

Conversation

@Thomasims

@Thomasims Thomasims commented Sep 7, 2026

Copy link
Copy Markdown

Moves this repository off Biome and onto the shared
@antelopejs/tooling-configs
presets, in step with the rest of the ecosystem.

Tooling swap

  • @biomejs/biome and biome.json are gone.
  • oxlint (pinned to 1.81.0, the version the presets' JS plugin API matches),
    oxfmt, knip, oxlint-tsgolint and eslint-plugin-perfectionist come in as
    dev dependencies.
  • New oxlint.config.ts, oxfmt.config.ts and knip.config.ts, each extending
    the shared preset.
  • Scripts: lintoxlint, lint:fixoxlint --fix, formatoxfmt .,
    plus new format:check and knip. Every other script is untouched. A
    follow-up ci: commit gates pnpm format:check and pnpm knip in
    .github/workflows/ci.yml alongside the existing pnpm lint step; there is
    no test script in this repository, so no test step was added.

The .github/ISSUE_TEMPLATE/** ignore in oxfmt.config.ts is temporary: those
files are Markdown templates with a .yml extension, 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 only
offender here was "moduleResolution": "node" (the removed node10), so the
field 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 to node16 looks like the
obvious fix and is a runtime break: tsc would stop downlevelling dynamic imports
and emit native ESM ones, bypassing the CommonJS resolver detour the ajs
runtime installs.

What the linter forced

Nothing. This repository is a single src/index.ts, and oxlint reports no
errors 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/useConst directive above
export let connected is removed. Biome is gone, so it suppressed nothing, and
oxlint 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.ts is the bare preset with no ignores at all — the
mongodb runtime dependency is genuinely imported by src/index.ts and Knip
resolves 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

  • Public surface unchanged. dist was built from untouched origin/main
    and from this branch. The package publishes one code subpath (., plus
    ./package.json), and its runtime export keys — GetClient and internal
    are identical. The dist tree differs from the baseline by exactly one line —
    the dead directive removed above, which main still carries and tsc copies into
    dist/index.js and its source map. Nothing else changes.
  • Tests. This repository has no test suite and no test script, on
    origin/main or on this branch, so there is no baseline to compare — the
    contract is exercised by the modules that implement it.
  • pnpm lint, pnpm knip and pnpm build all exit 0.

Commits

The oxfmt pass is its own commit and is recorded in .git-blame-ignore-revs, so
git blame stays readable. It only touched Markdown and package.json; no
TypeScript source was reformatted. oxfmt also normalizes package.json key
order and sorts keywords; that is expected.

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
Thomasims marked this pull request as ready for review September 7, 2026 16:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant