Skip to content

Update all (major)#882

Open
renovate[bot] wants to merge 1 commit intomainfrom
renovate/major-all
Open

Update all (major)#882
renovate[bot] wants to merge 1 commit intomainfrom
renovate/major-all

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate Bot commented Jan 1, 2026

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
@eslint-react/eslint-plugin (source) ^2.3.7^5.7.3 age confidence
@eslint/css ^0.14.1^1.2.0 age confidence
@eslint/js (source) ^9.39.1^10.0.1 age confidence
@eslint/json ^0.14.0^1.2.0 age confidence
eslint (source) ^9.39.1^10.3.0 age confidence
eslint-plugin-unicorn ^62.0.0^64.0.0 age confidence
globals ^16.5.0^17.6.0 age confidence

Release Notes

Rel1cx/eslint-react (@​eslint-react/eslint-plugin)

v5.7.3

Compare Source

🐞 Fixes
  • react-x/immutability: Exempted ref mutations via a naming heuristic — any object whose identifier is ref or ends with Ref is treated as a mutable ref and skipped from immutability checks. This fixes false positives when mutating RefObject<T> values received as props (#​1752, #​1751).
  • react-x/immutability: Added noRefLikeStateName diagnostic to prevent state variables from being named ref or ending with Ref, which would otherwise bypass the ref exemption heuristic (#​1752).
📝 Documentation
  • Fixed the full rule name in react-jsx/no-key-after-spread documentation (jsx/no-key-after-spreadjsx-no-key-after-spread) (#​1750).

Full Changelog: Rel1cx/eslint-react@v5.7.2...v5.7.3

v5.7.2

Compare Source

🐞 Fixes
  • react-x/no-unused-state: Removed the rule from the recommended preset for now (#​1747, #​1748).
📝 Documentation
  • Added individual CHANGELOG.md files for all rules (#​1746).
  • Added rule changelog links to all rule documentation pages.
  • Updated AST Explorer links in docs.
  • Various documentation cleanups.
🏗️ Internal
  • Updated baseline metrics.
  • Updated roadmap milestone labels.
  • Upgraded dprint biome plugin from 0.12.9 to 0.12.10.
  • Cleaned up snapshot generation script and snapshot file.

Full Changelog: Rel1cx/eslint-react@v5.7.1...v5.7.2

v5.7.1

Compare Source

🐞 Fixes
  • all preset: Fixed an issue where the all preset accidentally included rules requiring type information (#​1744).
📝 Documentation
  • Fixed a typo in the shared settings description.
  • Fixed missing trailing commas in ESLint settings examples.
  • Updated no-unused-state rule wording and examples.
  • Added a Resources section with AST Explorer, ESLint Developer Guide, and TypeScript Compiler API links to kit-related documentation pages.
🏗️ Internal
  • Pinned dependency versions for next and @rbxts/react.
  • Added react-compiler-fixtures-all-preset.jsonl snapshot generation.

Full Changelog: Rel1cx/eslint-react@v5.7.0...v5.7.1

v5.7.0

Compare Source

✨ New
  • react-x/no-unused-state: The rule re-added as a no-op in v5.6.6 is now fully implemented. It detects state variables declared via useState (or similar state hooks) that are defined but never read, or only read inside an effect or effect dependency array (#​1741).
📝 Documentation
  • Updated minimum version requirements in README and docs (ESLint 10.2.1, TypeScript 6.0.3, pnpm 10.33.2).
  • Fixed no-unused-state migration docs and removed rule reasons.

LTS Maintenance Mode: Starting with v5.7.0, the project has entered a Long-Term Support (LTS) maintenance mode. New feature development is temporarily on hold while the project prioritizes bug fixes, rule improvements, and documentation updates. See #​1740 for details.

Full Changelog: Rel1cx/eslint-react@v5.6.6...v5.7.0

v5.6.6

Compare Source

✨ New
  • react-x/no-unused-state: Re-add the react-x/no-unused-state rule that was removed in 5.0.0 as a no-op rule for detecting unused state in function components in a future release.

Full Changelog: Rel1cx/eslint-react@v5.6.4...v5.6.6

v5.6.4

Compare Source

✨ New
  • react-x/no-unused-class-component-members: Now flags shouldComponentUpdate methods defined in classes extending PureComponent as unused, since PureComponent implements its own shouldComponentUpdate with shallow prop and state comparison (#​1738).
📝 Documentation
  • Added jsx preset documentation to multiple rule docs.
  • Removed empty Presets sections from rule documentation.
🏗️ Internal
  • ast: Added an optional stop predicate to findParent utility for more control over ancestor traversal (#​1736).
  • Replaced skott with sentrux for architecture linting.
  • Updated sentrux rules and baseline metrics.

Full Changelog: Rel1cx/eslint-react@v5.6.3-beta.0...v5.6.4

v5.6.2

Compare Source

🐞 Fixes
  • react-x/use-memo: Fixed false positives in useMemo dependency analysis by using reference/definition analysis (#​1735).
📝 Documentation
  • Added anchor links to rule names in recipe docs.
  • Added migration overview page with sidebar entry.
  • Added naming-convention preset configuration documentation.
  • Simplified conditional formatting in custom-rules-of-state recipe.
  • Updated migration guide and added noDirectAccessProps custom rule example.
🏗️ Internal
  • Removed unused diagram components and imports.
  • Reordered redirects with comments for clarity.
  • Bumped lucide-react from 1.12.0 to 1.14.0.
  • Updated baseline-browser-mapping to 2.10.24.

Full Changelog: Rel1cx/eslint-react@v5.6.0...v5.6.2

v5.6.0

Compare Source

This release consolidates all changes since v4.2.1.

💥 Breaking Changes
Core API Refactoring (@​eslint-react/core)
  • Performed a large-scale flattening refactor of the core package's internal structure, merging modules previously scattered across subdirectories like component/, function/, hook/, semantic/, and api/ into the root directory.
  • Renamed several core APIs:
    • isReactAPIisAPI
    • isReactAPICallisAPICall
    • isInitializedFromReactisAPIFromReact
    • isInitializedFromReactNativeisAPIFromReactNative
    • ComponentDetectionHintFunctionComponentDetectionHint
    • ComponentFlagFunctionComponentFlag
    • getComponentCollectorgetFunctionComponentCollector
    • getComponentCollectorLegacygetClassComponentCollector
  • Migrated type utilities (type-is, type-name, type-variant) from eslint-plugin-react-x to @eslint-react/core.
  • Updated the Toolkit interface in @eslint-react/kit to reflect the naming changes above.
Kit API Simplification (@​eslint-react/kit)
  • Simplified RuleToolkit.is API: Removed pre-built identifier predicates (memo, lazy, forwardRef, etc.) from RuleToolkit.is. Only *Call variants and API/APICall factories are now available.
  • Renamed initialization checkers:
    • initializedFromReactAPIFromReact
    • initializedFromReactNativeAPIFromReactNative
  • Code using is.memo(node), is.lazy(node), etc. must migrate to is.memoCall(node) or use is.API("memo")(node).
Type Alias Removal
  • Removed deprecated RuleDefinition type alias: The RuleDefinition type has been completely removed from @eslint-react/kit. Use RuleFunction instead.
Removed Rules

The following rules have been removed from eslint-plugin-react-x, eslint-plugin-react-dom, and eslint-plugin-react-debug:

Rule Package Notes
component-hook-factories react-x Removed from all configs
no-redundant-should-component-update react-x Removed from all configs
no-unnecessary-use-callback react-x Removed from all configs
no-unnecessary-use-memo react-x Removed from all configs
no-unused-state react-x Removed from all configs
prefer-destructuring-assignment react-x Removed from all configs
prefer-namespace-import react-x Removed from all configs
prefer-namespace-import react-dom Removed from all configs
debug/class-component react-debug Removed from all configs
Class Component Support Deprecation
  • All Class Component-related detection functions in the core package (such as isClassComponent, isPureComponent, and various lifecycle checkers) have been marked as @deprecated, retaining only minimal compatibility support for existing rules.
  • Rules in eslint-plugin-react-web-api, including no-leaked-event-listener, no-leaked-interval, and no-leaked-timeout, have removed detection for Class Component lifecycles (componentDidMount / componentWillUnmount) and now only report on Hook Effects (useEffect, etc.).
✨ New
New Rules
  • react-x/globals: New rule for restricting usage of global variables in React components.
  • react-x/static-components: New rule for enforcing static component definitions. Enhanced with variable reference tracking and a createdHere diagnostic to reduce false positives.
  • react-web-api/no-leaked-fetch: New rule that detects leaked fetch calls in effects, closing #​1714.
Kit Enhancements
  • Added ast.findParent utility to @eslint-react/kit for traversing AST ancestors.
  • Added support for Universally Unique Lexicographically Sortable Identifiers (ULID) for anonymous rules (later migrated to node:crypto randomBytes).
Custom Rule Examples
  • Added Error Boundaries custom rule example.
  • Added boolean prop naming custom rule and documentation.
🐞 Fixes
Rule Fixes
  • react-x/error-boundaries: Fixed false positives on non-React code and resolved catch block over-reporting.
  • react-x/set-state-in-effect: Improved validation accuracy.
  • react-x/use-memo: Added reassignment check, aligned message IDs, and added support for for-of/for-in loops.
Config Fixes
  • Added missing rules to presets, cleaned up experimental disables, and updated documentation.
  • Extracted naming-convention preset and fixed config gaps.
Type Expression Fixes
  • Added missing Extract.unwrap for type expressions and chain expressions.
  • Unwrapped type expressions before inspecting AST node types.
🪄 Improvements
API & Refactoring
  • ast: Normalized API naming conventions and rewrote Check helpers.
  • ast: Renamed isJSXLikeisJSXElementOrFragment and isMethodOrPropertyisPropertyOrMethod.
  • Extracted ESLint types and utilities into the @eslint-react/eslint package.
  • Extracted @eslint-react/jsx from @eslint-react/core into a standalone utility package for static analysis of JSX patterns.
  • Migrated to @ and # path aliases and replaced tsx with vite-node.
  • Moved pattern utilities to rule directories and extracted rule helpers into co-located lib.ts modules across multiple plugins.
  • Reorganized imports across the codebase.
  • Replaced RuleConfig with Linter.RulesRecord from ESLint.
  • Restructured monorepo packages directory layout.
  • Unified import style across packages and plugins.
Core & AST Improvements
  • ast: Updated FunctionInitPath types to support method definitions and property arrow functions in class expressions.
  • ast/isNodeEqual: Fixed JSXNamespacedName comparison logic.
Rule Improvements
  • react-x/static-components: Registered in all, x, and disable-experimental configs.
  • react-rsc/function-definition: Added directive position and quote checks.
  • Extracted HOC detection helpers to dedicated lib.ts files.
Website & Documentation Improvements
  • Added LLM routes (/llms.txt, /llms-full.txt, /llms.mdx).
  • Added inline TOCs and improved navigation.
  • Enabled twoslash type-checking for code examples.
  • Improved accessibility and unified layout configuration.
Testing
  • Expanded compiler fixture coverage across 9 rules.
  • Added comprehensive unit tests for component/hook detection utilities.
Dependencies
  • Bumped TypeScript to 6.0.3.
  • Bumped Vite to ^8.0.7 in examples.
  • Bumped @typescript-eslint packages to 8.59.1.
  • Bumped tsl-dx, tsdown, fumadocs, postcss, lucide-react, eslint-plugin-package-json, and other dependencies.
📝 Documentation
  • Added custom rule recipes for React Children API, Context API, props, state, boolean prop naming, and error boundaries.
  • Added migration examples (no-set-state, no-string-refs).
  • Added IMPL vs SPEC diff documents for 5 React Compiler aligned rules.
  • Added spec documentation for validation rules.
  • Added rule feature docs.
  • Added table of contents to multiple documentation files.
  • Updated migrating-from-eslint-plugin-react guide.
  • Updated local packages docs.
  • Updated roadmap and contributing architecture diagram.
🏗️ Internal
  • Added build:plugins script and updated build path patterns.
  • Added publishConfig.access to packages and marked @local/eff as private.
  • Added documentation comments to rule scripts.
  • Added typedoc docs and engines field.
  • Extracted shared tsdown config.
  • Fixed high-priority build, lockfile, script and doc inconsistencies.
  • Removed "Naming Pattern Quick Reference" from AST abbreviations doc.
  • Removed major-release-checklist.md.
  • Removed scripts/prepare-release.ts and the accompanying prepare:release npm script.
  • Removed barrel exports for utils.
  • Removed unused dependencies and added missing devDependencies.

Full Changelog: Rel1cx/eslint-react@v4.2.1...v5.6.0

v4.2.3

Compare Source

✨ New
  • jsx: add jsx-no-leaked-dollar rule, add suggest fix to jsx-no-leaked-semicolon rule (#​1688) (b86bdd6da)
  • jsx: add jsx-no-leaked-semicolon rule, closes #​1685 (#​1686) (fbb495000)
📝 Documentation
  • update recipe section structure (Code→Rule, Usage→Config) (8cade3008)
  • update custom rule examples code style (#​1684) (dc9d05c33)
  • update recipe titles to Title Case (6a2d941b6)
  • improve recipes overview (8278f45c9)

Full Changelog: Rel1cx/eslint-react@v4.2.2...v4.2.3

v4.2.1

Compare Source

This release consolidates all changes since v3.0.0.

💥 Breaking Changes

New eslint-plugin-react-jsx package

A new dedicated plugin for React Flavored JSX rules has been introduced. Several rules have been migrated from eslint-plugin-react-x and eslint-plugin-react-dom to this new package:

Old Rule (react-x/) New Rule (react-jsx/) Change
jsx-key-before-spread no-key-after-spread relocated, renamed
jsx-no-comment-textnodes no-comment-textnodes relocated, renamed
no-children-prop no-children-prop relocated
no-useless-fragment no-useless-fragment relocated
Old Rule (react-dom/) New Rule (react-jsx/) Change
no-namespace no-namespace relocated

Rule prefix changes in @eslint-react/eslint-plugin

Rules from individual plugins now use a flattened naming convention when accessed through the unified @eslint-react/eslint-plugin package:

  • @eslint-react/<rule> -> @eslint-react/<rule> (no changes)
  • @eslint-react-jsx-<rule> -> @eslint-react-jsx-<rule> (no changes)
  • @eslint-react/rsc/<rule> -> @eslint-react/rsc-<rule>
  • @eslint-react/dom/<rule> -> @eslint-react/dom-<rule>
  • @eslint-react/web-api/<rule> -> @eslint-react/web-api-<rule>
  • @eslint-react/naming-convention/<rule> -> @eslint-react/naming-convention-<rule>
  • @eslint-react/debug/<rule> -> @eslint-react/debug-<rule>

Removed Rules from eslint-plugin-react-x

The following rules have been removed from eslint-plugin-react-x:

Rule Replaced by
react-x/jsx-dollar @eslint-react/kit (custom rule)
react-x/jsx-shorthand-boolean @eslint-react/kit (custom rule)
react-x/jsx-shorthand-fragment @eslint-react/kit (custom rule)
react-x/unstable-rules-of-props Recipes: custom-rules-of-props
react-x/unstable-rules-of-state Recipes: custom-rules-of-state

JSX utilities extracted from @eslint-react/core to @eslint-react/jsx

The JSX module has been extracted from @eslint-react/core into a new standalone @eslint-react/jsx package. The following exports are no longer available from @eslint-react/core:

  • JsxInspector class — removed, replaced with standalone utility functions from @eslint-react/jsx (e.g. findAttribute, hasAttribute, getChildren, isElement, isFragmentElement, isHostElement, isJsxLike, etc.)
  • JsxConfig, JsxDetectionHint, JsxAttributeValue — moved to @eslint-react/jsx
  • getElementType — renamed to getElementFullType in @eslint-react/jsx
  • getElementSelfName — renamed to getElementSelfType in @eslint-react/jsx

Removed ref APIs from @eslint-react/core

The following ref-related APIs have been removed from @eslint-react/core without replacement:

  • isRefId
  • isInitializedFromRef
  • getRefInit
  • isRefLikeName

Core collector API renames

The collector APIs in @eslint-react/core have been renamed:

Before After
useComponentCollector() getComponentCollector()
useComponentCollectorLegacy() getComponentCollectorLegacy()
useHookCollector() getHookCollector()
Collector return property .ctx Collector return property .api

@eslint-react/kit API restructuring

The hint API in @eslint-react/kit has been restructured for better namespacing:

Before After
hint.defaultComponent hint.component.Default

@eslint-react/kit API redesign

The defineConfig function has been replaced with a chainable builder API for better composability and type inference:

Before After
defineConfig({ rules: [rule1, rule2] }) eslintReactKit().use(rule1).use(rule2).getConfig()

The new API provides better TypeScript intellisense and allows for more flexible rule configuration:

import eslintReactKit from "@&#8203;eslint-react/kit";

export default defineConfig(
  {
    files: ["**/*.{ts,tsx}"],
    extends: [
      // ... other configs
      eslintReactKit()
        .use(functionComponentDefinition)
        .use(maxComponentPerFile, { max: 1 })
        .getConfig(),
    ],
  },
);
  • react-jsx: Rename no-deoptimization rule to no-key-after-spread for clearer intent (#​1668).
  • kit: Remove files option from getConfig() and normalize file extensions handling (#​1669). The files option is no longer supported; file extensions are now automatically normalized to include both standard and TypeScript variants.
✨ New
  • New jsx and disable-jsx config presets in @eslint-react/eslint-plugin.
  • New react-dom-with-custom-rules example project demonstrating custom rule creation with @eslint-react/kit.
  • eslint-plugin-react-jsx: New plugin dedicated to React Flavored JSX rules. Ships with recommended and strict config presets.
  • react-jsx/no-children-prop-with-children: New rule that disallows passing children as a prop when children are also passed as nested content.
  • react-jsx/no-key-after-spread: New rule that prevents patterns causing deoptimization when using the automatic JSX runtime (e.g. placing key after spread props).
  • react-jsx/no-namespace: New rule that disallows JSX namespace syntax, as React does not support them.
  • @eslint-react/jsx: New utility package for static analysis of JSX patterns in TSESTree ASTs, extracted from @eslint-react/core.
  • @eslint-react/kit: New utility module for building custom ESLint rules with React awareness. Provides a chainable eslintReactKit().use().getConfig() builder API and a RuleToolkit interface with pre-bound context helpers for component/hook analysis.
  • @eslint-react/kit: Re-export types from @eslint-react/shared for better TypeScript intellisense.
  • kit: Add getPlugin() API to Builder for fine-grained control over plugin namespace and rule severities.
  • kit: Support more file extensions in getConfig defaults (js, mjs, cjs, jsx, ts, mts, cts, tsx), closes #​1659.
  • kit.settings: Expose normalized ESLint React settings via settings property on RuleToolkit.
  • docs(utilities): Add utilities documentation for utility modules, closes #​1656.
🐞 Fixes
  • purity: Remove console methods from impurity detection, closes #​1616 (#​1676).
  • purity: Treat new Date(arg) as pure, closes #​1582 (#​1677).
  • react-jsx: Improve type safety and edge case handling for JSX rules (#​1664).
  • react-x: component-hook-factories: Exclude HOC patterns and test mocks from component detection, closes #​1652. Thanks @​zerone0x!
  • react-x: component-hook-factories: Use isComponentNameLoose for more accurate component parameter checks.
  • react-x: immutability: Exclude event handler params from props mutation check, closes #​1647. Thanks @​zerone0x!
  • react-x: no-duplicate-key: Fix false positive for SVG xlink attributes.
  • react-x: purity: Remove AbortController from impure constructors, closes #​1648. Thanks @​zerone0x!
  • core: isReactAPI: Fix API name matching logic to use endsWith for precise matching.
  • core: isRenderMethodLike: Support ClassExpression in addition to ClassDeclaration.
  • core: findImportSource: Add cycle detection to prevent infinite recursion when resolving variable aliases.
  • ast: Fix JSX attribute name comparison to use isNodeEqual instead of string comparison, properly handling JSXNamespacedName (e.g., xlink:href).
  • ast: Update FunctionInitPath types to support method definitions and property arrow functions in class expressions.
  • ast: isNodeEqual: Fix JSXNamespacedName comparison logic.
  • var: Fix logic bugs in compute-object-type, find-enclosing-assignment-target, and is-value-equal utilities (#​1672).
  • docs: Update package structure documentation in contributing guide and FAQ, closes #​1658.
🪄 Improvements
  • react-jsx/no-children-prop: Add suggestion-fix feature to move children from prop to element content.
  • @eslint-react/eslint-plugin: Unified plugin architecture refactored — configs now auto-inject the plugin, so users no longer need to manually register it separately.
  • refactor(kit): Improve Builder and RuleFunction implementation for better type inference and code organization.
  • refactor(kit): Replace defineConfig with chainable .use().getConfig() builder API, closes #​1644.
  • refactor(kit): Remove unused type parameter from CollectorWithContext<T, E> to CollectorWithContext<T>.
  • refactor(kit): Rename parameter args to options.
  • refactor(eff): Replace getOrElse/getOrElseUpdate with getOrInsert/getOrInsertComputed for better API consistency, closes #​1657.
  • docs(kit): Add comprehensive documentation for getConfig() and getPlugin() APIs with usage examples.
  • docs(kit): Replace "max-component-per-file" example with "destructure-component-props" example for better practical guidance.
  • docs(website): Improve configure-project-rules documentation with clearer examples and explanations.
  • docs: add recipes section; remove unstable-rules-of-props/state (#​1679) (01edc2f74)
  • docs: Update migrating-from-eslint-plugin-react.mdx with improved examples and fixes, closes #​1654.
  • docs: Add index sections to migration guides for better navigation.
  • examples/react-dom-with-custom-rules: Expand with additional custom rules examples including forbid-dom-props, jsx-fragments, jsx-handler-names, jsx-max-depth, jsx-no-duplicate-props, jsx-no-literals, jsx-pascal-case, jsx-props-no-spread-multi, and no-adjacent-inline-elements, closes #​1653.
  • examples/react-dom-with-custom-rules: Add max-component-per-file custom rule example, closes #​1437.
  • examples/react-dom-with-custom-rules: Modularize custom rules configuration for better maintainability.
  • website: Migrate to new Fumadocs structure and add LLM routes (/llms.txt, /llms-full.txt, /llms.mdx), closes #​1588.
  • test: Enhance test coverage for react-x and react-dom rules, closes #​1663.
  • test: Add comprehensive test coverage for find-import-source, is-react-api, legacy component detection, hook detection, function init path, and node equality utilities (#​1671).
  • test: Add comprehensive unit tests for @eslint-react/var utilities including compute-object-type, find-enclosing-assignment-target, is-assignment-target-equal, and is-value-equal (#​1672).
  • deps: Update typescript-eslint to ^8.58.0 (#​1670).
📝 Documentation
  • scripts: Add comprehensive README and more automation scripts (#​1673).
  • docs: Update bug report template with upstream eslint-plugin-react-hooks guidance.
  • update @​eslint-react/kit installation tag from beta to rc (2da9b4e9d)
  • update deprecated rule replacements in removed.md (dc2fe27fb)
✅ Upgrade Checklist

Use this checklist to upgrade from v3.x to v4.2.1:

Package changes
  • Install the new eslint-plugin-react-jsx package — this is a new dedicated plugin for React Flavored JSX rules.
ESLint configuration
  • Replace react-x/jsx-key-before-spread with react-jsx/no-key-after-spread in your ESLint config.
  • Replace react-x/jsx-no-comment-textnodes with react-jsx/no-comment-textnodes in your ESLint config.
  • Replace react-x/no-children-prop with react-jsx/no-children-prop in your ESLint config.
  • Replace react-x/no-useless-fragment with react-jsx/no-useless-fragment in your ESLint config.
  • Replace react-dom/no-namespace with react-jsx/no-namespace in your ESLint config.
Rule prefix changes in @eslint-react/eslint-plugin

If you use the unified @eslint-react/eslint-plugin package, update the following rule prefixes (slash \/ -> dash -):

  • Replace @eslint-react/rsc/<rule> with @eslint-react/rsc-<rule> in your ESLint config.
  • Replace @eslint-react/dom/<rule> with @eslint-react/dom-<rule> in your ESLint config.
  • Replace @eslint-react/web-api/<rule> with @eslint-react/web-api-<rule> in your ESLint config.
  • Replace @eslint-react/naming-convention/<rule> with @eslint-react/naming-convention-<rule> in your ESLint config.
  • Replace @eslint-react/debug/<rule> with @eslint-react/debug-<rule> in your ESLint config.
Review new rules
  • react-jsx/no-children-prop-with-children — new rule that disallows passing children as a prop when children are also passed as nested content. Review your codebase for new reports if using presets.
Removed rules

If you still need these rules, you can enforce them using the new @eslint-react/kit by creating custom rules that implement the desired checks.

@eslint-react/kit migration
  • Replace defineConfig({ rules: [rule1, rule2] }) with eslintReactKit().use(rule1).use(rule2).getConfig().
  • Replace hint.defaultComponent with hint.component.Default.
  • Remove any files option passed to getConfig() — file extensions are now automatically normalized.
Core API changes (for custom rule authors)
  • Replace useComponentCollector() with getComponentCollector().
  • Replace useComponentCollectorLegacy() with getComponentCollectorLegacy().
  • Replace useHookCollector() with getHookCollector().
  • Replace collector return property .ctx with .api.
  • Replace JsxInspector.from(context) usage with standalone utility functions from @eslint-react/jsx.
  • Replace getElementType() with getElementFullType() from @eslint-react/jsx.
  • Replace getElementSelfName() with getElementSelfType() from @eslint-react/jsx.
  • Remove usage of deleted ref APIs (isRefId, isInitializedFromRef, getRefInit, isRefLikeName).
  • Update JSX-related imports from @eslint-react/core to @eslint-react/jsx.

Full Changelog: Rel1cx/eslint-react@v3.0.0...v4.2.1

v3.0.0

Compare Source

🧹 Chores
  • Version Packages.

Full Changelog: Rel1cx/eslint-react@v3.0.0-rc.5...v3.0.0

v2.13.0

Compare Source

✨ New
🐞 Fixes
📝 Changes you should be aware of
  1. The naming-convention/filename rule has been deprecated and will be removed in the next major version.
  2. The naming-convention/filename-extension rule has been deprecated and will be removed in the next major version.

Modern React frameworks each come with their own naming conventions that can differ or even conflict. A single predefined, framework-agnostic filename or filename extension rule no longer matches real-world usage. Please follow the official naming conventions of the specific React framework you are using.

For example, here are some references for popular frameworks:

Full Changelog: Rel1cx/eslint-react@v2.12.4...v2.13.0

v2.12.4

Compare Source

🐞 Fixes
🪄 Improvements

Full Changelog: Rel1cx/eslint-react@v2.12.2...v2.12.4

v2.12.2

Compare Source

🐞 Fixes
  • Reduce the sensitivity of component detection to prevent false positives in certain rules, closes #​1488 by @​Rel1cx in #​1489

Full Changelog: Rel1cx/eslint-react@v2.12.1...v2.12.2

v2.12.1

Compare Source

🐞 Fixes
  • Check all union constituents and allow all types under React namespace in no-implicit-key by @​Rel1cx in #​1487

Full Changelog: Rel1cx/eslint-react@v2.12.0...v2.12.1

v2.12.0

Compare Source

🪄 Improvements
📝 Changes you should be aware of

ESLint v10 is now supported and used throughout the repository. The minimum required ESLint version remains v8.57.0, but the project now supports and is tested against ESLint v10.

Full Changelog: Rel1cx/eslint-react@v2.11.2...v2.12.0

v2.11.2

Compare Source

🐞 Fixes
  • Implement a more robust check to handle cases that getFullyQualifiedName cannot handle in no-implicit-key, closes #​1476 by @​Rel1cx in #​1480
🪄 Improvements
  • Bump esbuild, node types, jsdoc plugin

Full Changelog: Rel1cx/eslint-react@v2.11.1...v2.11.2

v2.11.1

Compare Source

🐞 Fixes

Full Changelog: Rel1cx/eslint-react@v2.11.0...v2.11.1

v2.11.0

Compare Source

✨ New

Full Changelog: Rel1cx/eslint-react@v2.10.1...v2.11.0

v2.10.1

Compare Source

🐞 Fixes

Full Changelog: Rel1cx/eslint-react@v2.10.0...v2.10.1

v2.10.0

Compare Source

📝 Changes you should be aware of
  1. The no-implicit-key rule has been updated to use type checking and moved from recommended to type-checked presets.
  2. The no-unnecessary-use-ref rule has been moved to removed rules, because the rule is hard to get right.

Full Changelog: Rel1cx/eslint-react@v2.9.4...v2.10.0

v2.9.4

Compare Source

🐞 Fixes

Full Changelog: Rel1cx/eslint-react@v2.9.3...v2.9.4

v2.9.3

Compare Source

📝 Changes you should be aware of

The following rules have been deprecated and will be removed in the next major version:

  • no-default-props
  • no-prop-types
  • no-string-refs

For legacy codebases, use no-restricted-syntax as an alternative:

{
    files: ['**/*.jsx', '**/*.tsx'],
    rules: {
        "no-restricted-syntax": [
            "error",
            {
                "selector": "AssignmentExpression[operator='='][left.property.name='defaultProps']",
                "message": "[Deprecated] Use ES6 default parameters instead."
            },
            {
                "selector": "AssignmentExpression[operator='='][left.property.name='propTypes']",
                "message": "[Deprecated] Use TypeScript or another type-checking solution instead."
            },
            {
                "selector": "JSXAttribute[name.name='ref'][value.type='Literal']",
                "message": "[Deprecated] Use callback refs instead."
            }
        ]
    }
}

Full Changelog: Rel1cx/eslint-react@v2.9.2...v2.9.3

v2.9.2

🐞 Fixes
🪄 Improvements

Full Changelog: Rel1cx/eslint-react@v2.9.0...v2.9.2

v2.9.0

Compare Source

✨ New
🪄 Improvements
  • Move grouped docs from the global overview to per-plugin READMEs by @​Rel1cx in #​1449
📝 Changes you should be aware of

The no-non-async-server-functions rule has been migrated to rsc/function-definition. Please update your configuration accordingly if you are using it.

Full Changelog: Rel1cx/eslint-react@v2.8.4...v2.9.0

v2.8.4

Compare Source

🐞 Fixes

v2.8.3

Compare Source

✨ New

Full Changelog: Rel1cx/eslint-react@v2.8.1...v2.8.3

v2.8.1

Compare Source

✨ New
  • Function component detection now supports identifying components that don't return a ReactNode but have a 'use memo' or 'use no memo' directive by @​Rel1cx in #​1440
    The function in below example will be detected as a function component in relevant rules:
    function App() {
      "use memo";
    }
    
    function App() {
      "use no memo";
    }
🐞 Fixes

Full Changelog: Rel1cx/eslint-react@v2.8.0...v2.8.1

v2.8.0

Compare Source

✨ New
  • Function component detection now supports identifying components that don't return a ReactNode but call React Hooks by @​Rel1cx in #​1438
    The function in below example will be detected as a function component in relevant rules:
    function App() {
      useEffect(() => {}, []);
    }
🐞 Fixes

Full Changelog: Rel1cx/eslint-react@v2.7.4...v2.8.0

v2.7.4

Compare Source

✨ New
🐞 Fixes
🪄 Improvements

Full Changelog: Rel1cx/eslint-react@v2.7.2...v2.7.3

v2.7.2

Compare Source

🪄 Improvements
  • Reimplement the prefer-destructuring-assignment rule for better performance by @​Rel1cx in #​1423

Full Changelog: Rel1cx/eslint-react@v2.7.1...v2.7.2

v2.7.1

Compare Source

🐞 Fixes
  • Fix misdetected functions inside array expressions as function components; closes #​1416 by @​Rel1cx in #​1418
  • Remove unnecessary no-unnecessary-use-ref rule from strict configurations and update documentation by @​Rel1cx in #​1419
📝 Changes you should be aware of

The no-unnecessary-use-ref rule has been removed from the strict presets, as it was causing false positives in certain scenarios. You can still enable it manually if needed, but please be aware of its current limitations.

Full Changelog: Rel1cx/eslint-react@v2.7.0...v2.7.1

v2.7.0

Compare Source

✨ New
  • Add additionalStateHooks to shared settings, closes #​1405 by [@​Rel1cx](htt

Note

PR body was truncated to here.


Configuration

📅 Schedule: (in timezone Pacific/Auckland)

  • Branch creation
    • At any time (no schedule defined)
  • 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

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot force-pushed the renovate/major-all branch from a80cd93 to 40d1eea Compare January 8, 2026 18:48
@renovate renovate Bot force-pushed the renovate/major-all branch 2 times, most recently from cf158dd to 600ac0e Compare January 27, 2026 18:42
@renovate renovate Bot changed the title fix(deps): update dependency globals to v17 fix(deps): update all (major) Jan 30, 2026
@renovate renovate Bot force-pushed the renovate/major-all branch 2 times, most recently from 4637054 to fb425ca Compare February 1, 2026 01:48
@renovate renovate Bot force-pushed the renovate/major-all branch 3 times, most recently from 5af58c2 to c25c3e9 Compare February 12, 2026 00:54
@renovate renovate Bot force-pushed the renovate/major-all branch 4 times, most recently from fa39bf8 to dfa47ad Compare February 23, 2026 23:34
@renovate renovate Bot force-pushed the renovate/major-all branch 2 times, most recently from 52a0a77 to 3d8e734 Compare March 7, 2026 02:07
@renovate renovate Bot force-pushed the renovate/major-all branch 2 times, most recently from a41b8ea to 346a34d Compare March 16, 2026 00:49
@renovate renovate Bot force-pushed the renovate/major-all branch 3 times, most recently from ad4dd9f to 776dcde Compare March 23, 2026 16:29
@renovate renovate Bot force-pushed the renovate/major-all branch 4 times, most recently from cff3df8 to 1e5357c Compare April 2, 2026 21:11
@renovate renovate Bot force-pushed the renovate/major-all branch 2 times, most recently from 82db8b0 to 038e105 Compare April 8, 2026 21:31
@renovate renovate Bot changed the title fix(deps): update all (major) Update all (major) Apr 8, 2026
@renovate renovate Bot force-pushed the renovate/major-all branch 3 times, most recently from 05afbec to 4c35bda Compare April 17, 2026 21:48
@renovate renovate Bot force-pushed the renovate/major-all branch 8 times, most recently from b8db415 to aabdc34 Compare May 4, 2026 17:10
@renovate renovate Bot force-pushed the renovate/major-all branch from aabdc34 to 16a4795 Compare May 6, 2026 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants