Conversation
TypeScript 7 is the native Go port of the compiler. It ships only the
`tsc` binary: the JavaScript compiler API is gone until 7.1, and
typescript-eslint refuses to load against it. That makes the two halves
of this change a single step rather than two.
Timings on this machine, from a cold cache:
yarn ts 4.83s -> 1.04s
yarn lint-js 11.00s -> 1.93s
yarn lint 14.03s -> 2.98s
Only oxlint runs. `.oxlintrc.json` is derived from the effective
configuration of the eslint.config.mjs it replaces, so the enforced rule
set is the same one ESLint applied. Where oxlint has no native rule, the
original ESLint plugin is loaded in-process through `jsPlugins`, which is
still a single pass over the tree with a single config file:
eslint-plugin-testing-library 20 rules
eslint-plugin-jest-dom 11 rules
eslint-plugin-react 7 rules, aliased to `react-js` so
it sits beside oxlint's native
`react` plugin
eslint-plugin-jest-formatting padding-around-describe-blocks
`eslint` comes back as a devDependency because those plugins import it —
eslint-plugin-react reads its package.json for a version check, and
eslint-plugin-testing-library pulls it in via @typescript-eslint/utils.
Nothing invokes the ESLint CLI and there is no ESLint config.
Two rules are deliberately not restored, because TypeScript already
reports what they caught: @babel/no-invalid-this as TS2683 under `strict`,
and import/no-unresolved as TS2307.
Checked by running both linters over a corpus of 57 single-defect files,
one per rule. Every rule ESLint caught is still caught, and oxlint
reports no false positives.
Two behavioural notes:
- react/no-did-mount-set-state and react/no-did-update-set-state were
already dead. eslint-plugin-react turns them into no-ops for any
React >= 16.3, and this project declares 18.0. They stay off.
- ESLint's no-return-await is deprecated and has no oxlint equivalent.
typescript/return-await replaces it in
`error-handling-correctness-only` mode, which reports only where
adding or removing `await` changes which errors a try/catch sees.
That is a narrower rule, and it is what found the bug fixed two
commits earlier.
The eslint-disable comments for rules loaded through jsPlugins are
renamed to the names oxlint reports them by.
jsPlugins is documented as alpha and not covered by semver, so an oxlint
upgrade may require revisiting this file. If it ever breaks, dropping the
jsPlugins block and the rules it provides leaves a working native-only
configuration.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #6354 +/- ##
=======================================
Coverage 84.11% 84.11%
=======================================
Files 356 356
Lines 38444 38444
Branches 10887 10901 +14
=======================================
Hits 32339 32339
Misses 5676 5676
Partials 429 429 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Main | Deploy preview
TypeScript 7 has a faster compiler but eslint isn't compatible with it. But we can switch to oxlint instead; oxlint has many of the lints we use built-in, and for the rest (testing-library, jest-dom) it has a
jsPluginadapter.Timings on my machine, from a cold cache:
Two notes:
error-handling-correctness-onlymode, which reports only where adding or removingawaitchanges which errors a try/catch sees. That is a narrower rule, and it is what found the bug fixed in Add missing await when calling Chrome importer #6346.The eslint-disable comments for rules loaded through jsPlugins are renamed to the oxlint names.
jsPlugins is documented as alpha and not covered by semver, so an oxlint upgrade may require revisiting this file.