chore: migrate from ESLint to Biome for linting - #53
Merged
Conversation
Replace ESLint (and typescript-eslint, @eslint/js, globals,
@eslint/eslintrc) with Biome as the linter. Biome understands TypeScript
natively, runs ~100x faster (191 files in ~85ms), and removes 5 dev
dependencies plus several transitive audit findings.
Scope is linter-only: the formatter stays disabled, so no source files
are reformatted. biome.json mirrors the previous ESLint ruleset (migrated
via `biome migrate eslint`) and excludes build output, the .agent
examples, and the evolution-types submodule.
Code changes are minimal, limited to satisfying the migrated rules:
- Translate 2 eslint-disable for no-explicit-any to biome-ignore (raw SQL rows).
- Remove 3 orphaned no-unused-vars disables (Biome ignores _-prefixed params).
- Replace 3 empty mock bodies (async () => { }) with async () => undefined.
- Suppress one unused private member reserved for disabled file logging.
Verified: biome lint exits 0, tsc exits 0, 246 tests pass.
3 tasks
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.
Summary
eslint,typescript-eslint,@eslint/js,globals,@eslint/eslintrc.bun.lockshedding the ESLint tree).Why
Biome understands TypeScript natively (no parser plugin), runs ~100x
faster (191 files in ~85ms vs ESLint's seconds), and drops several
transitive vulnerabilities that came through the ESLint toolchain.
Scope: linter only
The formatter stays disabled — no source file is reformatted. This
keeps the diff small and git blame intact. Adopting Biome's formatter is
a separate, deliberate decision for later.
biome.jsonmirrors the previous ESLint ruleset (viabiome migrate eslint) and excludesbuild/,.agent/(skill examples), and thesrc/evolution-types/submodule.Code changes (minimal, to satisfy migrated rules)
WrappedPostgresRepository.tseslint-disable→biome-ignore(raw SQL rows are untyped)AbstractThemeStrategy.ts,GetCosmeticsCatalog.test.tsno-unused-varsdisables (Biome ignores_-prefixed params natively)UserAuth.test.tsasync () => { }→async () => undefinedPino.tsfileLogger(reserved for disabled file logging — see note)Note for follow-up
Pino.fileLoggeris configured but unused (its calls are commented out).Suppressed with
biome-ignorerather than deleted, since enabling vsremoving file logging is a product decision, not a linting one.
Test plan
bun run lint(Biome) — exit 0, 0 errorsbun run build(tsc) — exit 0bun test— 246 pass / 0 faileslintreferences remain in project code (only in excluded.agent/examples)