jsx-eslint/eslint-plugin-react
61.4
Adequate · 2 October 2026
23.4k
lines of production code
JavaScript
primary language
2
measurements over time
What this system is
This system is an ESLint plugin for React that provides a comprehensive suite of static analysis rules to enforce best practices, validate JSX syntax, and check prop types. It includes built-in configurations for recommended, all, and JSX-runtime linting, along with utilities for detecting React components and handling AST patterns. The plugin supports modern development workflows through TypeScript definitions, flat configuration compatibility, and robust testing infrastructure for various ESLint and parser versions.
How it got here
2014 — Initial release and test expansion
4 changes.
This period marks the initial release of eslint-plugin-react v7.37.5, establishing a comprehensive suite of ESLint rules for React codebases with a recommended configuration. The work focused on fixing environment-specific issues, such as the react-in-jsx-scope rule for Node.js, while significantly expanding test coverage to ensure reliability and compatibility with various parsers and ESLint versions.
2015–2018 — utility refactoring and test expansion
5 changes.
The project refactored internal React component detection logic into a modular utility library to improve maintainability and support modern React patterns. This structural change was accompanied by extensive additions to test coverage, including unit tests for the new utilities, fixtures for flat configuration support, and infrastructure for remote testing.
2019–2024 — ESLint v9/v10 compatibility and TypeScript typing
5 changes.
This period focused on adapting the codebase to support ESLint v9 and v10, including updates to test helpers, configuration structures, and parser resolution. Significant effort was also dedicated to enhancing type safety by adding comprehensive TypeScript definitions for ESLint AST nodes, core settings, and internal utilities.
Features
Add TypeScript type definitions for ESLint AST nodes and rule context
A new \lib/types.d.ts\ file has been added to define TypeScript interfaces and types for the library's internal usage. This includes extending the global \ASTNode\ interface to support arbitrary properties (with a TODO note for future refinement) and mapping ESLint-specific types such as \Scope\, \Token\, \Fixer\, \Context\, and various JSX-related node types (\JSXAttribute\, \JSXElement\, etc.) to the local \ASTNode\ abstraction. It also introduces type definitions for \TypeDeclarationBuilder\ and \TypeDeclarationBuilders\, which are likely used for generating type declarations from annotations, and \UnionTypeDefinition\ for handling union or shape types.
lib · high confidence
Added TypeScript type definitions for ESLint core settings, jsx-no-literals rule, and string.prototype.repeat
This change introduces new TypeScript declaration files to improve type safety and developer experience. It adds type definitions for the \@eslint/core\ module, specifically extending \SettingsConfig\ to support React-specific settings like \pragma\, \fragment\, and \createClass\. It also provides comprehensive types for the \jsx-no-literals\ rule, including the new \restrictedAttributes\ option in the configuration schema, and declares the \string.prototype.repeat\ utility function.
types · high confidence
Initial release of eslint-plugin-react v7.37.5
This entry marks the initial commit and release of the \eslint-plugin-react\ project (v7.37.5), introducing a comprehensive suite of ESLint rules for React codebases. The plugin provides a \recommended\ configuration that enables rules such as \display-name\, \jsx-key\, \no-danger-with-children\, and \prop-types\ to enforce best practices, alongside specialized rules for JSX formatting (e.g., \jsx-no-target-blank\, \jsx-no-undef\) and prop validation. The release includes configuration files (\.eslintrc\, \.editorconfig\) for the plugin's own development and documentation generation tools, establishing the foundation for static analysis of React components.
(repo-wide) · high confidence
Behavioural changes
Refactored React component detection into a modular utility library
The internal logic for detecting React components, props, and AST patterns has been extracted from monolithic rule files into a structured set of reusable utilities under lib/util. This refactoring introduces dedicated modules for component detection (Components.js), AST traversal (ast.js), JSX handling (jsx.js), and pragma configuration (pragma.js), among others. By centralizing these helpers, the plugin now offers more robust and consistent analysis across all rules, supporting modern React patterns like forwardRef and memo while improving maintainability.
lib/util · high confidence
Fixes
Fix react-in-jsx-scope rule for Node.js environments
The react-in-jsx-scope rule now correctly handles Node.js environments, preventing false positives when JSX is used in contexts where the React import is not required or available. This ensures the rule does not flag valid code in server-side rendering or other non-browser scenarios.
lib/rules · high confidence
Restore legacy config compatibility with parser options
The \configs/all.js\, \configs/jsx-runtime.js\, and \configs/recommended.js\ files have been updated to explicitly include \parserOptions\ within the \languageOptions\ object. This change ensures that legacy configuration consumers receive the necessary parser settings, preventing errors that occurred when these options were missing or improperly exposed in the previous implementation.
configs · high confidence
Test coverage
Add test-published-types package for ESLint plugin type testing; Added remote ESLint testing infrastructure and minimized test output; Added test fixtures for flat config and version detection; Added tests for flat config support and plugin export consistency; Added unit tests for utility modules; Expanded test coverage for ESLint React rules; Test helpers updated for ESLint v9+ and v10 compatibility.
Dependencies
Update to version 7.37.5 with dependency and test fixture changes
The package has been updated to version 7.37.5. This release includes updates to several runtime dependencies, specifically \array-includes\, \array.prototype.findlast\, \array.prototype.flatmap\, \array.prototype.tosorted\, \es-iterator-helpers\, \hasown\, \minimatch\, \object.entries\, \object.fromentries\, \object.values\, \resolve\, and \string.prototype.matchall\. Development dependencies have also been updated, including \@babel/core\, \@babel/eslint-parser\, \@babel/plugin-syntax-decorators\, \@babel/plugin-syntax-do-expressions\, \@babel/plugin-syntax-function-bind\, \@babel/preset-react\, \eslint-doc-generator\, \eslint-plugin-eslint-plugin\, \eslint-plugin-import\, \eslint-remote-tester\, \eslint-remote-tester-repositories\, \glob\, \jackspeak\, \ls-engines\, \markdownlint-cli\, \mocha\, \sinon\, and \typescript\. Additionally, test fixtures for version detection have been added or updated to include specific versions of \react\ and \flow-bin\ in sibling, child, and missing scenarios.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 61 → 61 (+0.5)
- Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 57 → 57 (+0.0)
- Architecture 100 → 100 (+0.0)
- Maturity 57 → 57 (+0.0)
- Readiness 65 → 66 (+0.7)
- Security 67 → 72 (+5.5)
Resolved (6)
- Off-boarding risk: anonymized user #1
- defaultPropsInstructions (cyclomatic 42) (lib/util/defaultProps.js)
- isCreateContext (cyclomatic 17) (lib/util/isCreateContext.js)
- isDestructuredFromPragmaImport (cognitive 35) (lib/util/isDestructuredFromPragmaImport.js)
- isDestructuredFromPragmaImport (cyclomatic 22) (lib/util/isDestructuredFromPragmaImport.js)
- makeNoMethodSetStateRule (cyclomatic 18) (lib/util/makeNoMethodSetStateRule.js)
New (10)
- Off-boarding risk: anonymized user #1
- defaultProps.defaultPropsInstructions (cyclomatic 42) (lib/util/defaultProps.js)
- isCreateContext.isCreateContext (cyclomatic 17) (lib/util/isCreateContext.js)
- isDestructuredFromPragmaImport.isDestructuredFromPragmaImport (cognitive 35) (lib/util/isDestructuredFromPragmaImport.js)
- isDestructuredFromPragmaImport.isDestructuredFromPragmaImport (cyclomatic 22) (lib/util/isDestructuredFromPragmaImport.js)
- makeNoMethodSetStateRule.makeNoMethodSetStateRule (cyclomatic 18) (lib/util/makeNoMethodSetStateRule.js)
- propTypes.propTypesInstructions (cognitive 338) (lib/util/propTypes.js)
- propTypes.propTypesInstructions (cyclomatic 248) (lib/util/propTypes.js)
- usedPropTypes.usedPropTypesInstructions (cognitive 89) (lib/util/usedPropTypes.js)
- usedPropTypes.usedPropTypesInstructions (cyclomatic 77) (lib/util/usedPropTypes.js)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
jsx-eslint/eslint-plugin-react was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit c99d3b274efbc593e46563358e7b77cad8d01957 — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.