fix(linter): report exhaustive effect dependencies - #25829
Conversation
Merge activity
|
Merging this PR will not alter performance
Comparing Footnotes
|
Enable React Compiler exhaustive effect dependency validation in Oxlint so the rule reports missing and extra dependencies instead of remaining inert. Validated with `just ready`. AI-assisted.
4ddd511 to
e4b6993
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4ddd511881
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| validate_no_capitalized_calls: Some(vec![]), | ||
| validate_hooks_usage: true, | ||
| validate_no_derived_computations_in_effects: true, | ||
| validate_exhaustive_effect_dependencies: ExhaustiveEffectDepsMode::All, |
There was a problem hiding this comment.
Deduplicate the existing exhaustive-deps diagnostic
When users enable the React plugin normally, ConfigStoreBuilder::warn_correctness enables every React correctness rule, including both react-hooks/exhaustive-deps (declared as correctness in exhaustive_deps.rs) and react/exhaustive-effect-dependencies. For an effect such as the new missing-value test case, the existing rule already reports that missing dependency, so enabling this compiler validation unconditionally produces two warnings for the same defect. Please deduplicate overlapping findings or avoid enabling both rules through the correctness preset.
Useful? React with 👍 / 👎.
# Oxlint ### 💥 BREAKING CHANGES - 8c4552d linter: [**BREAKING**] Split react/react-compiler into per-category rules (#25500) (Boshen) ### 🚀 Features - 9b7394e linter/typescript/no-empty-object-type: Implement suggestion (#25833) (Mikhail Baev) ### 🐛 Bug Fixes - 345f981 react_compiler: Skip node_modules by default (#25859) (Boshen) - 2f40afa linter/unicorn/no-array-callback-reference: Ignore effect library imports (#25857) (Michaël Bitard) - 7b565a0 linter: Align React Compiler rule categories (#25840) (Boshen) - 228e8e0 linter: Resolve inactive React compiler rules (#25830) (Boshen) - f8e4884 linter/eslint/no-useless-constructor: Allow parameter properties (#25811) (camc314) - e4b6993 linter: Report exhaustive effect dependencies (#25829) (Boshen) - 742e25f linter/eslint/no-return-assign: Anchor diagnostic on return stmt (#25803) (camc314) - b831ca8 react-compiler: Improve derived state diagnostic (#25804) (Boshen) - 5908c87 linter/jest/prefer-mock-return-shorthand: Preserve implementations using this (#25802) (camc314) - f6b2265 linter/eslint/no-redeclare: Run in ES modules, skipping only the globals check (#25691) (Hamody We) - ca9f553 linter/unicorn/prefer-default-parameters: Mark fixer as a suggestion (#25801) (camc314) - aa49d86 linter: Allow spread rule options in config types (#25675) (ch3rry) - d5483f8 linter/typescript/no-useless-empty-export: Skip TS declaration files (#25789) (Evyatar Daud) - 57f2199 linter/typescript/no-useless-empty-export: Report after imports (#25786) (camc314) - 633bc19 linter/typescript/no-unnecessary-type-conversion: Mark fixer as `suggestion` (#25787) (camc314) - dea3339 linter/typescript/explicit-module-boundary-types: Anchor diagnostics on arrows (#25779) (camc314) - 5cd6f02 linter/eslint/array-callback-return: Anchor diagnostic on callback (#25780) (camc314) - ef8cebf linter/eslint/preserve-caught-error: Handle AggregateError options (#25775) (camc314) - c108d5c linter: Improve React Compiler diagnostics (#25742) (Boshen) - c9ec55e react-compiler: Improve diagnostic spans (#25731) (Boshen) - 1cbbcb7 linter/unicorn/prefer-string-replace-all: Apply fixes in one pass (#25709) (Mikhail Baev) - dec0a86 react-compiler: Standardize diagnostics (#25702) (Boshen) - 5fd77f7 linter/react/display-name: Report curried HOC inner component (#25662) (camc314) - 4dbb80e linter/import/no-named-as-default: Report local export conflicts (#25658) (camc314) - e8a7214 linter/react/rules-of-hooks: Report hooks inside try blocks (#25670) (camc314) - 36f8451 linter/eslint/no-eval: Align indirect default with ESLint (#25656) (camc314) - d901d24 linter/react/exhaustive-deps: Handle destructured object dependencies (#25669) (camc314) - beb724d linter/eslint/no-unused-vars: Report bare underscore parameters (#25663) (camc314) - fa36f26 linter/react/no-this-in-sfc: Detect this in nested arrow callbacks (#25653) (camc314) - 44d1be3 linter/typescript/no-var-requires: Run rule on JavaScript (#25664) (camc314) - 4004c10 linter/eslint/no-irregular-whitespace: Check comments by default (#25660) (camc314) - 625401d linter/import/no-named-default: Flag type-only named defaults (#25661) (camc314) - 8eacb2d linter/typescript/no-non-null-asserted-optional-chain: Detect assertions after continued optional chains (#25659) (camc314) - d55b76c linter/react/no-direct-mutation-state: Detect computed state mutations (#25654) (camc314) - f92c651 linter/unicorn/no-abusive-eslint-disable: Use directive prefix in diagnostic (#25657) (camc314) - ee44996 linter/eslint/max-classes-per-file: Anchor diagnostic at program start (#25652) (camc314) - 403ec40 linter/eslint/no-multi-assign: Handle parenthesized declarator initializers (#25651) (camc314) - 6c9ba37 linter/jest/expect-expect: Detect assertions in nested function declarations (#25650) (camc314) - 285820e linter/no-large-snapshots: Precompile and document allowed snapshot matchers (#25611) (Mikhail Baev) - 1be1e20 linter/eslint/prefer-promise-reject-errors: Report on spread arguments (#25648) (Mikhail Baev) - a38f7b3 oxlint,oxfmt: Apply .gitignore only to walk targets, not explicitly named files (#25531) (leaysgur) - 509931b semantic: Classify global references per identifier (#25608) (camc314) - 0c68b7f estree: Emit `decorators` on `FormalParameterRest` (#25582) (camc314) - 1d22912 linter/plugins: Parse rule-less directive justifications (#25559) (camc314) - eaf80d8 linter/unicorn/prefer-node-protocol: Validate exact Node.js built-in specifiers (#25558) (camc314) - 57b94af linter/promise/no-multiple-resolved: Ignore unresolved globals (#25530) (Tushar Singh) - 80e64c2 linter/expect-expect: Validate assertion regex (#25504) (Mikhail Baev) - 7830604 linter/react/exhaustive-deps: Treat binary expressions as a stable dependency (#25508) (Hamody We) - 4df5835 linter: Allow capitalized built-in calls (#25516) (Boshen) - 9d49d27 react_compiler: Bail out instead of panicking on "Expected a node for all scopes" (#25506) (Boshen) - d43b562 linter/vitest/prefer-expect-assertions: Handle parameterized Vitest assertion suggestions (#25476) (camc314) ### ⚡ Performance - e8303d6 linter: Shrink rule serialization dispatch (#25818) (Boshen) - c84ede3 estree_tokens: Share JS token update entry point (#25826) (Boshen) - 35c8eb2 linter: Compute sort keys once with sort_by_cached_key (#25821) (Boshen) - f0121ed linter: Share config deserialization entry point (#25820) (Boshen) - 2dacf7a oxlint: Reduce debug formatting code size (#25797) (Boshen) - 9ed10b7 linter: Use unstable sorts for unique keys (#25778) (Boshen) - 63ff8ef linter: Outline diagnostic construction (#25762) (Boshen) - 2dd7446 diagnostics: Preallocate graphical output (#25721) (Boshen) - 9c8abab diagnostics: Batch graphical reports (#25710) (Boshen) - 8e9b95f linter: Use table for rule names (#25458) (Boshen) # Oxfmt ### 🚀 Features - c07fe7c oxfmt: Support `experimentalOperatorPosition` (#25643) (leaysgur) - 2adb8fb formatter: Implement `operatorPosition` option (#25581) (leaysgur) ### 🐛 Bug Fixes - 44231fb formatter: Fix comment and indent issues around unions (#25665) (leaysgur) - 2465e87 formatter: Keep comments in place when dropping `EmptyStatement` (#25730) (leaysgur) - 7e4f3b7 formatter: Print `JSDocUnknownType` (#25729) (leaysgur) - 5238d9e formatter: Keep nested awaited-paren member chain grouped in call arguments (#25646) (leaysgur) - a38f7b3 oxlint,oxfmt: Apply .gitignore only to walk targets, not explicitly named files (#25531) (leaysgur) - 5c0a5ff formatter_css: Fill own-line block comments inside space-separated values (#25578) (leaysgur) - 53debfa formatter_css: Keep trailing comma and indent after comment-preceded last map value (#25577) (leaysgur) - 1a83a8d oxfmt: Mirror printer line suppression and restore dedent-to-root (#25573) (leaysgur) - 7f350d1 formatter: Keep unary comment and print only needed parens (#25526) (leaysgur) - f405789 formatter_yaml: Consistent chomped eos behavior (#25523) (leaysgur) - a243311 formatter_yaml: Bump oxc-yaml-parser for contentless block scalar (#25519) (leaysgur) - 40d38a0 formatter_css: Keep multi value function args intact after leading comment (#25518) (leaysgur) ### 📚 Documentation - 223e785 oxfmt/conformance: Update notes on conformance (#25757) (Yuji Sugiura) - 673dc6d oxfmt: Move some docs from AGENTS.md to code comment (#25649) (leaysgur) - fed6681 oxfmt: Skip expanding overrides options (#25572) (leaysgur) Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
Enable React Compiler exhaustive effect dependency validation in Oxlint so the rule reports missing and extra dependencies instead of remaining inert.
Validated with
just ready.AI-assisted.