Skip to content

chore: migrate ESLint → Oxlint#3058

Open
byrichardpowell wants to merge 1 commit intomainfrom
chore/eslint-to-oxlint
Open

chore: migrate ESLint → Oxlint#3058
byrichardpowell wants to merge 1 commit intomainfrom
chore/eslint-to-oxlint

Conversation

@byrichardpowell
Copy link
Copy Markdown
Contributor

@byrichardpowell byrichardpowell commented Mar 2, 2026

Why

ESLint (with @shopify/eslint-plugin) has accumulated significant startup overhead and transitive dependencies. Oxlint is a Rust-based linter that is ~50–100x faster, with a much smaller dependency footprint.

What

  • Replace ESLint with Oxlint: deletes eslint.config.js, adds oxlint.json with equivalent rules (TypeScript, import, and promise plugins)
  • Update all 20 package lint scripts from eslint . to oxlint .
  • Remove ESLint devDependencies (eslint, @shopify/eslint-plugin, eslint-plugin-jest) and add oxlint@^1.0.0
  • Decouple Prettier: ESLint previously ran Prettier as a plugin. Prettier now runs as a standalone prettier script (prettier --check .) separate from linting. The .prettierignore glob patterns for Remix/React Router example files are also fixed (*.example.tsx? → explicit .ts/.tsx patterns)
  • Fix 42 Oxlint violations surfaced by stricter rule enforcement:
    • no-non-null-asserted-optional-chain — billing helpers and Express config
    • no-unsafe-optional-chainingrequest-mock.ts (Remix + React Router)
    • no-unused-vars — catch params renamed to _error/_err, unused imports removed

Testing

All CI checks pass (lint + tests across Node 20/22/24).

@byrichardpowell byrichardpowell requested a review from a team as a code owner March 2, 2026 14:45
@byrichardpowell byrichardpowell force-pushed the chore/eslint-to-oxlint branch 2 times, most recently from 2500302 to ad84acd Compare March 2, 2026 14:51
@byrichardpowell byrichardpowell force-pushed the chore/eslint-to-oxlint branch from dfc822f to b13d1d4 Compare March 2, 2026 15:52
Replace @shopify/eslint-plugin + eslint + eslint-plugin-jest with Oxlint
(https://oxc.rs/docs/guide/usage/linter), a Rust-based linter ~50–100x faster.

Changes:
- Delete eslint.config.js, add oxlint.json with equivalent rule config
- Update all 20 package lint scripts from `eslint .` to `oxlint .`
- Remove ESLint devDependencies (eslint, @shopify/eslint-plugin,
  eslint-plugin-jest) and add oxlint@^1.0.0
- Run Prettier as a standalone `prettier` script instead of via ESLint;
  fix .prettierignore glob patterns for remix/react-router example files
- Fix 42 Oxlint violations introduced by stricter rule enforcement:
  - no-non-null-asserted-optional-chain in billing helpers and express config
  - no-unsafe-optional-chaining in request-mock.ts (remix + react-router)
  - no-unused-vars: rename catch params to _error/_err, remove unused imports

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@byrichardpowell byrichardpowell force-pushed the chore/eslint-to-oxlint branch from b13d1d4 to bb93899 Compare March 2, 2026 16:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant