chore: migrate from eslint and prettier to biome - #14
Merged
Conversation
added 3 commits
March 7, 2026 17:05
Replace ESLint + Prettier with Biome for linting and formatting. Remove eslint.config.mjs, .prettierrc.json, and related devDependencies. Add biome.json configuration and reformat codebase accordingly. Update .editorconfig to use 2-space indentation.
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.config.mjs,.prettierrc.json, and related devDependencies (eslint,prettier,typescript-eslint,globals, etc.)biome.jsonconfiguration and@biomejs/biomedevDependencypackage.jsonscripts (lint,lint:fix,format) to use Biome.editorconfigto use 2-space indentationTest plan
pnpm lintto verify Biome check passespnpm formatto verify Biome formatting workspnpm testto verify no regressions from reformattingpnpm buildstill produces correct outputGreptile Summary
This PR migrates the project's tooling from ESLint + Prettier to Biome for linting and formatting. All source files are reformatted consistently (double quotes, 2-space indent, trailing commas, line-width wrapping,
node:import prefixes), configuration files for the old tools are removed, andpackage.jsonscripts anddevDependenciesare updated accordingly.Key observations:
src/index.ts:awaitwas added toImplementInterface(...)to satisfy Biome'snoFloatingPromisesrule. This is a real behavioral change — the original code had a floating promise that would have swallowed rejections. This bug fix is not called out in the PR description.errorseverity (biome.json):nursery.noFloatingPromisesis experimental and subject to change/removal between Biome releases. Using"error"rather than"warn"risks unexpected CI failures on future Biome upgrades.no-console,@typescript-eslint/no-misused-promises, andimport/no-extraneous-dependenciesare no longer enforced. These represent a minor reduction in static analysis coverage.@biomejs/biomeis pinned to an exact version (2.3.2) in bothpackage.jsonand the$schemaURL, which is good practice for reproducible builds.Confidence Score: 4/5
ImplementInterface) is actually a bug fix. The only real risks are the experimentalnurseryrule set toerrorseverity and the loss of a few ESLint rules that have no Biome equivalents.biome.json(nursery rule severity) andsrc/index.ts(undocumented functional change) warrant a quick look before merging.Important Files Changed
nursery.noFloatingPromisesis set to"error"which is risky since nursery rules are unstable and may change between Biome versions.awaitadded toImplementInterface(...), fixing a previously floating promise.@biomejs/biome@2.3.2(pinned, good for reproducibility) and updateslint,lint:fix, andformatscripts accordingly.node:protocol prefix on built-in imports. No logic changes.node:httpimport prefix. No logic changes.import typeoptimisations. No logic changes.no-console,no-misused-promises,import/no-extraneous-dependencies) have no direct Biome equivalents.@biomejs/biome@2.3.2with all its optional platform-specific CLI binaries.Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD A[Developer runs pnpm lint / pnpm format] --> B{Biome CLI} B --> C[Linter\nbiome check .] B --> D[Formatter\nbiome format --write .] C --> E{Rules Applied} E --> F[recommended rules\nstable] E --> G[suspicious.noExplicitAny\ndisabled] E --> H[nursery.noFloatingPromises\nerror ⚠️ experimental] D --> I[2-space indent\ndouble quotes\ntrailing commas\nline width 80] F --> J[Pass / Fail] G --> J H --> J I --> JComments Outside Diff (2)
biome.json, line 70-72 (link)Nursery rule set to
errorseverityBiome's
nurserycategory contains experimental rules that are unstable and subject to change or removal between releases. SettingnoFloatingPromisesto"error"(as opposed to"warn") means that any breaking change to this rule in a future Biome update could unexpectedly break CI.Consider using
"warn"until the rule graduates to a stable category, or at minimum, document this as an intentional decision so future maintainers understand the risk when upgrading Biome.src/index.ts, line 576-579 (link)Unannounced functional change mixed into formatting PR
The addition of
awaitbeforeImplementInterface(...)is a behavioral change, not just a reformatting. IfImplementInterfacereturns aPromise(which is what triggered Biome'snoFloatingPromisesrule), the original code had a floating promise — meaning any rejection fromImplementInterfacewould have been silently swallowed instead of propagating to the caller ofconstruct().This is effectively a bug fix bundled into a purely cosmetic PR. It is worth explicitly calling this out in the PR description so reviewers and future readers of the git history are aware that this file contains a runtime behavior change, not only formatting.
Last reviewed commit: c4d654e