Skip to content

chore: migrate from ESLint to Biome for linting - #53

Merged
diangogav merged 1 commit into
mainfrom
chore/migrate-eslint-to-biome
Jun 19, 2026
Merged

chore: migrate from ESLint to Biome for linting#53
diangogav merged 1 commit into
mainfrom
chore/migrate-eslint-to-biome

Conversation

@diangogav

Copy link
Copy Markdown
Owner

Summary

  • Replace ESLint with Biome as the project linter (linter-only scope).
  • Remove 5 dev dependencies: eslint, typescript-eslint, @eslint/js,
    globals, @eslint/eslintrc.
  • Net −161 lines (mostly bun.lock shedding 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.json mirrors the previous ESLint ruleset (via biome migrate eslint) and excludes build/, .agent/ (skill examples), and the
src/evolution-types/ submodule.

Code changes (minimal, to satisfy migrated rules)

File Change
WrappedPostgresRepository.ts 2 eslint-disablebiome-ignore (raw SQL rows are untyped)
AbstractThemeStrategy.ts, GetCosmeticsCatalog.test.ts remove 3 orphaned no-unused-vars disables (Biome ignores _-prefixed params natively)
UserAuth.test.ts 3 empty mock bodies async () => { }async () => undefined
Pino.ts suppress unused fileLogger (reserved for disabled file logging — see note)

Note for follow-up

Pino.fileLogger is configured but unused (its calls are commented out).
Suppressed with biome-ignore rather than deleted, since enabling vs
removing file logging is a product decision, not a linting one.

Test plan

  • bun run lint (Biome) — exit 0, 0 errors
  • bun run build (tsc) — exit 0
  • bun test — 246 pass / 0 fail
  • No eslint references remain in project code (only in excluded .agent/ examples)

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.
@diangogav
diangogav merged commit 47c52ef into main Jun 19, 2026
1 check passed
@diangogav
diangogav deleted the chore/migrate-eslint-to-biome branch June 19, 2026 15:27
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