Skip to content

Finish the Biome migration: working lint scripts, CI format check, drop dead ESLint deps#2923

Merged
schani merged 7 commits into
masterfrom
biome-cleanup
Jul 13, 2026
Merged

Finish the Biome migration: working lint scripts, CI format check, drop dead ESLint deps#2923
schani merged 7 commits into
masterfrom
biome-cleanup

Conversation

@schani

@schani schani commented Jul 13, 2026

Copy link
Copy Markdown
Member

What

Since the Biome migration in v23.2.0 (7cd667e), Biome has been this repo's formatter — but nothing ever ran it: no script, no CI, no hooks. Meanwhile the lint/lint:fix scripts still invoked ESLint, which has had no config since that same commit (and eslint itself only resolved transitively), so npm run lint has been broken for over a year. This PR finishes the migration:

  • lint / lint:fix now run Biome (biome check . / biome check --write .) and pass.
  • biome.json now says what we actually use: formatter on; linter and import sorting explicitly off (neither was ever adopted — Biome's default lint rules would report ~267 errors and import sorting would churn ~85 files). Adopting them is a possible follow-up, deliberately not done here.
  • Ignore list fixed: test/fixtures, the vendored data/lib.d.ts, and tsconfig files are now parsed as JSONC (comments allowed), so checks measure real sources only.
  • 13 drifted files reformatted (pure reflow — with no CI check, drift crept in since the original migration).
  • CI now enforces formatting: a Check formatting (Biome) step in the build job (Node 20 leg; runs in well under a second).
  • Biome upgraded to the current major: 1.9.4 → 2.5.3. biome migrate rewrote the config to the 2.x schema (files.ignore → negated files.includes, organizeImports → assist action) with identical intent — linter off, import sorting off, same ignore set. The 2.x formatter re-wraps 8 files (conditional-type layout in TS, multi-item array expansion in package.jsons); whitespace-only, no token changes. Four biome-ignore suppressions had the migration tool's literal <explanation> placeholder, which Biome 2 warns about — filled in with real reasons, so npm run lint is warning-free.
  • Dead ESLint dependencies removed: root @typescript-eslint/eslint-plugin+parser (v6) and quicktype-vscode's eslint + @typescript-eslint/* (v7/v8) — nothing loads any of them; that package has no eslint config or lint script. Drops 76 packages from the install. Two stale eslint-disable comments removed with them.

Consequences

Verification

  • Fresh npm ci; npm run lint exits 0; npm run lint:fix is idempotent (no diff on second run)
  • Full monorepo build; 70/70 unit tests
  • quicktype-vscode still bundles (esbuild-base) without its eslint devDeps
  • The exact CI step command passes locally

🤖 Generated with Claude Code

schani and others added 4 commits July 13, 2026 08:19
Since the v23.2.0 migration (7cd667e) Biome has been the repo's
formatter, but the lint/lint:fix scripts still invoked ESLint, which
has had no configuration since then and only resolved transitively —
npm run lint has been broken the whole time.

Repoint lint/lint:fix at biome check, and make the config say what we
actually use: formatter on, linter and import sorting explicitly off
(neither was ever adopted; enabling them is a possible follow-up).
Also ignore test/fixtures and the vendored data/lib.d.ts so checks
only measure real sources.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
With no CI check, 13 files drifted from Biome formatting since the
v23.2.0 reformat. Pure reflow, no code changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Nothing has loaded ESLint or @typescript-eslint since the Biome
migration in v23.2.0: the root packages were only reachable through
the now-repointed lint scripts, and quicktype-vscode has no eslint
config or lint script at all. Removing them drops 76 packages from
the install. Also drop two stale eslint-disable comments.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fails the build job on format drift; runs once (Node 20 leg) and
takes well under a second. The linter and import sorting stay off
per biome.json, so this only enforces what the repo actually uses.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
schani and others added 3 commits July 13, 2026 08:37
biome migrate rewrote the config to the 2.x schema (files.ignore ->
negated files.includes, organizeImports -> assist action); intent is
unchanged: linter off, import-organizing off, same ignore set. The 2.x
formatter re-wraps 8 files (conditional-type layout in TS, multi-item
array expansion in package.json) - whitespace only, no token changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Biome 2 warns on the literal <explanation> placeholder left by the
original migration's auto-inserted suppressions; npm run lint is now
warning-free.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@schani schani merged commit 0d3b239 into master Jul 13, 2026
23 checks passed
@schani schani deleted the biome-cleanup branch July 13, 2026 13:19
@schani schani mentioned this pull request Jul 13, 2026
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