You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#215915cf592 Thanks @ingvaldlorentzen! - Fixed already-published version detection with npm 12, which always wraps successful npm info --json output in an array. The unwrapped output made changeset publish treat every package as unpublished and fail attempting to republish existing versions.
react-x/immutability: reassigning a binding that resolves to component props or state (value = value + "!", count++, including destructuring and for...of rebinding forms) is now reported as a direct mutation, matching upstream react-hooks/immutability; rebinding iterator or shallow-copy bindings remains allowed. (#1979)
react-x/set-state-in-effect: ref reads traced through intermediate local computations (ex: const dv = visible - prevVisible.current) are now recognized as ref-derived values, and a preceding early-return guard whose test is ref-derived (ex: if (dv === 0) return;) now exempts the setState calls that follow it — previously only setState nested directly inside a ref-gated if/conditional was exempted. Aligns with react-hooks 7.1.1. (#1979)
📝 Documentation
react-x/no-unstable-context-value: documented the React 19 <Context> provider detection heuristic and its name-based limitations. (#1979)
Updated the README badges to reference eslint-plugin-react-x.
react-x/static-components: dynamic creation-site tracing now follows both sides of logical expressions (ex: const C = DefaultComponent || (() => <div />)) and the last element of sequence expressions (ex: const C = (setup(), () => <div />)), in initializers and reassignments alike. (#1975)
🐞 Fixes
react-x/static-components: parameters of nested non-component functions (ex: function render(Comp) { return <Comp /> }) are no longer mistaken for render-created components; definitions are judged by definition type instead of AST node type. (#1975)
react-x/static-components: createdHere is now reported once per creation site instead of once per JSX usage; the default diagnostic remains per usage. (#1975)
🏗️ Internal
react-x/static-components: restructured the rule to the fact-based implementation pattern — collect.ts (usage facts), origins.ts (creation-site resolution), and effects.ts (effect inference) are now separate modules, with reporting centralized in Program:exit; added 14 boundary test cases covering creation-site resolution, render boundaries, and per-usage reporting. (#1975)
Renamed lib.ts to helpers.ts in the fact-based react-x rules (globals, immutability, refs). (#1976)
Bumped @effect/language-service to 0.87.3 and oxlint to 1.86.0.
react-x/use-state: directly returning the useState result (ex: return React.useState()) is now allowed regardless of the rule's options, matching the exemption in the original react/hook-use-state rule. Covers explicit, implicit (arrow function), and type-asserted returns; lazy initialization checks still apply. (#1974, closes #1963)
📝 Documentation
Added a note about eslint being an optional peer dependency to the READMEs and the website's getting-started guides.
Simplified the @eslint-react/kit README to point to the full documentation.
react-x/purity: reverted the v5.21.2 exemption for impure calls in useRef initializer arguments (ex: useRef(document.createElement("div"))); such calls are reported again. (#1972)
react-x/no-unnecessary-use-prefix: hooks that call other hooks only within nested callbacks, functions named exactly use, and hooks defined in test mock module registrations are no longer reported. (#1971)
react-x/no-unused-class-component-members: methods invoked by host environments through refs (React Native's NativeMethods) are no longer reported as unused. (#1971)
react-x/purity: async function components in modules without a use client directive and impure calls in useRef initializer arguments are no longer reported. (#1971)
react-x/set-state-in-effect: local variables initialized from nested member expressions rooted at a ref are now recognized as ref-derived values and no longer reported. (#1971)
🏗️ Internal
@eslint-react/ast: predefined and exported common node-type helpers in the Check namespace and migrated call sites to them.
📝 Documentation
Website rule docs no longer include the per-rule ## Versions section; a rule's changelog can be viewed directly via the Rule Changelog link under the ## Resources section of each rule doc.
Fixed missed reports where a timer, fetch controller, or observer created in one effect was treated as cleaned up because an unrelated cleanup in another effect referenced a different variable with the same name; identifier matching now resolves both sides to their variables by scope instead of comparing names only. (#1969) Affected rules:
react-web-api/no-leaked-timeout
react-web-api/no-leaked-interval
react-web-api/no-leaked-fetch
react-web-api/no-leaked-resize-observer
react-web-api/no-leaked-intersection-observer
🏗️ Internal
Simplified the react-web-api leaked-resource rules by replacing manual function-context stack tracking with Traverse.findParent ancestor lookup, and added boundary tests covering deeply nested callbacks, cross-effect pairing, and wrapped or referenced setup callbacks. (#1969) Affected rules:
react-web-api/no-leaked-timeout
react-web-api/no-leaked-interval
react-web-api/no-leaked-fetch
react-web-api/no-leaked-event-listener
react-web-api/no-leaked-resize-observer
react-web-api/no-leaked-intersection-observer
@eslint-react/var: isAssignmentTargetEqual no longer short-circuits same-name identifiers through structural equality; identifier pairs are compared with scope-aware value equality. (#1969)
react-x/no-unused-class-component-members: removed the manual class and method context stacks; the enclosing class and method are now resolved at the hit point with Traverse.findParent ancestor lookup, and the per-class member definition/usage maps are initialized lazily. (#1970)
The plugins can now be used with Oxlint without an eslint installation: eslint is now an optional peer dependency across all published packages, and the rule utilities no longer eagerly load the eslint package at import time. (#1965)
🏗️ Internal
@eslint-react/core: removed the unused isAssignmentToThisState helper, and simplified the react-x class-component rules (no-access-state-in-setstate, no-class-component, no-direct-mutation-state, no-set-state-in-*) accordingly.
@eslint-react/eslint: added a local getConstrainedTypeAtLocation helper (adapted from @typescript-eslint/type-utils) so consumers don't need to load @typescript-eslint/type-utils, whose entry point eagerly loads the eslint package. (#1965)
Bumped typescript-eslint to 8.70.1, fumadocs to 16.15.14, fumadocs-mdx to 15.4.5, vite to 8.3.1, and other dependencies.
New Contributors
Dom Porada (@porada) made their first contribution in #1965.
@eslint-react/core: isJsxLike now recognizes JSX wrapped in TypeScript expressions (as, satisfies, type assertions, and non-null assertions) and await expressions.
@eslint-react/jsx: isFragmentElement now requires the configured jsxFragmentFactory, avoiding an implicit React fragment factory for custom JSX runtimes.
🏗️ Internal
@eslint-react/jsx: exported the AttributeValue type from the package entry point.
@eslint-react/var: renamed the AssignmentTarget type to EnclosingAssignmentTarget and inlined getRequireExpressionArguments into its sole consumer.
react-x/globals: for...in/for...of loop 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)) and for...in/for...of loop 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, and delete operations on ref.current are 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: the mergeRefs exemption 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 and for...in/for...of loop targets inside useMemo callbacks are now reported instead of being missed; property mutation targets remain exempt, matching the React Compiler's StoreContext semantics.
🏗️ Internal
@eslint-react/var: split resolve into a value-based resolve and a new origin-based resolveOrigin, and updated the consumers in react-web-api and react-x rules accordingly. (#1964)
Bumped fumadocs to 16.15.12, fumadocs-mdx to 15.4.3, tsl-dx to 0.13.6, eslint-plugin-de-morgan to 2.2.0, and eslint-plugin-regexp to 3.3.1.
react-web-api/no-leaked-fetch: fixed a false positive where an abort call nested in a callback within the cleanup function (e.g. setTimeout(() => ctrl.abort())) was not recognized, causing a spurious expectedAbortInCleanup report; the abort lookup now finds the nearest enclosing setup/cleanup function instead of requiring the innermost one. (#1962)
react-web-api/no-leaked-event-listener: listeners that are only added inside the effect cleanup are now reported when the matching removeEventListener is in the setup (reversed setup/cleanup pairing), since a listener attached on unmount is never removed. (#1961)
🏗️ Internal
react-jsx and react-web-api rules: unified rule code style and variable naming across the plugins. (#1960, #1961)
@eslint-react/ast: replaced getIdentifierAt with the new getMemberChain helper and moved getInnermostCall to its sole consumer in react-x/no-nested-component-definitions. (#1959)
react-dom rules: unified rule code style and variable naming across the plugin, and switched no-find-dom-node to import-aware detection via createImportLookup. (#1958)
Fixed false negatives in the JSX element resolver used by the react-dom rules: 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, so as="BUTTON" is treated as button. Affected rules:
react-dom/no-missing-button-type
react-dom/no-missing-iframe-sandbox
react-dom/no-unsafe-iframe-sandbox
react-dom/no-unsafe-target-blank
react-dom/no-void-elements-with-children
🏗️ Internal
The normalized polymorphicPropName setting type is corrected from string | null to string — it could never be null at runtime — and the unreachable null branch in the JSX element resolver used by the react-dom rules is removed.
react-dom/no-flush-sync: flushSync calls are now detected by tracking react-dom imports 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's destination().flushSync()) are no longer misreported. (#1954, closes #1943)
🏗️ Internal
react-dom/no-flush-sync and react-dom/no-find-dom-node: API call checks now use core.isAPICall; core.isJsxLike now uses isCreateElementCall.
Added Node types reference to all package tsl/tsdown configs.
Bumped eslint to 10.11.0, eslint-plugin-jsdoc to 64.5.4, eslint-plugin-package-json to 1.9.0, typedoc-plugin-markdown to 4.13.1, @types/node to 26.6.2, pnpm to 12.5.1, and the dprint JSON plugin to 0.24.0.
react-x/immutability: mutations on for...of iterator 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...in loops and right sides without a root identifier are not traced. (#1953, closes #1764)
🏗️ Internal
Bumped @types/node to 26.6.1, tsl-dx to 0.13.5, eslint-plugin-jsdoc to 64.5.2, lucide-react to 1.47.0, and pnpm to 12.4.2.
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: renamed MUTATING_METHODS/NAVIGATION_HOOKS to KNOWN_MUTATING_METHODS/KNOWN_MUTATING_HOOKS and added precise behavior boundary tests.
react-x/globals: restructured internals (split into collect, effects, and origins modules) to match the in-progress feat/environment-config implementation; no behavior change.
Website: awaited the async llms.txt index generation and fixed the website data update step to run before building.
CI: removed the generated file verification step.
Bumped typescript-eslint to 8.70.0, react/react-dom to 19.3.0, next to 16.3.5, vite to 8.3.0, effect to 3.22.2, fumadocs to 16.15.10, eslint-plugin-jsdoc to 64.3.9, tailwind-merge to 3.7.0, ansis to 4.4.0, nx to 23.2.1, eslint-plugin-react-refresh to 0.5.6, eslint-plugin-package-json to 1.8.1, @types/node to 26.5.1, @types/react to 19.3.0, @types/react-dom to 19.3.0, and pnpm to 12.4.1.
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, a useState/useReducer state value, or a custom hook matching the additionalStateHooks setting, 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)
The remaining disable-* preset configs in react-x and react-rsc now 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
Website: removed fumadocs-twoslash from serverExternalPackages to fix a prerender error.
Bumped eslint to 10.10.0, vitest to 5.0.0, tsdown to 0.23.0, nx to 23.2.0, dprint to 0.57.4, @types/react-dom to 19.2.7, @eslint/compat to 2.1.1, and @nubjs/nub to 0.8.3.
Preset configs (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
Re-enabled the import-integrity-lint plugin and patched its path prefix check so sibling directories like examples/preact and examples/preact-compat no longer collide.
Bumped @effect/language-service to 0.87.2, @effect/platform to 0.97.1, @effect/platform-node to 0.108.1, @nubjs/nub to 0.8.2, @types/node to 26.4.1, dprint to 0.57.0, and lucide-react to 1.39.0.
react-x/set-state-in-effect: no longer misattributes render-phase setState calls to effects when the state updater is passed through a prop function. (#1945)
🏗️ Internal
Bumped typescript-eslint to 8.69.0, eslint to 10.9.1, vitest to 4.1.11, @types/node to 26.4.0, @types/react-dom to 19.2.5, eslint-plugin-package-json to 1.8.0, import-integrity-lint to 1.3.0, nx to 23.1.3, publint to 0.3.24, typedoc-plugin-markdown to 4.13.0, and pnpm to 11.25.0.
@eslint-react/core: added createElement helper APIs (getCreateElementChildrenArguments, getCreateElementProp, getCreateElementPropsObject, getCreateElementTypeArgument, isCreateElementChildrenArgument, and isInsideCreateElementProps) and reused them in react-x/no-children-prop-with-children, react-x/no-children-prop, react-x/no-array-index-key, and react-x/no-nested-component-definitions. (#1937)
react-jsx/no-leaked-dollar: corrected the full rule name in the documentation from @eslint-react/no-leaked-dollar to @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 custom createElement heuristics.
Added a script check that verifies rule docs include correct full name sections.
Bumped typescript-eslint to 8.67.0, eslint-plugin-package-json to 1.7.1, and globals to 17.10.0.
react-x/no-class-component: reports are now located on the class name (falling back to the class token for anonymous classes) instead of the entire class declaration. (#1934, closes #1932)
🏗️ Internal
Bumped eslint to 10.8.1, @types/node to 26.2.0, eslint-plugin-package-json to 1.7.0, eslint-plugin-react-refresh to 0.5.4, fumadocs to 16.14.3, fumadocs-mdx to 15.2.3, lucide-react to 1.31.0, postcss to 8.5.26, and pnpm to 11.21.0.
react-x/no-nested-component-definitions: narrowed the with* HOC detection in the fallback name resolution to well-known wrappers only (react-router v5's withRouter, Formik's withFormik, and recompose's withProps, withState, withHandlers, and withLifecycle) — custom HOCs following the with* naming convention are no longer treated as component wrappers. (#1929)
🏗️ Internal
Bumped typescript-eslint to 8.66.0 and next to 16.3.0.
react-x/no-nested-component-definitions: fixed a regression where nested components wrapped in useCallback (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's connect, Relay's create*Container helpers, Apollo's graphql, and with* HOCs, including curried forms like connect(...)(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
Bumped effect to 3.22.1, eslint-plugin-jsdoc to 63.3.3, textlint to 15.8.0, js-yaml to 4.3.1, axios to 1.19.0, nx to 23.1.1, vite to 8.2.0, @vitejs/plugin-react to 6.0.5, fumadocs to 16.14.0, fumadocs-mdx to 15.2.2, preact to 10.29.8, globals to 17.9.0, lucide-react to 1.28.0, @types/react to 19.2.18, @types/react-dom to 19.2.4, and pnpm to 11.20.0.
Documented the additionalRefHooks shared setting in the affected rule docs.
🏗️ Internal
@eslint-react/ast: added Traverse.findEnclosingTryBlock, extracted from react-x/error-boundaries.
Replaced @eslint/compat with @eslint/config-helpers.
Bumped eslint to 10.8.0, eslint-plugin-jsdoc to 63.3.2, tsdown to 0.22.14, next to 16.2.12, fumadocs to 16.13.0, postcss to 8.5.25, and pnpm to 11.18.0.
@eslint-react/core: added isUseRefLikeCall and a new additionalRefHooks setting for declaring custom ref-creating hooks; the following rules now recognize them: (#1922, closes #1904)
react-x/refs
react-x/immutability
react-x/set-state-in-effect
react-naming-convention/ref-name
react-debug/is-from-ref
📝 Documentation
Updated rule docs to match current rule sources. (#1920)
🏗️ Internal
@local/testkit: simplified internals.
react-x: extracted a shared createImplicitPropListener helper used by no-implicit-children, no-implicit-key, and no-implicit-ref. (#1923)
Bumped tsdown to 0.22.13, typescript-eslint to 8.65.0, eslint-plugin-jsdoc to 63.2.0, import-integrity-lint to 1.2.0, react to 19.2.8, next to 16.2.11, and postcss to 8.5.21.
Replaced vite-node with nub for running workspace scripts. (#1919)
Unified JSDoc comment style of exported APIs in @eslint-react/ast and @eslint-react/core.
@eslint-react/ast: reworked the Extract API — replaced getRootIdentifier with the position-based getIdentifierAt, renamed getStaticPropertyName to getPropertyName (with a min/max effort option), and added findProperty for finding properties in nested object expressions; added Check.isConditional for matching conditional expressions and control flow statements. (#1918)
Bumped eslint-plugin-jsdoc to 63.1.0, expect-type to 1.4.0, @preact/preset-vite to 2.10.6, and pnpm to 11.15.0.
react-jsx/no-key-after-spread: reworked the attribute scan to a pipeline style using dropWhile and not from @local/eff, Check.is from @eslint-react/ast, and the new isAttribute helper from @eslint-react/jsx. (#1912)
@eslint-react/jsx: added isAttribute for matching JSX attributes by name.
@local/eff: added dropWhile and takeWhile.
Bumped tsdown to 0.22.8, tsl-dx to 0.13.3, import-integrity-lint to 1.1.4, fumadocs to 16.11.5, and fumadocs-mdx to 15.2.0.
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 shared find-create-element-children-prop and remove-jsx-attribute rule helpers, removed dead Literal visitors from no-comment-textnodes and no-leaked-semicolon, simplified the no-key-after-spread attribute scan, and hoisted no-useless-fragment detection and fix helpers to module level. (#1911)
@local/eff: synced the Function module with effect and added missing @category tags.
react-jsx/no-children-prop: React.createElement calls 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 the children prop; fixed a false positive where a computed identifier key in a createElement props object (e.g. { [propName]: "Children" }) was treated as the static children prop; the suggestion fix now escapes JSX-sensitive characters (<, >, {, }, &) when moving a string children prop value into element content. ([#1910](https://redire
❗ Important
✂ PR body was truncated to here.
Configuration
📅 Schedule: (in timezone Europe/Zurich)
Branch creation
Between 12:00 AM and 03:59 AM, on day 1 of the month (* 0-3 1 * *)
Automerge
At any time (no schedule defined)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
If you want to rebase/retry this PR, check this box
Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.
This PR includes no changesets
When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
any of the package files in this branch needs updating, or
the branch becomes conflicted, or
you click the rebase/retry checkbox if found above, or
you rename this PR's title to start with "rebase!" to trigger it manually
The artifact failure details are included below:
File name: pnpm-lock.yaml
[WARN] The "pnpm" field in package.json is no longer read by pnpm. The following keys were ignored: "pnpm.overrides". See https://pnpm.io/settings for the new home of each setting.
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
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:
^2.31.0→^2.31.1^4.7.2→^4.8.1^5.8.9→^5.23.3^5.8.9→^5.23.3^8.0.2→^8.0.3^8.60.0→^8.71.0^8.60.0→^8.71.0>=6.1.5→>=6.1.7^10.4.1→^10.11.0^4.16.2→^4.17.1^3.2.0→^3.4.2^8.0.0→^8.1.0^3.4.0→^3.8.1>=3.4.2→>=3.4.4^17.6.0→^17.12.0^3.1.4→^3.1.524→24.21.0^0.52.0→^0.71.0^1.0.0→^1.86.0>=4.0.4→>=4.0.7](https://renovatebot.com/diffs/npm/picomatch@>=4.0.0 <4.0.4/4.0.4/4.0.7)11.5.0+sha512.dbfcc4f81cf48597afd4bc391ffdf12c11f1a9fb83a395bfa6b0a2d9cc2fd8ffebafdb1ccbd529632153f793904c2615b7f09fe1a345473fd1c35845172a8eb1→11.28.3^3.0.0→^3.9.9^3.8.3→^3.9.9^19.14.1→^19.17.2^8.60.0→^8.71.0^2.0.0→^2.1.0>=2.8.3→>=2.9.1](https://renovatebot.com/diffs/npm/yaml@>=2.0.0 <2.8.3/2.8.3/2.9.1)Release Notes
changesets/changesets (@changesets/cli)
v2.31.1Compare Source
Patch Changes
15cf592Thanks @ingvaldlorentzen! - Fixed already-published version detection with npm 12, which always wraps successfulnpm info --jsonoutput in an array. The unwrapped output madechangeset publishtreat every package as unpublished and fail attempting to republish existing versions.eslint-community/eslint-plugin-eslint-comments (@eslint-community/eslint-plugin-eslint-comments)
v4.8.1Compare Source
Bug Fixes
no-use,require-description: key directive-comment cache onadditionalDirectives(#329) (de11b0e)v4.8.0Compare Source
Features
no-use,require-description:additionalDirectivesoption (#267) (d9a7e4d)Rel1cx/eslint-react (@eslint-react/eslint-plugin)
v5.23.3Compare Source
🐞 Fixes
react-x/immutability: reassigning a binding that resolves to component props or state (value = value + "!",count++, including destructuring andfor...ofrebinding forms) is now reported as a direct mutation, matching upstreamreact-hooks/immutability; rebinding iterator or shallow-copy bindings remains allowed. (#1979)react-x/set-state-in-effect: ref reads traced through intermediate local computations (ex:const dv = visible - prevVisible.current) are now recognized as ref-derived values, and a preceding early-return guard whose test is ref-derived (ex:if (dv === 0) return;) now exempts thesetStatecalls that follow it — previously onlysetStatenested directly inside a ref-gatedif/conditional was exempted. Aligns withreact-hooks7.1.1. (#1979)📝 Documentation
react-x/no-unstable-context-value: documented the React 19<Context>provider detection heuristic and its name-based limitations. (#1979)eslint-plugin-react-x.Full Changelog: Rel1cx/eslint-react@v5.23.2...v5.23.3
v5.23.2Compare Source
🏗️ Internal
nextto16.3.7,fumadocs-coreandfumadocs-uito16.15.16, andeslint-plugin-package-jsonto1.10.1.Full Changelog: Rel1cx/eslint-react@v5.23.1...v5.23.2
v5.23.1Compare Source
🏗️ Internal
react-xrules. (#1977, #1978)react-x/error-boundariesreact-x/globalsreact-x/immutabilityreact-x/purityreact-x/refsreact-x/set-state-in-effectreact-x/set-state-in-renderreact-x/use-memotypescript-eslintto8.71.0,tsl-dxto0.13.7, andpnpmto12.8.1.📝 Documentation
Full Changelog: Rel1cx/eslint-react@v5.23.0...v5.23.1
v5.23.0Compare Source
✨ New
react-x/static-components: dynamic creation-site tracing now follows both sides of logical expressions (ex:const C = DefaultComponent || (() => <div />)) and the last element of sequence expressions (ex:const C = (setup(), () => <div />)), in initializers and reassignments alike. (#1975)🐞 Fixes
react-x/static-components: parameters of nested non-component functions (ex:function render(Comp) { return <Comp /> }) are no longer mistaken for render-created components; definitions are judged by definition type instead of AST node type. (#1975)react-x/static-components:createdHereis now reported once per creation site instead of once per JSX usage; thedefaultdiagnostic remains per usage. (#1975)🏗️ Internal
react-x/static-components: restructured the rule to the fact-based implementation pattern —collect.ts(usage facts),origins.ts(creation-site resolution), andeffects.ts(effect inference) are now separate modules, with reporting centralized inProgram:exit; added 14 boundary test cases covering creation-site resolution, render boundaries, and per-usage reporting. (#1975)lib.tstohelpers.tsin the fact-basedreact-xrules (globals,immutability,refs). (#1976)@effect/language-serviceto0.87.3andoxlintto1.86.0.Full Changelog: Rel1cx/eslint-react@v5.22.1...v5.23.0
v5.22.1Compare Source
🐞 Fixes
react-x/use-state: directly returning theuseStateresult (ex:return React.useState()) is now allowed regardless of the rule's options, matching the exemption in the originalreact/hook-use-staterule. Covers explicit, implicit (arrow function), and type-asserted returns; lazy initialization checks still apply. (#1974, closes #1963)📝 Documentation
eslintbeing an optional peer dependency to the READMEs and the website's getting-started guides.@eslint-react/kitREADME to point to the full documentation.Full Changelog: Rel1cx/eslint-react@v5.22.0...v5.22.1
v5.22.0Compare Source
✨ New
react-dom/no-unknown-property: added React 19.3 properties to the known property allowlist. (#1973)closedbyondialogonFullscreenChange,onFullscreenError(and theirCapturevariants),credentialless, andmaskType— gated on React version>= 19.3.0onLoadonbodyonScrollEnd(and itsCapturevariant)shadowrootmode,shadowrootclonable,shadowrootdelegatesfocus, andshadowrootserializableontemplate🏗️ Internal
fumadocs-coreandfumadocs-uito16.15.15.Full Changelog: Rel1cx/eslint-react@v5.21.3...v5.22.0
v5.21.3Compare Source
🐞 Fixes
react-x/purity: reverted the v5.21.2 exemption for impure calls inuseRefinitializer arguments (ex:useRef(document.createElement("div"))); such calls are reported again. (#1972)Full Changelog: Rel1cx/eslint-react@v5.21.2...v5.21.3
v5.21.2Compare Source
🐞 Fixes
react-x/no-unnecessary-use-prefix: hooks that call other hooks only within nested callbacks, functions named exactlyuse, and hooks defined in test mock module registrations are no longer reported. (#1971)react-x/no-unused-class-component-members: methods invoked by host environments through refs (React Native'sNativeMethods) are no longer reported as unused. (#1971)react-x/purity: async function components in modules without ause clientdirective and impure calls inuseRefinitializer arguments are no longer reported. (#1971)react-x/set-state-in-effect: local variables initialized from nested member expressions rooted at a ref are now recognized as ref-derived values and no longer reported. (#1971)🏗️ Internal
@eslint-react/ast: predefined and exported common node-type helpers in theChecknamespace and migrated call sites to them.📝 Documentation
## Versionssection; a rule's changelog can be viewed directly via theRule Changeloglink under the## Resourcessection of each rule doc.Full Changelog: Rel1cx/eslint-react@v5.21.1...v5.21.2
v5.21.1Compare Source
🐞 Fixes
react-web-api/no-leaked-timeoutreact-web-api/no-leaked-intervalreact-web-api/no-leaked-fetchreact-web-api/no-leaked-resize-observerreact-web-api/no-leaked-intersection-observer🏗️ Internal
react-web-apileaked-resource rules by replacing manual function-context stack tracking withTraverse.findParentancestor lookup, and added boundary tests covering deeply nested callbacks, cross-effect pairing, and wrapped or referenced setup callbacks. (#1969) Affected rules:react-web-api/no-leaked-timeoutreact-web-api/no-leaked-intervalreact-web-api/no-leaked-fetchreact-web-api/no-leaked-event-listenerreact-web-api/no-leaked-resize-observerreact-web-api/no-leaked-intersection-observer@eslint-react/var:isAssignmentTargetEqualno longer short-circuits same-name identifiers through structural equality; identifier pairs are compared with scope-aware value equality. (#1969)react-x/no-unused-class-component-members: removed the manual class and method context stacks; the enclosing class and method are now resolved at the hit point withTraverse.findParentancestor lookup, and the per-class member definition/usage maps are initialized lazily. (#1970)Full Changelog: Rel1cx/eslint-react@v5.21.0...v5.21.1
v5.21.0Compare Source
✨ New
eslintinstallation:eslintis now an optional peer dependency across all published packages, and the rule utilities no longer eagerly load theeslintpackage at import time. (#1965)🏗️ Internal
@eslint-react/core: removed the unusedisAssignmentToThisStatehelper, and simplified thereact-xclass-component rules (no-access-state-in-setstate,no-class-component,no-direct-mutation-state,no-set-state-in-*) accordingly.@eslint-react/eslint: added a localgetConstrainedTypeAtLocationhelper (adapted from@typescript-eslint/type-utils) so consumers don't need to load@typescript-eslint/type-utils, whose entry point eagerly loads theeslintpackage. (#1965)typescript-eslintto8.70.1,fumadocsto16.15.14,fumadocs-mdxto15.4.5,viteto8.3.1, and other dependencies.New Contributors
Full Changelog: Rel1cx/eslint-react@v5.20.8...v5.21.0
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
📝 Documentation
additionalRefHooksshared setting in the affected rule docs.🏗️ Internal
@eslint-react/ast: addedTraverse.findEnclosingTryBlock, extracted fromreact-x/error-boundaries.@eslint/compatwith@eslint/config-helpers.eslintto10.8.0,eslint-plugin-jsdocto63.3.2,tsdownto0.22.14,nextto16.2.12,fumadocsto16.13.0,postcssto8.5.25, andpnpmto11.18.0.Full Changelog: Rel1cx/eslint-react@v5.18.0...v5.18.1
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](https://redireConfiguration
📅 Schedule: (in timezone Europe/Zurich)
* 0-3 1 * *)🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.