refactor: replace Biome with oxlint + oxfmt

Migrate the entire monorepo from Biome 2.4.7 to oxlint 1.56.0 (linter)
and oxfmt 0.41.0 (formatter) for faster lint/format and broader rule
coverage.

- Add `.oxlintrc.json` with React, TypeScript, unicorn, import plugins
  and correctness/suspicious categories
- Add `.oxfmtrc.json` with 2-space indent, import sorting, and Tailwind
  class sorting (all 30+ custom className attributes migrated)
- Add `docs/.oxlintrc.json` and `docs/.oxfmtrc.json` with Next.js plugin
- Update all 12 workspace package.json scripts: `oxlint`, `oxfmt`,
  `oxfmt --check`
- Add `format:check` turbo task and CI step
- Update VS Code settings/extensions to use `oxc.oxc-vscode`
- Update CI path triggers from `biome.json` to new config files
- Remove all `biome-ignore` comments and fix shadowed variables
- Delete `biome.json` and `docs/biome.json`
- Reformat entire codebase with oxfmt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-18 13:26:50 -04:00
co-authored by Claude Opus 4.6
parent a80c8c9a0c
commit 2b0c683b7b
359 changed files with 3894 additions and 7208 deletions
+5
View File
@@ -0,0 +1,5 @@
{
"$schema": "../../node_modules/oxlint/configuration_schema.json",
"extends": ["../../.oxlintrc.json"],
"ignorePatterns": ["node_modules", "dist", "build", "src/po/*.ts"]
}
+3 -2
View File
@@ -10,8 +10,9 @@
"./test-utils": "./src/test-utils.tsx"
},
"scripts": {
"lint": "biome check",
"format": "biome format --write",
"lint": "oxlint",
"format": "oxfmt --config ../../.oxfmtrc.json",
"format:check": "oxfmt --check --config ../../.oxfmtrc.json",
"check-types": "tsc --noEmit"
},
"dependencies": {
+3 -10
View File
@@ -9,14 +9,10 @@ function toDate(date: Date | string): Date {
return typeof date === "string" ? new Date(date) : date;
}
export function formatDate(
date: Date | string,
options?: Intl.DateTimeFormatOptions,
): string {
export function formatDate(date: Date | string, options?: Intl.DateTimeFormatOptions): string {
// Date-only ISO strings (e.g. "1990-05-15") are parsed as UTC midnight.
// Format in UTC so users west of UTC don't see the previous day.
const useUTC =
typeof date === "string" && isDateOnly(date) && !options?.timeZone;
const useUTC = typeof date === "string" && isDateOnly(date) && !options?.timeZone;
return new Intl.DateTimeFormat(i18n.locale, {
year: "numeric",
month: "long",
@@ -53,10 +49,7 @@ export function formatRelativeTime(date: Date | string): string {
return rtf.format(sign * Math.round(absDay / 365), "year");
}
export function formatNumber(
n: number,
options?: Intl.NumberFormatOptions,
): string {
export function formatNumber(n: number, options?: Intl.NumberFormatOptions): string {
return new Intl.NumberFormat(i18n.locale, options).format(n);
}
+1
View File
@@ -1,4 +1,5 @@
import { i18n, type Messages } from "@lingui/core";
import { messages as enMessages } from "./po/en";
export const SUPPORTED_LOCALES = ["en", "fr", "de", "es", "it", "pt"] as const;
+1
View File
@@ -1,6 +1,7 @@
import { i18n } from "@lingui/core";
import { I18nProvider } from "@lingui/react";
import type { ReactNode } from "react";
import { messages } from "./po/en";
i18n.load("en", messages);