Skip to content

Migrate lint/format tooling from Biome to Ultracite (oxc) and add editor configs - #73

Merged
nyatinte merged 2 commits into
mainfrom
codex/add-.vscode-to-biome-migration
Mar 27, 2026
Merged

Migrate lint/format tooling from Biome to Ultracite (oxc) and add editor configs#73
nyatinte merged 2 commits into
mainfrom
codex/add-.vscode-to-biome-migration

Conversation

@nyatinte

@nyatinte nyatinte commented Mar 26, 2026

Copy link
Copy Markdown
Owner

What

  • Replace Biome-based linting/formatting with Ultracite (oxc: oxlint/oxfmt) to standardize on the new tooling and editor integrations.
  • Add editor and workspace settings so editors and the Zed LSP use oxc formatters and linters consistently.
  • Regenerate pnpm-lock.yaml to remove @biomejs/biome and add oxfmt/oxlint entries.
  • Configure oxlint rules to be compatible with the existing codebase conventions.
  • Enable vitest globals mode and fix test regressions caused by linter auto-fixes.

Why

  • Standardize on Ultracite (oxc) tooling for linting and formatting across editor integrations and CI.
  • Ensure the lockfile is in sync with the updated devDependencies so pnpm install --frozen-lockfile succeeds in CI.
  • The oxlint/vitest plugin assumes globals mode, requiring globals: true in the vitest config after explicit vitest imports were removed by lint auto-fix.
  • Several strict oxlint rules (e.g. func-style, sort-keys, jest/no-hooks) are incompatible with the existing code style and needed to be disabled.

Ref

  • Replaced the CI biome job with a lint job named "Ultracite Check (Oxc)" that runs pnpm check.
  • Removed biome.jsonc and @biomejs/biome from devDependencies; added oxfmt and oxlint.
  • Added .oxfmtrc.jsonc and .oxlintrc.json configuration files with rule overrides compatible with the existing codebase.
  • Added oxfmt to knip.json ignoreDependencies (CLI tool, not an ES import).
  • Added VS Code settings at .vscode/settings.json and updated Zed settings at .zed/settings.json to use oxfmt/oxlint with format-on-save.
  • Updated .gitignore so .vscode/settings.json is tracked while still ignoring other .vscode files.
  • Applied oxfmt formatting to all source, config, and example files.
  • Fixed test assertions broken by linter auto-fixes: restored toHaveBeenCalled() in src/cli.test.ts and updated expected script order in src/workspace.test.ts.
  • All CI commands pass: pnpm typecheck, pnpm knip, pnpm check, and pnpm test:run (82/82 tests).

💬 Send tasks to Copilot coding agent from Slack and Teams to turn conversations into code. Copilot posts an update in your thread when it's finished.

@changeset-bot

changeset-bot Bot commented Mar 26, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 2f591a9

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request modernizes the project's code quality pipeline by replacing Biome with the Ultracite (oxc) suite for all linting and formatting tasks. The change aims to standardize on a potentially faster and more integrated tooling ecosystem, ensuring a consistent code style and improved developer experience through updated editor configurations for VS Code and Zed.

Highlights

  • Tooling Migration: Migrated the project's linting and formatting infrastructure from Biome to Ultracite (oxc), utilizing oxlint and oxfmt.
  • Editor Integration: Configured editor settings for VS Code and Zed to automatically use the new oxfmt and oxlint tools for consistent code style and quality.
  • Configuration Updates: Updated project dependencies, removed old Biome configuration files, and introduced new configuration files for Ultracite tooling.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/ci.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request migrates the project's code formatting and linting infrastructure from Biome to Oxc (oxfmt and oxlint). This involves adding new configuration files for oxfmt and oxlint, updating .gitignore, and configuring VS Code and Zed to utilize the new tools, while removing all Biome-related files and dependencies. Feedback suggests pinning oxfmt and oxlint dependencies to specific versions in package.json for better build reproducibility, and simplifying the .vscode/settings.json by setting oxc.oxc-vscode as the global default formatter to remove redundant language-specific overrides.

Comment thread package.json
Comment on lines +74 to +75
"oxfmt": "latest",
"oxlint": "latest",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Using "latest" for package versions can lead to unexpected build failures when new versions are released. It's a best practice to pin dependencies to specific versions to ensure reproducible builds. All other dependencies in this file are pinned.

Please replace "latest" with specific versions. You can find the latest versions by running pnpm info oxfmt version and pnpm info oxlint version.

Suggested change
"oxfmt": "latest",
"oxlint": "latest",
"oxfmt": "0.1.1",
"oxlint": "0.4.2",

Comment thread .vscode/settings.json
@@ -0,0 +1,58 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To simplify this configuration, you should set oxc.oxc-vscode as the default formatter. This makes the project's tooling choice clear. After making this change, you can remove all the language-specific editor.defaultFormatter overrides from lines 7-54, as they will become redundant.

Suggested change
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.defaultFormatter": "oxc.oxc-vscode",

@nyatinte

Copy link
Copy Markdown
Owner Author

@copilot update lock and pass all ci cmds

Copilot AI commented Mar 26, 2026

Copy link
Copy Markdown
Contributor

@copilot update lock and pass all ci cmds

Done in 2f591a9. Updated the lockfile (removed @biomejs/biome, added oxfmt/oxlint), configured oxlint rules to be compatible with the existing codebase, added globals: true to vitest config (the linter removed explicit vitest imports), fixed test assertions broken by linter auto-fixes, and applied oxfmt formatting to all files. All CI commands pass: pnpm typecheck, pnpm knip, pnpm check, and pnpm test:run (82/82 tests).

@github-actions

Copy link
Copy Markdown
Contributor

Size Change: -1 B (-0.03%)

Total Size: 3.02 kB

Filename Size Change
./dist/bin.mjs 3.02 kB -1 B (-0.03%)

compressed-size-action

@nyatinte
nyatinte marked this pull request as ready for review March 27, 2026 07:33
@nyatinte
nyatinte merged commit 6c3b665 into main Mar 27, 2026
6 checks passed
@nyatinte
nyatinte deleted the codex/add-.vscode-to-biome-migration branch March 27, 2026 07:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants