chore(deps): update dependency @eslint-react/eslint-plugin to v5 - #5187
Open
renovate-with-github-actions[bot] wants to merge 1 commit into
Open
renovate-with-github-actions[bot] wants to merge 1 commit into
renovate-with-github-actions[bot] wants to merge 1 commit into
Conversation
renovate-with-github-actions
Bot
force-pushed
the
renovate/eslint-react-eslint-plugin-5.x
branch
from
September 21, 2026 09:49
96d7e31 to
fbfd320
Compare
renovate-with-github-actions
Bot
force-pushed
the
renovate/eslint-react-eslint-plugin-5.x
branch
from
September 28, 2026 09:55
fbfd320 to
f4d5d49
Compare
This branch has not been deployed
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.
This PR contains the following updates:
4.2.3→5.20.8Release Notes
Rel1cx/eslint-react (@eslint-react/eslint-plugin)
v5.20.8🐞 Fixes
@eslint-react/core:isJsxLikenow recognizes JSX wrapped in TypeScript expressions (as,satisfies, type assertions, and non-null assertions) andawaitexpressions.@eslint-react/jsx:isFragmentElementnow requires the configuredjsxFragmentFactory, avoiding an implicit React fragment factory for custom JSX runtimes.🏗️ Internal
@eslint-react/jsx: exported theAttributeValuetype from the package entry point.@eslint-react/var: renamed theAssignmentTargettype toEnclosingAssignmentTargetand inlinedgetRequireExpressionArgumentsinto its sole consumer.Full Changelog: Rel1cx/eslint-react@v5.20.6...v5.20.8
v5.20.6Compare Source
🐞 Fixes
react-x/globals:for...in/for...ofloop targets without a declaration (e.g.for (globalValue of items)) are now collected as writes instead of being missed.react-x/immutability: destructuring assignment targets (e.g.({ a: props.x } = value)) andfor...in/for...ofloop targets without a declaration are now collected as mutations instead of being missed.react-x/purity: builtin alias resolution now preserves the property path, so aliases of impure builtins (const random = Math.random; random(),const { now } = Date; now(),window.Math.random()) are now detected instead of being missed; unknown-global roots are not followed, preventing speculative reports.react-x/refs: destructuring assignments, for-in/of loop targets, anddeleteoperations onref.currentare now classified as writes instead of being misreported as reads.react-x/refs: refs passed to constructor calls (new Widget(ref)) and tagged templates are now checked for render-time exposure, same as refs passed to plain functions.react-x/refs: themergeRefsexemption for passing refs now survives simple variable aliases (const combine = mergeRefs), resolved position-aware so reassigned aliases lose it again.react-x/use-memo: reassignments of outer variables through destructuring patterns andfor...in/for...ofloop targets insideuseMemocallbacks are now reported instead of being missed; property mutation targets remain exempt, matching the React Compiler'sStoreContextsemantics.🏗️ Internal
@eslint-react/var: splitresolveinto a value-basedresolveand a new origin-basedresolveOrigin, and updated the consumers inreact-web-apiandreact-xrules accordingly. (#1964)fumadocsto16.15.12,fumadocs-mdxto15.4.3,tsl-dxto0.13.6,eslint-plugin-de-morganto2.2.0, andeslint-plugin-regexpto3.3.1.Full Changelog: Rel1cx/eslint-react@v5.20.5...v5.20.6
v5.20.5Compare Source
🐞 Fixes
react-web-api/no-leaked-fetch: fixed a false positive where anabortcall nested in a callback within the cleanup function (e.g.setTimeout(() => ctrl.abort())) was not recognized, causing a spuriousexpectedAbortInCleanupreport; theabortlookup now finds the nearest enclosing setup/cleanup function instead of requiring the innermost one. (#1962)Full Changelog: Rel1cx/eslint-react@v5.20.4...v5.20.5
v5.20.4Compare Source
🐞 Fixes
react-web-api/no-leaked-event-listener: listeners that are only added inside the effect cleanup are now reported when the matchingremoveEventListeneris in the setup (reversed setup/cleanup pairing), since a listener attached on unmount is never removed. (#1961)🏗️ Internal
react-jsxandreact-web-apirules: unified rule code style and variable naming across the plugins. (#1960, #1961)Full Changelog: Rel1cx/eslint-react@v5.20.3...v5.20.4
v5.20.3Compare Source
🏗️ Internal
@eslint-react/ast: replacedgetIdentifierAtwith the newgetMemberChainhelper and movedgetInnermostCallto its sole consumer inreact-x/no-nested-component-definitions. (#1959)react-domrules: unified rule code style and variable naming across the plugin, and switchedno-find-dom-nodeto import-aware detection viacreateImportLookup. (#1958)Full Changelog: Rel1cx/eslint-react@v5.20.2...v5.20.3
v5.20.2Compare Source
🐞 Fixes
react-domrules: polymorphic components written as member expressions (e.g.<motion.div as="button">) were mistaken for host elements, so the polymorphic prop was ignored and these rules skipped them entirely; they are now resolved through the polymorphic prop and checked like the underlying DOM element. String values of the polymorphic prop are also normalized to lowercase, soas="BUTTON"is treated asbutton. Affected rules:react-dom/no-missing-button-typereact-dom/no-missing-iframe-sandboxreact-dom/no-unsafe-iframe-sandboxreact-dom/no-unsafe-target-blankreact-dom/no-void-elements-with-children🏗️ Internal
polymorphicPropNamesetting type is corrected fromstring | nulltostring— it could never benullat runtime — and the unreachablenullbranch in the JSX element resolver used by thereact-domrules is removed.Full Changelog: Rel1cx/eslint-react@v5.20.1...v5.20.2
v5.20.1Compare Source
🐞 Fixes
react-dom/no-flush-sync:flushSynccalls are now detected by trackingreact-domimports directly instead of matching by name, so aliased named imports (e.g.import { flushSync as fs } from "react-dom") and default/namespace member calls (e.g.ReactDOM.flushSync()) are reported, while local functions, object methods, and same-named APIs from other packages (e.g. pino'sdestination().flushSync()) are no longer misreported. (#1954, closes #1943)🏗️ Internal
react-dom/no-flush-syncandreact-dom/no-find-dom-node: API call checks now usecore.isAPICall;core.isJsxLikenow usesisCreateElementCall.eslintto10.11.0,eslint-plugin-jsdocto64.5.4,eslint-plugin-package-jsonto1.9.0,typedoc-plugin-markdownto4.13.1,@types/nodeto26.6.2,pnpmto12.5.1, and the dprint JSON plugin to0.24.0.New Contributors
Full Changelog: Rel1cx/eslint-react@v5.20.0...v5.20.1
v5.20.0Compare Source
✨ New
react-x/immutability: mutations onfor...ofiterator variables (e.g.for (const item of items) { item.done = true; }), including destructured iterator bindings, are now reported when the iterated collection resolves through its root identifier to a component's props, a state value, or a shallow copy of either, since the iterator variable is bound to each shared element of the original collection. Member-expression collections (for (const item of props.items)) are traced to their root;for...inloops and right sides without a root identifier are not traced. (#1953, closes #1764)🏗️ Internal
@types/nodeto26.6.1,tsl-dxto0.13.5,eslint-plugin-jsdocto64.5.2,lucide-reactto1.47.0, andpnpmto12.4.2.New Contributors
Full Changelog: Rel1cx/eslint-react@v5.19.1...v5.20.0
v5.19.1Compare Source
🐞 Fixes
react-x/immutability: the first parameter of a function is now classified as props only when the function is a confirmed component — one that returns JSX or calls hooks — so mutating the first parameter of a function that merely looks like a component (e.g. an event-handler factory whose returned function never renders and calls no hooks) is no longer reported. (#1952, closes #1951)🏗️ Internal
react-x/immutability: renamedMUTATING_METHODS/NAVIGATION_HOOKStoKNOWN_MUTATING_METHODS/KNOWN_MUTATING_HOOKSand added precise behavior boundary tests.react-x/globals: restructured internals (split intocollect,effects, andoriginsmodules) to match the in-progressfeat/environment-configimplementation; no behavior change.typescript-eslintto8.70.0,react/react-domto19.3.0,nextto16.3.5,viteto8.3.0,effectto3.22.2,fumadocsto16.15.10,eslint-plugin-jsdocto64.3.9,tailwind-mergeto3.7.0,ansisto4.4.0,nxto23.2.1,eslint-plugin-react-refreshto0.5.6,eslint-plugin-package-jsonto1.8.1,@types/nodeto26.5.1,@types/reactto19.3.0,@types/react-domto19.3.0, andpnpmto12.4.1.Full Changelog: Rel1cx/eslint-react@v5.19.0...v5.19.1
v5.19.0Compare Source
✨ New
react-x/immutability: direct mutations of props and state are now reported — member assignments, updates, deletions, and mutating method calls are flagged when the mutated value resolves (through variable-declarator aliases) to a component's props, auseState/useReducerstate value, or a custom hook matching theadditionalStateHookssetting, independent of whether the mutation happens inside a function that reaches a freeze sink. (#1948, closes #1941)react-x/immutability: added shallow-copy awareness — nested mutations through an object/array literal built by spreading a props or state value (e.g.const copy = { ...state }/const copy = [...state]) are reported, since the nested values are still shared with the original; writes to the copy's own top-level slots are not reported. (#1948)Full Changelog: Rel1cx/eslint-react@v5.18.10...v5.19.0
v5.18.10Compare Source
🐞 Fixes
disable-*preset configs inreact-xandreact-rscnow also register the same plugin object as the package's default export, so ESLint no longer reports a "Cannot redefine plugin" error when combining them with a manually registered plugin. (follow-up to #1947, see #1946)🏗️ Internal
fumadocs-twoslashfromserverExternalPackagesto fix a prerender error.Full Changelog: Rel1cx/eslint-react@v5.18.9...v5.18.10
v5.18.9Compare Source
🏗️ Internal
eslintto10.10.0,vitestto5.0.0,tsdownto0.23.0,nxto23.2.0,dprintto0.57.4,@types/react-domto19.2.7,@eslint/compatto2.1.1, and@nubjs/nubto0.8.3.Full Changelog: Rel1cx/eslint-react@v5.18.8...v5.18.9
v5.18.8Compare Source
🐞 Fixes
recommended,strict, etc.) now register the same plugin object as the package's default export, so ESLint no longer reports a "Cannot redefine plugin" error when the plugin is registered manually and a preset is extended at the same time. (#1947, closes #1946)🏗️ Internal
import-integrity-lintplugin and patched its path prefix check so sibling directories likeexamples/preactandexamples/preact-compatno longer collide.fast-urito^3.1.5to fix CVE-2026-18446 (GHSA-7p8r-x3mc-p8w7).@effect/language-serviceto0.87.2,@effect/platformto0.97.1,@effect/platform-nodeto0.108.1,@nubjs/nubto0.8.2,@types/nodeto26.4.1,dprintto0.57.0, andlucide-reactto1.39.0.Full Changelog: Rel1cx/eslint-react@v5.18.7...v5.18.8
v5.18.7Compare Source
🐞 Fixes
react-x/set-state-in-effect: no longer misattributes render-phasesetStatecalls to effects when the state updater is passed through a prop function. (#1945)🏗️ Internal
typescript-eslintto8.69.0,eslintto10.9.1,vitestto4.1.11,@types/nodeto26.4.0,@types/react-domto19.2.5,eslint-plugin-package-jsonto1.8.0,import-integrity-lintto1.3.0,nxto23.1.3,publintto0.3.24,typedoc-plugin-markdownto4.13.0, andpnpmto11.25.0.New Contributors
Full Changelog: Rel1cx/eslint-react@v5.18.6...v5.18.7
v5.18.6Compare Source
🏗️ Internal
@eslint-react/core: addedcreateElementhelper APIs (getCreateElementChildrenArguments,getCreateElementProp,getCreateElementPropsObject,getCreateElementTypeArgument,isCreateElementChildrenArgument, andisInsideCreateElementProps) and reused them inreact-x/no-children-prop-with-children,react-x/no-children-prop,react-x/no-array-index-key, andreact-x/no-nested-component-definitions. (#1937)Full Changelog: Rel1cx/eslint-react@v5.18.5...v5.18.6
v5.18.5Compare Source
📝 Documentation
react-jsx/no-leaked-dollar: corrected the full rule name in the documentation from@eslint-react/no-leaked-dollarto@eslint-react/jsx-no-leaked-dollar. (#1935)🏗️ Internal
@eslint-react/core: simplified function component detection logic.@eslint-react/core: added missing test cases for API exports, nested HOC init paths, named callback exclusion, displayName collection, indirect cleanup callbacks, and customcreateElementheuristics.typescript-eslintto8.67.0,eslint-plugin-package-jsonto1.7.1, andglobalsto17.10.0.Full Changelog: Rel1cx/eslint-react@v5.18.4...v5.18.5
v5.18.4Compare Source
🐞 Fixes
react-x/no-class-component: reports are now located on the class name (falling back to theclasstoken for anonymous classes) instead of the entire class declaration. (#1934, closes #1932)🏗️ Internal
eslintto10.8.1,@types/nodeto26.2.0,eslint-plugin-package-jsonto1.7.0,eslint-plugin-react-refreshto0.5.4,fumadocsto16.14.3,fumadocs-mdxto15.2.3,lucide-reactto1.31.0,postcssto8.5.26, andpnpmto11.21.0.New Contributors
Full Changelog: Rel1cx/eslint-react@v5.18.3...v5.18.4
v5.18.3Compare Source
🐞 Fixes
react-x/no-nested-component-definitions: narrowed thewith*HOC detection in the fallback name resolution to well-known wrappers only (react-router v5'swithRouter, Formik'swithFormik, and recompose'swithProps,withState,withHandlers, andwithLifecycle) — custom HOCs following thewith*naming convention are no longer treated as component wrappers. (#1929)🏗️ Internal
typescript-eslintto8.66.0andnextto16.3.0.Full Changelog: Rel1cx/eslint-react@v5.18.2...v5.18.3
v5.18.2Compare Source
🐞 Fixes
react-x/no-nested-component-definitions: fixed a regression where nested components wrapped inuseCallback(e.g.const C = useCallback(() => <div />, []);) were no longer reported — the rule now resolves the component name through well-known component wrappers (memo,forwardRef,useCallback,observer, react-redux'sconnect, Relay'screate*Containerhelpers, Apollo'sgraphql, andwith*HOCs, including curried forms likeconnect(...)(Component)) up to the enclosing variable declarator, and no longer misreports array method callbacks (flatMap,forEach,reduce, etc.) in list rendering patterns. (#1928, closes #1927)🏗️ Internal
effectto3.22.1,eslint-plugin-jsdocto63.3.3,textlintto15.8.0,js-yamlto4.3.1,axiosto1.19.0,nxto23.1.1,viteto8.2.0,@vitejs/plugin-reactto6.0.5,fumadocsto16.14.0,fumadocs-mdxto15.2.2,preactto10.29.8,globalsto17.9.0,lucide-reactto1.28.0,@types/reactto19.2.18,@types/react-domto19.2.4, andpnpmto11.20.0.Full Changelog: Rel1cx/eslint-react@v5.18.1...v5.18.2
v5.18.1Compare Source
🐞 Fixes
disable-*preset configs inreact-xandreact-rscnow also register the same plugin object as the package's default export, so ESLint no longer reports a "Cannot redefine plugin" error when combining them with a manually registered plugin. (follow-up to #1947, see #1946)🏗️ Internal
fumadocs-twoslashfromserverExternalPackagesto fix a prerender error.Full Changelog: Rel1cx/eslint-react@v5.18.9...v5.18.10
v5.18.0Compare Source
✨ New
@eslint-react/core: addedisUseRefLikeCalland a newadditionalRefHookssetting for declaring custom ref-creating hooks; the following rules now recognize them: (#1922, closes #1904)react-x/refsreact-x/immutabilityreact-x/set-state-in-effectreact-naming-convention/ref-namereact-debug/is-from-ref📝 Documentation
🏗️ Internal
@local/testkit: simplified internals.react-x: extracted a sharedcreateImplicitPropListenerhelper used byno-implicit-children,no-implicit-key, andno-implicit-ref. (#1923)tsdownto0.22.13,typescript-eslintto8.65.0,eslint-plugin-jsdocto63.2.0,import-integrity-lintto1.2.0,reactto19.2.8,nextto16.2.11, andpostcssto8.5.21.vite-nodewithnubfor running workspace scripts. (#1919)@eslint-react/astand@eslint-react/core.Full Changelog: Rel1cx/eslint-react@v5.17.3...v5.18.0
v5.17.3Compare Source
🏗️ Internal
@eslint-react/ast: reworked theExtractAPI — replacedgetRootIdentifierwith the position-basedgetIdentifierAt, renamedgetStaticPropertyNametogetPropertyName(with amin/maxeffort option), and addedfindPropertyfor finding properties in nested object expressions; addedCheck.isConditionalfor matching conditional expressions and control flow statements. (#1918)eslint-plugin-jsdocto63.1.0,expect-typeto1.4.0,@preact/preset-viteto2.10.6, andpnpmto11.15.0.Full Changelog: Rel1cx/eslint-react@v5.17.2...v5.17.3
v5.17.2Compare Source
📝 Documentation
@eslint-react/kit: added a README with quick start and API overview.🏗️ Internal
@eslint-react/core: migratedJsxDetectionHintand related JSX detection helpers from@eslint-react/jsx. (#1913)@eslint-react/jsx: consolidated helpers into focusedattribute,children,element, andtextmodules. (#1914)@eslint-react/var: renamedcomputeObjectTypetoresolveObjectType.@local/testkit: extracted shared test helpers into a new local package. (#1915)tsdownto0.22.9,eslint-plugin-jsdocto63.0.14, andpnpmto11.13.1.Full Changelog: Rel1cx/eslint-react@v5.17.1...v5.17.2
v5.17.1Compare Source
🏗️ Internal
react-jsx/no-key-after-spread: reworked the attribute scan to a pipeline style usingdropWhileandnotfrom@local/eff,Check.isfrom@eslint-react/ast, and the newisAttributehelper from@eslint-react/jsx. (#1912)@eslint-react/jsx: addedisAttributefor matching JSX attributes by name.@local/eff: addeddropWhileandtakeWhile.tsdownto0.22.8,tsl-dxto0.13.3,import-integrity-lintto1.1.4,fumadocsto16.11.5, andfumadocs-mdxto15.2.0.Full Changelog: Rel1cx/eslint-react@v5.17.0...v5.17.1
v5.17.0Compare Source
🐞 Fixes
react-jsx/no-leaked-dollar: the intentional-$exemption (e.g.<div>${price}</div>) is no longer defeated by surrounding whitespace or empty siblings — a lone$before a single expression is now allowed whenever all other siblings are non-substantive. (#1911)react-jsx/no-leaked-semicolon: consecutive leaked semicolons (e.g.;;) at the start of a JSX text node are now detected. (#1911)📝 Documentation
react-x/no-unnecessary-use-prefix: reorganized the rule examples.🏗️ Internal
react-jsx: extracted the sharedfind-create-element-children-propandremove-jsx-attributerule helpers, removed deadLiteralvisitors fromno-comment-textnodesandno-leaked-semicolon, simplified theno-key-after-spreadattribute scan, and hoistedno-useless-fragmentdetection and fix helpers to module level. (#1911)@local/eff: synced theFunctionmodule with effect and added missing@categorytags.Full Changelog: Rel1cx/eslint-react@v5.16.1...v5.17.0
v5.16.1Compare Source
🐞 Fixes
react-jsx/no-children-prop:React.createElementcalls whose props argument is wrapped in a TypeScript type assertion (e.g.{ children: "x" } as Props) are now reported; computed property keys written as template literals (e.g.{ [children]: "x" }) are now recognized as thechildrenprop; fixed a false positive where a computed identifier key in acreateElementprops object (e.g.{ [propName]: "Children" }) was treated as the staticchildrenprop; the suggestion fix now escapes JSX-sensitive characters (<,>,{,},&) when moving a stringchildrenprop value into element content. (#1910)react-jsx/no-children-prop-with-children: samecreateElementedge-case fixes asno-children-prop. (#1910)react-jsx/no-useless-fragment:allowExpressions: falsenow only flags fragments with a single expression child, matching the option's documented behavior, instead of flagging any fragment inside a JSX element; fragments with spread attributes (e.g.<Fragment {...props}>) are no longer auto-fixed; the auto-fixer now removes leading indentation when collapsing whitespace-only fragments. (#1910)react-jsx/no-leaked-dollar:$character references (&#​36;,$) are no longer treated as leaked dollar signs; only a literal$in the source is reported. (#1910)react-jsx/no-leaked-semicolon: leaked semicolons followed by spaces or tabs before a newline, including CRLF line endings, are now detected. (#1910)react-x/immutability: addeduseHistoryto known navigation hooks, so navigation methods such as.push()are not treated as in-place mutations inside frozen callbacks.🏗️ Internal
@eslint-react/ast: addedExtract.getStaticPropertyNamefor resolving static property names from object properties. (#1910)Full Changelog: Rel1cx/eslint-react@v5.16.0...v5.16.1
v5.16.0Compare Source
✨ New
@eslint-react/core: added support for hook calls written as tagged template literals. (#1909)@eslint-react/jsx:findAttributenow resolves nested spread identifiers and nested object expression spreads. (#1908)🏗️ Internal
Full Changelog: Rel1cx/eslint-react@v5.15.0...v5.16.0
v5.15.0Compare Source
📝 Documentation
🏗️ Internal
typescript-eslintto8.64.0,nxto23.1.0,eslint-plugin-package-jsonto1.6.0, andpnpmto11.13.0.strictBooleanExpressionsin TSL and synchronized sample rule configurations. (#1907)pnpm/action-setupinstead of installing pnpm globally via npm.Full Changelog: Rel1cx/eslint-react@v5.14.10...v5.15.0
v5.14.10Compare Source
🐞 Fixes
@eslint-react/ast:Extract.getCalleeNamenow returnsnullfor computed member expressions (e.g.obj[foo](),obj["foo"](),obj[foo]()) instead of the property name, so callers don't treat dynamically chosen methods as static method names. (#1906)🏗️ Internal
Extract.getCalleeName.Full Changelog: Rel1cx/eslint-react@v5.14.9...v5.14.10
v5.14.9Compare Source
🐞 Fixes
@eslint-react/ast: removedExtract.getPropertyNameand addedExtract.getCalleeNamefor simpler callee name resolution. (#1905)obj["foo"]()is no longer resolved to"foo"). This avoids relying on the runtime value of computed keys and aligns callee matching across the codebase. Affected rules:react-dom/no-dangerously-set-innerhtmlreact-dom/no-find-dom-nodereact-dom/no-flush-syncreact-web-api/no-leaked-event-listenerreact-web-api/no-leaked-fetchreact-x/globalsreact-x/immutabilitycore.isJsxLike: no longer treatsReact['createElement']calls as JSX-like, since the callee is accessed through a computed member expression.🏗️ Internal
core,react-dom,react-web-api, andreact-xrules usingExtract.getCalleeName.@effect/platform,effect,fumadocs-core,fumadocs-mdx,fumadocs-ui,postcss,pnpm, andtsdown.Full Changelog: Rel1cx/eslint-react@v5.14.8...v5.14.9
v5.14.8Compare Source
📝 Documentation
react-x: refreshed the React Compiler diff reports. (#1903)🏗️ Internal
react-x: moved the purity and refs resolvers intolib.ts. (#1902)tsdown,postcss, andfumadocs.Full Changelog: Rel1cx/eslint-react@v5.14.7...v5.14.8
v5.14.7Compare Source
🐞 Fixes
react-x/immutability: ignore navigation hook methods (e.g.useNavigate,useNavigation) as mutations. (#1901)🏗️ Internal
pnpmlockfile.Full Changelog: Rel1cx/eslint-react@v5.14.6...v5.14.7
v5.14.6Compare Source
🐞 Fixes
react-x/immutability: ignoreuseRouter()navigation methods (e.g..push()) as mutations when they appear inside frozen callbacks; aliases created through variable declarators are also recognized. (#1898)🏗️ Internal
Check.isExpressionto@eslint-react/astalong with unit tests.eslint,nx,dompurify, andpnpm.react-x/immutabilityanalysis helpers by sharing initializer provenance checks foruseRef()anduseRouter()and using AST parent traversal for function-boundary detection.Full Changelog: Rel1cx/eslint-react@v5.14.5...v5.14.6
v5.14.5Compare Source
📝 Documentation
🏗️ Internal
check:configsandcheck:docsscripts into a singlecheck:rulesscript.Full Changelog: Rel1cx/eslint-react@v5.14.4...v5.14.5
v5.14.2Compare Source
🐞 Fixes
react-x/globals: added detection for global writes through destructuring assignments and property deletion withdelete. (#1896)react-x/globals: propagated render-time global mutation effects through directly called helpers and stable local aliases. (#1896)🏗️ Internal
react-debugcomponent and source detection,react-naming-conventionnaming rules, andreact-x/immutabilityReact Compiler fixtures.Full Changelog: Rel1cx/eslint-react@v5.14.1...v5.14.2
v5.14.1Compare Source
🐞 Fixes
@eslint-react/ast:Extract.getCalleeNamenow returnsnullfor computed member expressions (e.g.obj[foo](),obj["foo"](),obj[foo]()) instead of the property name, so callers don't treat dynamically chosen methods as static method names. (#1906)🏗️ Internal
Extract.getCalleeName.Full Changelog: Rel1cx/eslint-react@v5.14.9...v5.14.10
v5.14.0Compare Source
✨ New
react-x/refs: added render-reachability support for function declarations, IIFEs, synchronous array callbacks, and render-time callbacks passed touseMemoanduseReducer. (#1895)react-x/refs: added lazy-initialization support for explicitundefinedguards and for null guards enclosing additional nested conditions. (#1895)🐞 Fixes
react-x/refs: reworked render-time call analysis as an unbounded fixed-point propagation, removing the previous 50-iteration cap. (#1895)react-x/refs: tightened inverted lazy-initialization handling so the non-null branch must unconditionally return or throw. (#1895)react-x/refs: stopped treating!ref.currentas a null guard because initialized refs may contain falsy values. (#1895)🏗️ Internal
react-x/refs: refactored ref aliases, function bindings, JSX refs, and duplicate initialization tracking to use scoped ESLint variable identities and position-aware binding events instead of file-wide identifier names. (#1895)react-x/immutabilityand documented them in the spec diff report.@effect/language-serviceto^0.86.5.preactto^10.29.7.viteto^8.1.4in example apps.dprintJSON plugin to^0.23.0.Full Changelog: Rel1cx/eslint-react@v5.13.2...v5.14.0
v5.13.2Compare Source
🐞 Fixes
react-x/immutability: fixed false positive onref.currentwrite insideuseEffect. (#1894)🏗️ Internal
@types/nodeto^26.1.1.preactto^10.29.6.tsdownto^0.22.4.Full Changelog: Rel1cx/eslint-react@v5.13.1...v5.13.2
v5.13.1Compare Source
🐞 Fixes
react-x/refs: aligned error message wording forreadDuringRender,writeDuringRender, andrefPassedToFunctionwith the React Compiler specification.Full Changelog: Rel1cx/eslint-react@v5.13.0...v5.13.1
v5.13.0Compare Source
✨ New
react-x/refsnow detects nested property writes on a ref's value (e.g.ref.current.inner = value), which are now reported aswriteDuringRenderinstead of being misclassified as a read.react-x/refsnow tracks functions bound to (and called through) simple object-member-expression targets (e.g.object.foo = () => ref.current; object.foo();), closing a gap in the render-reachability analysis that previously only covered plain variable bindings.react-x/refsnow detectsref.currentaccesses inside the lazy initializer function passed directly asuseState's first argument, since it runs synchronously during the initial render unlike other hook-callback arguments.react-x/refsnow exempts calls to a function namedrender(e.g.props.render(ref), a common render-prop pattern) from therefPassedToFunctiondiagnostic, alongside the existingmergeRefs/hook exemptions.🐞 Fixes
react-x/refslazy-init guard-block detection so it is direction-aware: inside the branch of anif (ref.current == null)-style guard that is guaranteed to seeref.currentas null, only a direct write is treated as the (single) valid initialization; reads or values passed to a function there are still reported.🏗️ Internal
react-x/refsinternals, replacingisRefCurrentNullCheckwithgetRefCurrentNullCheckBranchinlib.ts.fumadocspackages andpreact.react-debug/jsxrule.Full Changelog: Rel1cx/eslint-react@v5.12.2...v5.13.0
v5.12.1Compare Source
📝 Documentation
react-x/immutabilityrule description in docs.🏗️ Internal
Full Changelog: Rel1cx/eslint-react@v5.12.0...v5.12.1
v5.12.0Compare Source
✨ New
react-x/immutabilityto align with the React Compiler'sValidateNoFreezingKnownMutableFunctionsvalidation pass: it now detects functions that (transitively) mutate a captured local variable and reports them when passed as a JSX prop, passed as a hook argument, or returned from a hook. (#1891)📝 Documentation
🏗️ Internal
typescript-eslintpackages to^8.63.0.eslint-plugin-perfectionistto^5.10.0.Full Changelog: Rel1cx/eslint-react@v5.11.3...v5.12.0
v5.11.3Compare Source
🐞 Fixes
FunctionComponentDetectionHint.DoNotIncludeFunctionDefinedAsClassPropertychecking for objectPropertynodes instead of classPropertyDefinitionnodes, so functions defined as class fields are now correctly excluded when the hint is set. (#1890)🏗️ Internal
MessageIDtypes.eslint-plugin-jsdoc,typedoc,undiciandpnpm.Full Changelog: Rel1cx/eslint-react@v5.11.2...v5.11.3
v5.11.2Compare Source
📝 Documentation
react-x/no-children-count,react-x/no-children-for-each,react-x/no-children-map,react-x/no-children-only,react-x/no-children-to-array, andreact-x/no-clone-element) with clearer guidance on why child introspection creates fragile component coupling and links to Astryx'sno-react-introspectionrule. (#1889)THIRD-PARTY-LICENSEfile.Full Changelog: Rel1cx/eslint-react@v5.11.0...v5.11.2
v5.11.0Compare Source
✨ New
react-x/refsnow detects ref mutations/reads inside helper functions that are called (directly, or through a simple variable alias) during render, closing a gap where any nested function was previously treated as a safe boundary regardless of whether it was actually invoked during render.react-x/refsnow reports a second guarded ref initialization: only a singleif (ref.current == null) { ref.current = ... }guarded initialization is allowed per ref per component/hook, and a second guarded write (in the same or a differentifblock) is reported asduplicateRefInit.react-x/refsnow supports.currentaccesses whose base is a member expression that looks like a ref (e.g.props.ref.current), not just a plain identifier.🏗️ Internal
packages/ast/src/check.ts.@effect/language-serviceto^0.86.4andpreactto^10.29.4.react-x/static-componentsinternals without changing behavior:findVariableForIdentifiernow delegates to@typescript-eslint/utils/ast-utils'sfindVariableinstead of a hand-rolled scope-chain walk,resolveDynamicValuewas split intofindDynamicCreationSiteandfindReassignmentCreationSite, and render-boundary/JSX-candidate handling was extracted into dedicated helpers.Check.isDirectiveandCheck.isIdentifierin@eslint-react/ast: both now take the node as the first argument and an optionalnameas the second, replacing the previous curried(name) => (node) => booleanshape. RemovedCheck.isStringLiteral; usets-pattern'sisMatchingor an inline type guard instead.Full Changelog: Rel1cx/eslint-react@v5.10.4...v5.11.0
v5.10.4Compare Source
🐞 Fixes
react-x/no-misused-capture-owner-stacknot recognizingprocess.env.NODE_ENVchecks wrapped in TypeScript type expressions such as(process.env as any).NODE_ENV. (#1813)Extract.getFullyQualifiedNameto unwrapTSAsExpression,TSTypeAssertion,TSNonNullExpression, andChainExpressionbefore resolving names. This improves name resolution for rules that identify React APIs or collect component/hook names through type-wrapped expressions.Full Changelog: Rel1cx/eslint-react@v5.10.3...v5.10.4
v5.10.3Compare Source
🏗️ Internal
typescript-eslintpackages to^8.62.1.@effect/language-serviceto^0.86.3.undiciandundici-typesto^8.6.0.@eslint-react/eslint-pluginpackage description.Full Changelog: Rel1cx/eslint-react@v5.10.2...v5.10.3
v5.10.2Compare Source
🐞 Fixes
<div {...{ [key]: value }} />) as static prop names. The actual property name is the runtime value of the variable; computed string literal keys are still recognized. Affected rules:react-x/no-missing-keyreact-jsx/no-children-prop-with-childrenreact-jsx/no-children-propreact-jsx/no-useless-fragmentreact-dom/no-dangerously-set-innerhtml-with-childrenreact-dom/no-dangerously-set-innerhtmlreact-dom/no-missing-button-typereact-dom/no-missing-iframe-sandboxreact-dom/no-string-style-propreact-dom/no-unsafe-iframe-sandboxreact-dom/no-unsafe-target-blankreact-dom/no-void-elements-with-childrenreact-web-api/no-leaked-event-listenerreact-web-api/no-leaked-fetchreact-x/unsupported-syntaxto no longer report IIFEs in JSX. This makes the rule consistent with the upstreamreact-hooks/unsupported-syntaxand removes theiifemessage.✨ New
react-x/unsupported-syntaxnow detectsevalcalls viaglobalThis.eval,globalThis["eval"], and type assertions like(globalThis as any).eval.🏗️ Internal
resolveparameter toExtract.getPropertyNameso callers can control how identifier and private identifier property names are resolved.Extract.getPropertyName.Full Changelog: Rel1cx/eslint-react@v5.10.1...v5.10.2
v5.10.1Compare Source
🐞 Fixes
static-componentsrule todisable-conflict-eslint-plugin-react-hooks, closes #1884.📝 Documentation
noCircularEffectrecipe sample to use@eslint-react/kitcollectors andsimpleTraverse, and updated the recipe overview accordingly.🏗️ Internal
typescript-eslint,@types/node,vite, andtailwindcss.fumadocs,lucide-react, andpostcssin the website.Full Changelog: Rel1cx/eslint-react@v5.10.0...v5.10.1
v5.10.0Compare Source
📝 Documentation
react-x/no-unused-state.🏗️ Internal
eslintto^10.6.0.js-yamlworkspace override to^4.3.0.Full Changelog: Rel1cx/eslint-react@v5.9.5...v5.10.0
v5.9.5Compare Source
🐞 Fixes
Compare.isEqualnow recognizes structurally identicalCallExpressionnodes. This fixes false positives in the following rules when the compared target (event target, controller, or observed element) is derived from a function call such aswindow.matchMedia('…')orgetEl():react-web-api/no-leaked-event-listenerreact-web-api/no-leaked-fetchreact-web-api/no-leaked-resize-observerreact-web-api/no-leaked-intersection-observerFull Changelog: Rel1cx/eslint-react@v5.9.4...v5.9.5
v5.9.4Compare Source
🐞 Fixes
obj["foo"]()):react-x/no-array-index-keyreact-x/no-duplicate-keyreact-x/no-unnecessary-use-prefixreact-x/set-state-in-effectConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.