Skip to content

Conversation

@david-crespo
Copy link
Collaborator

@david-crespo david-crespo commented Dec 23, 2025

Oxlint runs in 800ms without caching. Eslint runs in 14 seconds without caching, 600ms with a warm cache and no changes. So Oxlint without caching is about the same as eslint with caching.

$ time npm run lint

> oxide@0.0.0 lint
> eslint --ext .js,.ts,.tsx app test mock-api

npm run lint  21.42s user 2.09s system 166% cpu 14.150 total

$ time npm run lint -- --cache

> oxide@0.0.0 lint
> eslint --ext .js,.ts,.tsx app test mock-api --cache

npm run lint -- --cache  0.69s user 0.22s system 83% cpu 1.083 total

$ time npm run lint -- --cache

> oxide@0.0.0 lint
> eslint --ext .js,.ts,.tsx app test mock-api --cache

npm run lint -- --cache  0.67s user 0.17s system 144% cpu 0.579 total

We've been running both eslint and oxlint for a while. Now that oxlint supports type-aware rules and JS plugins, I think it's time to drop eslint. The playwright plugin runs via oxlint's experimental JS plugin support. We do lose eslint-plugin-react-hook-form for now because all 3 rules use context.getScope(), which oxlint doesn't support yet. I'll make an issue to add it back when it's supported.

@vercel
Copy link

vercel bot commented Dec 23, 2025

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

Project Deployment Review Updated (UTC)
console Ready Ready Preview Dec 29, 2025 9:55pm

"name": "playwright",
"specifier": "eslint-plugin-playwright"
}
// eslint-plugin-react-hook-form won't work — all its rules use context.getScope()

Choose a reason for hiding this comment

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

Is this still the case? I believe getScope() may be implemented on the most recent releases of oxlint? https://github.com/oxc-project/oxc/blob/e9d346f1f219025229013da47386d387823c220e/apps/oxlint/src-js/plugins/scope.ts#L359

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Looks like it, though only the access control rule errors like this. The other two don't seem to work, though — at least with the destructuring rule, I see things that should fail but aren't getting caught.

  × Error running JS plugin.
  │ File path: /Users/david/oxide/console/app/components/form/fields/TlsCertsField.tsx
  │ TypeError: context.getScope is not a function
  │     at check (/Users/david/oxide/console/node_modules/eslint-plugin-react-hook-form/lib/rules/no-access-control.js:43:12)
  │     at file:///Users/david/oxide/console/node_modules/oxlint/dist/lint.js:20177:17
  │     at walkVariableDeclarator (file:///Users/david/oxide/console/node_modules/oxlint/dist/lint.js:18336:70)
  │     at walkNode (file:///Users/david/oxide/console/node_modules/oxlint/dist/lint.js:17746:4)
  │     at walkNode (file:///Users/david/oxide/console/node_modules/oxlint/dist/lint.js:17467:33)
  │     at walkVariableDeclaration (file:///Users/david/oxide/console/node_modules/oxlint/dist/lint.js:18332:109)
  │     at walkNode (file:///Users/david/oxide/console/node_modules/oxlint/dist/lint.js:17743:4)
  │     at walkNode (file:///Users/david/oxide/console/node_modules/oxlint/dist/lint.js:17467:33)
  │     at walkBlockStatement (file:///Users/david/oxide/console/node_modules/oxlint/dist/lint.js:18108:109)
  │     at walkNode (file:///Users/david/oxide/console/node_modules/oxlint/dist/lint.js:17575:4)

Choose a reason for hiding this comment

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

Warnings/errors aren't integrated into the editor extension yet for JS plugin violations, just in case you're expecting those to show up.

Otherwise, may be worth opening an issue in the oxc repo about this particular plugin having problems so they can be investigated. 🙇‍♂️

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Thanks, putting it on my todo list.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

While putting together a repro at https://github.com/david-crespo/oxlint-rhf-plugin-repro, Claude notes:

Note: Had to use ESLint 8.57.1 because eslint-plugin-react-hook-form also uses context.getScope() which was removed in ESLint 9 (replaced with sourceCode.getScope()). The plugin itself needs updating for ESLint 9 compatibility.

This could explain the above.

Copy link

@connorshea connorshea Dec 29, 2025

Choose a reason for hiding this comment

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

@david-crespo Looks like that is planned for support, though it won't be until late next month at the absolute earliest: oxc-project/oxc#17130

Reach out if you run into any other problems!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Thank you! Subscribed to that issue.

@david-crespo david-crespo merged commit 8009ce4 into main Dec 29, 2025
7 checks passed
@david-crespo david-crespo deleted the oxlint-only branch December 29, 2025 22:29
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.

3 participants