Skip to content

Replace ESLint and Prettier with oxlint and oxfmt - #2024

Merged
kylemh merged 3 commits into
mainfrom
chore/oxlint-oxfmt
Oct 22, 2026
Merged

kylemh merged 3 commits into
mainfrom
chore/oxlint-oxfmt

Conversation

@kylemh

@kylemh kylemh commented Oct 22, 2026

Copy link
Copy Markdown
Member

What: Replace ESLint and Prettier with oxlint (type-aware, through oxlint-tsgolint) and oxfmt.

Why: Linting and formatting go much faster, and the dev toolchain sheds 14 packages. lint:ci now also runs oxfmt --check, so CI enforces formatting everywhere: it fails on whitespace-padded code like the postcss.config.js payload from #2020.

Fix: .oxlintrc.json comes from @oxlint/migrate (311 rules). ESLint plugins with no native equivalent (@eslint-react, better-tailwindcss, lodash, playwright, storybook, no-barrel-files, you-might-not-need-an-effect) load as jsPlugins. Tailwind settings moved to top level, and the existing test-file exemption for Tailwind rules is ported as an override. .oxfmtrc.json comes from oxfmt --migrate=prettier: Tailwind class sorting replaces prettier-plugin-tailwindcss, and sortImports with the same groups replaces import-x/order. MDX is excluded from oxfmt because reflowing JSX inside markdown can change rendered output. oxlint's React Compiler refs rule caught two ref reads during render in MultiStepForm that ESLint missed; step values now live in state, and the never-read stepsRef is gone. Most of the diff is the one-time oxfmt reformat (mostly import order) in its own commit.

@vercel

vercel Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
operation-code Ready Ready Preview Oct 22, 2026 4:56am UTC
storybook Ready Ready Preview Oct 22, 2026 4:56am UTC

Request Review

@github-actions

Copy link
Copy Markdown

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 51.42% 342 / 665
🔵 Statements 52.38% 362 / 691
🔵 Functions 56.55% 164 / 290
🔵 Branches 65.31% 194 / 297
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
src/components/Analytics/AnalyticsProvider.tsx 0% 0% 0% 0% 1-64
src/components/Branding/FontSection/FontSection.tsx 100% 100% 100% 100%
src/components/Cards/FlatCard/FlatCard.tsx 100% 91.66% 100% 100%
src/components/Container/Container.tsx 100% 100% 100% 100%
src/components/Footer/Footer.tsx 100% 100% 100% 100%
src/components/Form/MultiStepForm.tsx 93.93% 100% 90.9% 92.85% 164-165
src/components/Form/Checkbox/Checkbox.tsx 100% 100% 100% 100%
src/components/Form/Input/Input.tsx 100% 78.94% 100% 100%
src/components/Form/Label/Label.tsx 100% 100% 100% 100%
src/components/Form/Select/SelectMulti.tsx 100% 75% 100% 100%
src/components/Form/Select/SelectSingle.tsx 100% 75% 100% 100%
src/components/Forms/RegistrationForm/RegistrationForm.tsx 89.28% 85.71% 85.71% 89.28% 91, 241, 270
src/components/Forms/UpdateProfileForm/UpdateProfileForm.tsx 22.5% 10.52% 12.5% 23.68% 16-36, 62-90, 95-99
src/components/Forms/UpdateProfileForm/steps/MilitaryDetails.tsx 100% 100% 100% 100%
src/components/Forms/UpdateProfileForm/steps/MilitaryStatus.tsx 100% 100% 100% 100%
src/components/Forms/UpdateProfileForm/steps/PersonalDetails.tsx 100% 100% 100% 100%
src/components/Forms/UpdateProfileForm/steps/ProfessionalDetails.tsx 100% 100% 100% 100%
src/components/Heading/Heading.tsx 100% 100% 100% 100%
src/components/HeroBanner/HeroBanner.tsx 100% 100% 100% 100%
src/components/Nav/Nav.tsx 72.22% 50% 66.66% 75% 23, 27-28, 47-48
src/components/Nav/NavListItem/NavListItem.tsx 100% 90.9% 100% 100%
src/components/Nav/NavMobile/NavMobile.tsx 100% 100% 100% 100%
src/components/OutboundLink/OutboundLink.tsx 80% 71.42% 50% 80% 46
src/components/ReusableSections/DonateSection/DonateSection.tsx 100% 100% 100% 100%
src/components/ReusableSections/JoinSection/JoinSection.tsx 100% 100% 100% 100%
src/components/Section/Card.tsx 0% 0% 0% 0% 13-37
src/components/Section/Q.tsx 0% 100% 0% 0% 1-32
src/components/SocialMedia/SocialMedia.tsx 100% 100% 100% 100%
src/components/ui/accordion.tsx 0% 100% 0% 0% 1-70
src/components/ui/card.tsx 0% 0% 0% 0% 9-84
src/components/ui/dialog.tsx 0% 0% 0% 0% 1-122
src/components/ui/dropdown-menu.tsx 25% 44.44% 20% 25% 13, 52-237
src/components/ui/field.tsx 48% 35.71% 30.76% 45.83% 9-48, 85-162, 176, 180, 189-192, 202-210
src/components/ui/label.tsx 50% 100% 0% 50% 7-15
src/components/ui/separator.tsx 50% 0% 0% 50% 7-16
src/components/ui/sheet.tsx 45.45% 100% 40% 45.45% 18, 26-34, 76-111
src/components/ui/__stories__/Card.stories.tsx 0% 100% 0% 0% 5-41
src/components/ui/__stories__/Dialog.stories.tsx 0% 100% 0% 0% 13-36
src/components/ui/__stories__/DropdownMenu.stories.tsx 0% 100% 0% 0% 13-36
src/components/ui/__stories__/Sheet.stories.tsx 0% 100% 0% 0% 12-46
src/lib/utils/api-utils.ts 30% 28.57% 6.66% 30% 29-35, 43-56, 61-73, 78-90, 95-107
src/lib/utils/index.ts 100% 100% 100% 100%
Generated in workflow #140 for commit 41665ee by the Vitest Coverage Report Action

@kylemh
kylemh merged commit 8269f5e into main Oct 22, 2026
11 checks passed
@kylemh
kylemh deleted the chore/oxlint-oxfmt branch October 22, 2026 04:58

This branch was successfully deployed

2 active deployments
Preview – operation-code — 41665eea Deployed Oct 22, 2026 by vercel[bot]
Preview – storybook — 41665eea Deployed Oct 22, 2026 by vercel[bot]
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