Finish the Biome migration: working lint scripts, CI format check, drop dead ESLint deps#2923
Merged
Conversation
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>
This was referenced Jul 13, 2026
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>
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.
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:fixscripts still invoked ESLint, which has had no config since that same commit (andeslintitself only resolved transitively), sonpm run linthas been broken for over a year. This PR finishes the migration:lint/lint:fixnow run Biome (biome check ./biome check --write .) and pass.biome.jsonnow 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.test/fixtures, the vendoreddata/lib.d.ts, and tsconfig files are now parsed as JSONC (comments allowed), so checks measure real sources only.Check formatting (Biome)step in the build job (Node 20 leg; runs in well under a second).biome migraterewrote the config to the 2.x schema (files.ignore→ negatedfiles.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 inpackage.jsons); whitespace-only, no token changes. Fourbiome-ignoresuppressions had the migration tool's literal<explanation>placeholder, which Biome 2 warns about — filled in with real reasons, sonpm run lintis warning-free.@typescript-eslint/eslint-plugin+parser(v6) and quicktype-vscode'seslint+@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 staleeslint-disablecomments removed with them.Consequences
@typescript-eslint/eslint-plugin6→8) becomes moot — the package no longer exists here; closing it alongside this PR.Verification
npm ci;npm run lintexits 0;npm run lint:fixis idempotent (no diff on second run)esbuild-base) without its eslint devDeps🤖 Generated with Claude Code