master 9af88453df2c cached
425 files
3.4 MB
906.5k tokens
850 symbols
1 requests
Download .txt
Showing preview only (3,619K chars total). Download the full file or copy to clipboard to get everything.
Repository: jsx-eslint/eslint-plugin-react
Branch: master
Commit: 9af88453df2c
Files: 425
Total size: 3.4 MB

Directory structure:
gitextract_41bugypo/

├── .editorconfig
├── .eslint-doc-generatorrc.js
├── .eslintrc
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report.yml
│   └── workflows/
│       ├── node-18+.yml
│       ├── node-minors.yml
│       ├── node-pretest.yml
│       ├── npm-publish.yml
│       ├── rebase.yml
│       ├── release.yml
│       ├── require-allow-edits.yml
│       ├── smoke-test.yml
│       └── type-check.yml
├── .gitignore
├── .markdownlint.json
├── .markdownlintignore
├── .npmrc
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── build.tsconfig.json
├── configs/
│   ├── all.js
│   ├── jsx-runtime.js
│   └── recommended.js
├── docs/
│   └── rules/
│       ├── async-server-action.md
│       ├── boolean-prop-naming.md
│       ├── button-has-type.md
│       ├── checked-requires-onchange-or-readonly.md
│       ├── default-props-match-prop-types.md
│       ├── destructuring-assignment.md
│       ├── display-name.md
│       ├── forbid-component-props.md
│       ├── forbid-dom-props.md
│       ├── forbid-elements.md
│       ├── forbid-foreign-prop-types.md
│       ├── forbid-prop-types.md
│       ├── forward-ref-uses-ref.md
│       ├── function-component-definition.md
│       ├── hook-use-state.md
│       ├── iframe-missing-sandbox.md
│       ├── jsx-boolean-value.md
│       ├── jsx-child-element-spacing.md
│       ├── jsx-closing-bracket-location.md
│       ├── jsx-closing-tag-location.md
│       ├── jsx-curly-brace-presence.md
│       ├── jsx-curly-newline.md
│       ├── jsx-curly-spacing.md
│       ├── jsx-equals-spacing.md
│       ├── jsx-filename-extension.md
│       ├── jsx-first-prop-new-line.md
│       ├── jsx-fragments.md
│       ├── jsx-handler-names.md
│       ├── jsx-indent-props.md
│       ├── jsx-indent.md
│       ├── jsx-key.md
│       ├── jsx-max-depth.md
│       ├── jsx-max-props-per-line.md
│       ├── jsx-newline.md
│       ├── jsx-no-bind.md
│       ├── jsx-no-comment-textnodes.md
│       ├── jsx-no-constructed-context-values.md
│       ├── jsx-no-duplicate-props.md
│       ├── jsx-no-leaked-render.md
│       ├── jsx-no-literals.md
│       ├── jsx-no-script-url.md
│       ├── jsx-no-target-blank.md
│       ├── jsx-no-undef.md
│       ├── jsx-no-useless-fragment.md
│       ├── jsx-one-expression-per-line.md
│       ├── jsx-pascal-case.md
│       ├── jsx-props-no-multi-spaces.md
│       ├── jsx-props-no-spread-multi.md
│       ├── jsx-props-no-spreading.md
│       ├── jsx-sort-default-props.md
│       ├── jsx-sort-props.md
│       ├── jsx-space-before-closing.md
│       ├── jsx-tag-spacing.md
│       ├── jsx-uses-react.md
│       ├── jsx-uses-vars.md
│       ├── jsx-wrap-multilines.md
│       ├── no-access-state-in-setstate.md
│       ├── no-adjacent-inline-elements.md
│       ├── no-array-index-key.md
│       ├── no-arrow-function-lifecycle.md
│       ├── no-children-prop.md
│       ├── no-danger-with-children.md
│       ├── no-danger.md
│       ├── no-deprecated.md
│       ├── no-did-mount-set-state.md
│       ├── no-did-update-set-state.md
│       ├── no-direct-mutation-state.md
│       ├── no-find-dom-node.md
│       ├── no-invalid-html-attribute.md
│       ├── no-is-mounted.md
│       ├── no-multi-comp.md
│       ├── no-namespace.md
│       ├── no-object-type-as-default-prop.md
│       ├── no-redundant-should-component-update.md
│       ├── no-render-return-value.md
│       ├── no-set-state.md
│       ├── no-string-refs.md
│       ├── no-this-in-sfc.md
│       ├── no-typos.md
│       ├── no-unescaped-entities.md
│       ├── no-unknown-property.md
│       ├── no-unsafe.md
│       ├── no-unstable-nested-components.md
│       ├── no-unused-class-component-methods.md
│       ├── no-unused-prop-types.md
│       ├── no-unused-state.md
│       ├── no-will-update-set-state.md
│       ├── prefer-es6-class.md
│       ├── prefer-exact-props.md
│       ├── prefer-read-only-props.md
│       ├── prefer-stateless-function.md
│       ├── prop-types.md
│       ├── react-in-jsx-scope.md
│       ├── require-default-props.md
│       ├── require-optimization.md
│       ├── require-render-return.md
│       ├── self-closing-comp.md
│       ├── sort-comp.md
│       ├── sort-default-props.md
│       ├── sort-prop-types.md
│       ├── state-in-constructor.md
│       ├── static-property-placement.md
│       ├── style-prop-object.md
│       └── void-dom-elements-no-children.md
├── index.js
├── lib/
│   ├── rules/
│   │   ├── async-server-action.js
│   │   ├── boolean-prop-naming.js
│   │   ├── button-has-type.js
│   │   ├── checked-requires-onchange-or-readonly.js
│   │   ├── default-props-match-prop-types.js
│   │   ├── destructuring-assignment.js
│   │   ├── display-name.js
│   │   ├── forbid-component-props.js
│   │   ├── forbid-dom-props.js
│   │   ├── forbid-elements.js
│   │   ├── forbid-foreign-prop-types.js
│   │   ├── forbid-prop-types.js
│   │   ├── forward-ref-uses-ref.js
│   │   ├── function-component-definition.js
│   │   ├── hook-use-state.js
│   │   ├── iframe-missing-sandbox.js
│   │   ├── index.js
│   │   ├── jsx-boolean-value.js
│   │   ├── jsx-child-element-spacing.js
│   │   ├── jsx-closing-bracket-location.js
│   │   ├── jsx-closing-tag-location.js
│   │   ├── jsx-curly-brace-presence.js
│   │   ├── jsx-curly-newline.js
│   │   ├── jsx-curly-spacing.js
│   │   ├── jsx-equals-spacing.js
│   │   ├── jsx-filename-extension.js
│   │   ├── jsx-first-prop-new-line.js
│   │   ├── jsx-fragments.js
│   │   ├── jsx-handler-names.js
│   │   ├── jsx-indent-props.js
│   │   ├── jsx-indent.js
│   │   ├── jsx-key.js
│   │   ├── jsx-max-depth.js
│   │   ├── jsx-max-props-per-line.js
│   │   ├── jsx-newline.js
│   │   ├── jsx-no-bind.js
│   │   ├── jsx-no-comment-textnodes.js
│   │   ├── jsx-no-constructed-context-values.js
│   │   ├── jsx-no-duplicate-props.js
│   │   ├── jsx-no-leaked-render.js
│   │   ├── jsx-no-literals.js
│   │   ├── jsx-no-script-url.js
│   │   ├── jsx-no-target-blank.js
│   │   ├── jsx-no-undef.js
│   │   ├── jsx-no-useless-fragment.js
│   │   ├── jsx-one-expression-per-line.js
│   │   ├── jsx-pascal-case.js
│   │   ├── jsx-props-no-multi-spaces.js
│   │   ├── jsx-props-no-spread-multi.js
│   │   ├── jsx-props-no-spreading.js
│   │   ├── jsx-sort-default-props.js
│   │   ├── jsx-sort-props.js
│   │   ├── jsx-space-before-closing.js
│   │   ├── jsx-tag-spacing.js
│   │   ├── jsx-uses-react.js
│   │   ├── jsx-uses-vars.js
│   │   ├── jsx-wrap-multilines.js
│   │   ├── no-access-state-in-setstate.js
│   │   ├── no-adjacent-inline-elements.js
│   │   ├── no-array-index-key.js
│   │   ├── no-arrow-function-lifecycle.js
│   │   ├── no-children-prop.js
│   │   ├── no-danger-with-children.js
│   │   ├── no-danger.js
│   │   ├── no-deprecated.js
│   │   ├── no-did-mount-set-state.js
│   │   ├── no-did-update-set-state.js
│   │   ├── no-direct-mutation-state.js
│   │   ├── no-find-dom-node.js
│   │   ├── no-invalid-html-attribute.js
│   │   ├── no-is-mounted.js
│   │   ├── no-multi-comp.js
│   │   ├── no-namespace.js
│   │   ├── no-object-type-as-default-prop.js
│   │   ├── no-redundant-should-component-update.js
│   │   ├── no-render-return-value.js
│   │   ├── no-set-state.js
│   │   ├── no-string-refs.js
│   │   ├── no-this-in-sfc.js
│   │   ├── no-typos.js
│   │   ├── no-unescaped-entities.js
│   │   ├── no-unknown-property.js
│   │   ├── no-unsafe.js
│   │   ├── no-unstable-nested-components.js
│   │   ├── no-unused-class-component-methods.js
│   │   ├── no-unused-prop-types.js
│   │   ├── no-unused-state.js
│   │   ├── no-will-update-set-state.js
│   │   ├── prefer-es6-class.js
│   │   ├── prefer-exact-props.js
│   │   ├── prefer-read-only-props.js
│   │   ├── prefer-stateless-function.js
│   │   ├── prop-types.js
│   │   ├── react-in-jsx-scope.js
│   │   ├── require-default-props.js
│   │   ├── require-optimization.js
│   │   ├── require-render-return.js
│   │   ├── self-closing-comp.js
│   │   ├── sort-comp.js
│   │   ├── sort-default-props.js
│   │   ├── sort-prop-types.js
│   │   ├── state-in-constructor.js
│   │   ├── static-property-placement.js
│   │   ├── style-prop-object.js
│   │   └── void-dom-elements-no-children.js
│   ├── types.d.ts
│   └── util/
│       ├── Components.js
│       ├── annotations.js
│       ├── ast.js
│       ├── componentUtil.js
│       ├── defaultProps.js
│       ├── docsUrl.js
│       ├── error.js
│       ├── eslint.js
│       ├── getTokenBeforeClosingBracket.js
│       ├── isCreateContext.js
│       ├── isCreateElement.js
│       ├── isDestructuredFromPragmaImport.js
│       ├── isFirstLetterCapitalized.js
│       ├── jsx.js
│       ├── lifecycleMethods.js
│       ├── linkComponents.js
│       ├── log.js
│       ├── makeNoMethodSetStateRule.js
│       ├── message.js
│       ├── pragma.js
│       ├── propTypes.js
│       ├── propTypesSort.js
│       ├── propWrapper.js
│       ├── props.js
│       ├── report.js
│       ├── usedPropTypes.js
│       ├── variable.js
│       └── version.js
├── package.json
├── test/
│   ├── eslint-remote-tester.config.js
│   └── mocha.opts
├── test-published-types/
│   ├── .npmrc
│   ├── index.js
│   ├── package.json
│   └── tsconfig.json
├── tests/
│   ├── fixtures/
│   │   ├── flat-config/
│   │   │   ├── config-all/
│   │   │   │   ├── eslint.config-deep.js
│   │   │   │   ├── eslint.config-root.js
│   │   │   │   └── test.jsx
│   │   │   ├── config-jsx-runtime/
│   │   │   │   ├── eslint.config-deep.js
│   │   │   │   ├── eslint.config-root.js
│   │   │   │   └── test.jsx
│   │   │   ├── config-recommended/
│   │   │   │   ├── eslint.config-deep.js
│   │   │   │   ├── eslint.config-root.js
│   │   │   │   └── test.jsx
│   │   │   ├── plugin/
│   │   │   │   ├── eslint.config.js
│   │   │   │   └── test.jsx
│   │   │   └── plugin-and-config/
│   │   │       ├── eslint.config-deep.js
│   │   │       ├── eslint.config-root.js
│   │   │       └── test.jsx
│   │   └── version/
│   │       ├── detect-version/
│   │       │   ├── detect-version-child/
│   │       │   │   ├── node_modules/
│   │       │   │   │   ├── flow-bin/
│   │       │   │   │   │   └── package.json
│   │       │   │   │   └── react/
│   │       │   │   │       ├── index.js
│   │       │   │   │       └── package.json
│   │       │   │   └── test.js
│   │       │   ├── node_modules/
│   │       │   │   ├── flow-bin/
│   │       │   │   │   └── package.json
│   │       │   │   └── react/
│   │       │   │       ├── index.js
│   │       │   │       └── package.json
│   │       │   └── test.js
│   │       ├── detect-version-missing/
│   │       │   ├── node_modules/
│   │       │   │   └── react/
│   │       │   │       ├── index.js
│   │       │   │       └── package.json
│   │       │   └── test.js
│   │       └── detect-version-sibling/
│   │           ├── node_modules/
│   │           │   ├── flow-bin/
│   │           │   │   └── package.json
│   │           │   └── react/
│   │           │       ├── index.js
│   │           │       └── package.json
│   │           └── test.js
│   ├── flat-config.js
│   ├── helpers/
│   │   ├── getESLintCoreRule.js
│   │   ├── getRuleDefiner.js
│   │   ├── parsers.js
│   │   └── ruleTester.js
│   ├── index.js
│   ├── lib/
│   │   └── rules/
│   │       ├── async-server-action.js
│   │       ├── boolean-prop-naming.js
│   │       ├── button-has-type.js
│   │       ├── checked-requires-onchange-or-readonly.js
│   │       ├── default-props-match-prop-types.js
│   │       ├── destructuring-assignment.js
│   │       ├── display-name.js
│   │       ├── forbid-component-props.js
│   │       ├── forbid-dom-props.js
│   │       ├── forbid-elements.js
│   │       ├── forbid-foreign-prop-types.js
│   │       ├── forbid-prop-types.js
│   │       ├── forward-ref-uses-ref.js
│   │       ├── function-component-definition.js
│   │       ├── hook-use-state.js
│   │       ├── iframe-missing-sandbox.js
│   │       ├── jsx-boolean-value.js
│   │       ├── jsx-child-element-spacing.js
│   │       ├── jsx-closing-bracket-location.js
│   │       ├── jsx-closing-tag-location.js
│   │       ├── jsx-curly-brace-presence.js
│   │       ├── jsx-curly-newline.js
│   │       ├── jsx-curly-spacing.js
│   │       ├── jsx-equals-spacing.js
│   │       ├── jsx-filename-extension.js
│   │       ├── jsx-first-prop-new-line.js
│   │       ├── jsx-fragments.js
│   │       ├── jsx-handler-names.js
│   │       ├── jsx-indent-props.js
│   │       ├── jsx-indent.js
│   │       ├── jsx-key.js
│   │       ├── jsx-max-depth.js
│   │       ├── jsx-max-props-per-line.js
│   │       ├── jsx-newline.js
│   │       ├── jsx-no-bind.js
│   │       ├── jsx-no-comment-textnodes.js
│   │       ├── jsx-no-constructed-context-values.js
│   │       ├── jsx-no-duplicate-props.js
│   │       ├── jsx-no-leaked-render.js
│   │       ├── jsx-no-literals.js
│   │       ├── jsx-no-script-url.js
│   │       ├── jsx-no-target-blank.js
│   │       ├── jsx-no-undef.js
│   │       ├── jsx-no-useless-fragment.js
│   │       ├── jsx-one-expression-per-line.js
│   │       ├── jsx-pascal-case.js
│   │       ├── jsx-props-no-multi-spaces.js
│   │       ├── jsx-props-no-spread-multi.js
│   │       ├── jsx-props-no-spreading.js
│   │       ├── jsx-sort-default-props.js
│   │       ├── jsx-sort-props.js
│   │       ├── jsx-space-before-closing.js
│   │       ├── jsx-tag-spacing.js
│   │       ├── jsx-uses-react.js
│   │       ├── jsx-uses-vars.js
│   │       ├── jsx-wrap-multilines.js
│   │       ├── no-access-state-in-setstate.js
│   │       ├── no-adjacent-inline-elements.js
│   │       ├── no-array-index-key.js
│   │       ├── no-arrow-function-lifecycle.js
│   │       ├── no-children-prop.js
│   │       ├── no-danger-with-children.js
│   │       ├── no-danger.js
│   │       ├── no-deprecated.js
│   │       ├── no-did-mount-set-state.js
│   │       ├── no-did-update-set-state.js
│   │       ├── no-direct-mutation-state.js
│   │       ├── no-find-dom-node.js
│   │       ├── no-invalid-html-attribute.js
│   │       ├── no-is-mounted.js
│   │       ├── no-multi-comp.js
│   │       ├── no-namespace.js
│   │       ├── no-object-type-as-default-prop.js
│   │       ├── no-redundant-should-component-update.js
│   │       ├── no-render-return-value.js
│   │       ├── no-set-state.js
│   │       ├── no-string-refs.js
│   │       ├── no-this-in-sfc.js
│   │       ├── no-typos.js
│   │       ├── no-unescaped-entities.js
│   │       ├── no-unknown-property.js
│   │       ├── no-unsafe.js
│   │       ├── no-unstable-nested-components.js
│   │       ├── no-unused-class-component-methods.js
│   │       ├── no-unused-prop-types.js
│   │       ├── no-unused-state.js
│   │       ├── no-will-update-set-state.js
│   │       ├── prefer-es6-class.js
│   │       ├── prefer-exact-props.js
│   │       ├── prefer-read-only-props.js
│   │       ├── prefer-stateless-function.js
│   │       ├── prop-types.js
│   │       ├── react-in-jsx-scope.js
│   │       ├── require-default-props.js
│   │       ├── require-optimization.js
│   │       ├── require-render-return.js
│   │       ├── self-closing-comp.js
│   │       ├── sort-comp.js
│   │       ├── sort-default-props.js
│   │       ├── sort-prop-types.js
│   │       ├── state-in-constructor.js
│   │       ├── static-property-placement.js
│   │       ├── style-prop-object.js
│   │       └── void-dom-elements-no-children.js
│   └── util/
│       ├── .eslintrc
│       ├── Components.js
│       ├── ast.js
│       ├── isFirstLetterCapitalized.js
│       ├── jsx.js
│       ├── linkComponents.js
│       ├── pragma.js
│       ├── propWrapper.js
│       ├── variable.js
│       └── version.js
├── tsconfig.json
└── types/
    ├── rules/
    │   └── jsx-no-literals.d.ts
    └── string.prototype.repeat/
        └── index.d.ts

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
quote_type = single

[*.md]
trim_trailing_whitespace = false


================================================
FILE: .eslint-doc-generatorrc.js
================================================
/** @type {import('eslint-doc-generator').GenerateOptions} */
const config = {
  configEmoji: [
    ['jsx-runtime', '🏃'],
    ['recommended', '☑️'],
  ],
  ignoreConfig: ['all', 'flat'],
  urlConfigs: 'https://github.com/jsx-eslint/eslint-plugin-react/#shareable-configs',
};

module.exports = config;


================================================
FILE: .eslintrc
================================================
{
	"root": true,
	"extends": ["airbnb-base", "plugin:eslint-plugin/recommended"],
	"plugins": ["eslint-plugin"],
	"env": {
		"es6": true,
		"node": true
	},
	"parserOptions": {
		"ecmaVersion": 6,
		"ecmaFeatures": {
			"jsx": true
		},
		"sourceType": "script",
	},
	"ignorePatterns": [
		"coverage/",
		".nyc_output/",
		"test-published-types/",
		"tests/fixtures/flat-config/",
		"**/*/*.d.ts",
	],
	"rules": {
		"comma-dangle": [2, "always-multiline"],
		"object-shorthand": [2, "always", {
			"ignoreConstructors": false,
			"avoidQuotes": false, // this is the override vs airbnb
    }],
    "max-len": [2, 140, {
      "ignoreStrings": true,
      "ignoreTemplateLiterals": true,
      "ignoreComments": true,
    }],
    "consistent-return": 0,

    "prefer-destructuring": [2, { "array": false, "object": false }, { "enforceForRenamedProperties": false }],
    "prefer-object-spread": 0, // until node 8 is required
    "prefer-rest-params": 0, // until node 6 is required
    "prefer-spread": 0, // until node 6 is required
    "function-call-argument-newline": 1, // TODO: enable
    "function-paren-newline": 0,
    "no-plusplus": [2, {"allowForLoopAfterthoughts": true}],
    "no-param-reassign": 1,
    "no-restricted-syntax": [2, {
      "selector": "ObjectPattern",
      "message": "Object destructuring is not compatible with Node v4"
    }],
    "strict": [2, "safe"],
    "valid-jsdoc": [2, {
      "requireReturn": false,
      "requireParamDescription": false,
      "requireReturnDescription": false,
    }],

    "eslint-plugin/consistent-output": 0,
    "eslint-plugin/require-meta-docs-description": [2, { "pattern": "^(Enforce|Require|Disallow)" }],
    "eslint-plugin/require-meta-schema": 0,
    "eslint-plugin/require-meta-type": 0
  },
  "overrides": [
    {
      "files": "tests/**",
      "rules": {
        "no-template-curly-in-string": 1,
      },
    },
    {
      "files": "markdown.config.js",
      "rules": {
        "no-console": 0,
      },
    },
    {
      "files": ".github/workflows/*.js",
      "parserOptions": {
        "ecmaVersion": 2019,
      },
      "rules": {
        "camelcase": 0,
        "no-console": 0,
        "no-restricted-syntax": 0,
      },
    },
  ],
}


================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: [jsx-eslint, ljharb]
patreon: # Replace with a single Patreon username
open_collective: jsx-eslint # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: npm/eslint-plugin-react
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug Report
description: File a bug report
title: "[Bug]: "
labels: ["bug", "triage"]
assignees: []
body:
  - type: checkboxes
    attributes:
      label: Is there an existing issue for this?
      description: Please search to see if an issue already exists for the bug you encountered.
      options:
      - label: I have searched the existing issues and my issue is unique
        required: true
      - label: My issue appears in the command-line and not only in the text editor
        required: true
  - type: textarea
    id: Code
    attributes:
      label: Description Overview
      description: A clear and concise description of bug w/ examples
      placeholder: |
        Brief description here

        Show example of your code (as text format), add images/videos/gifs to help explain example
        and/or Link of repo to where issue is occurring

        What is happening? / What is the error?

        What command(s) did you run to reproduce issue?
      value: |
        <!--Brief description-->


        <!--Show example of your code (as text format), add images/videos/gifs to help explain example-->
        <!--and/or Link of repo to where issue is occurring-->


        <!--What is happening? / What is the error?-->


        <!--What command(s) did you run to reproduce issue?-->

    validations:
      required: true
  - type: textarea
    id: expected_behavior
    attributes:
      label: Expected Behavior
      description: A clear and concise description of what you expected to happen.
      placeholder: |
        Brief description here

        Show example of code (as text format), add images/videos/gifs to help explain expected behavior
      value: |
        <!--Brief description-->


        <!--Show example of code (as text format), add images/videos/gifs to help explain expected behavior-->
    validations:
      required: true
  - type: input
    id: eslint-plugin-react-version
    attributes:
      label: eslint-plugin-react version
      placeholder: v7.31.11
    validations:
      required: true
  - type: input
    id: eslint-version
    attributes:
      label: eslint version
      placeholder: v8.28.0
    validations:
      required: true
  - type: input
    id: node-version
    attributes:
      label: node version
      placeholder: v8.19.2
    validations:
      required: true


================================================
FILE: .github/workflows/node-18+.yml
================================================
name: 'Tests: node.js (18+)'

on: [pull_request, push]

jobs:
  matrix:
    runs-on: ubuntu-latest
    outputs:
      latest: ${{ steps.set-matrix.outputs.requireds }}
      minors: ${{ steps.set-matrix.outputs.optionals }}
    steps:
      - uses: ljharb/actions/node/matrix@main
        id: set-matrix
        with:
          versionsAsRoot: true
          type: majors
          preset: '>=18'

  latest:
    needs: [matrix]
    name: 'latest majors'
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        node-version: ${{ fromJson(needs.matrix.outputs.latest) }}
        eslint:
          - 9
          - 8
          - 7
          - 6
          - 5
          - 4
          - 4.14 # last version without messageId
          - 3
        babel-eslint:
          - 10
          - 9
          - 8
        typescript-eslint:
          - 5
          - 6
          - 7
          - 8
        exclude:
          - eslint: 3
            babel-eslint: 10
          - eslint: 3
            typescript-eslint: 5
          - eslint: 4
            typescript-eslint: 5
          - eslint: 4.14
            typescript-eslint: 5
          - eslint: 5
            typescript-eslint: 5
          - eslint: 3
            typescript-eslint: 6
          - eslint: 4
            typescript-eslint: 6
          - eslint: 4.14
            typescript-eslint: 6
          - eslint: 5
            typescript-eslint: 6
          - eslint: 6
            typescript-eslint: 6
          - eslint: 9
            typescript-eslint: 6
          - eslint: 3
            typescript-eslint: 7
          - eslint: 4
            typescript-eslint: 7
          - eslint: 4.14
            typescript-eslint: 7
          - eslint: 5
            typescript-eslint: 7
          - eslint: 6
            typescript-eslint: 7
          - eslint: 7
            typescript-eslint: 7
          - eslint: 9
            typescript-eslint: 7
          - eslint: 3
            typescript-eslint: 8
          - eslint: 4
            typescript-eslint: 8
          - eslint: 4.14
            typescript-eslint: 8
          - eslint: 5
            typescript-eslint: 8
          - eslint: 6
            typescript-eslint: 8
          - eslint: 7
            typescript-eslint: 8
          - eslint: 9
            typescript-eslint: 5
          - node-version: 19
            typescript-eslint: 7

    steps:
      - uses: actions/checkout@v4
      - uses: ljharb/actions/node/install@main
        name: 'nvm install ${{ matrix.node-version }} && npm install'
        with:
          node-version: ${{ matrix.node-version }}
          after_install: |
            npm install --no-save "eslint@${{ matrix.eslint }}" "@typescript-eslint/parser@${{ matrix.typescript-eslint == 8 && 8.17 || matrix.typescript-eslint }}" "babel-eslint@${{ matrix.babel-eslint }}"
        env:
          NPM_CONFIG_LEGACY_PEER_DEPS: "${{ matrix.typescript-eslint >= 6 && 'false' || 'true' }}"
      - run: npx ls-engines
      - run: npm run unit-test
      - uses: codecov/codecov-action@v3.1.5

  node:
    name: 'node 18+'
    needs: [latest]
    runs-on: ubuntu-latest
    steps:
      - run: 'echo tests completed'


================================================
FILE: .github/workflows/node-minors.yml
================================================
name: 'Tests: node.js (4 - 18)'

on: [pull_request, push]

jobs:
  matrix:
    runs-on: ubuntu-latest
    outputs:
      latest: ${{ steps.set-matrix.outputs.requireds }}
      minors: ${{ steps.set-matrix.outputs.optionals }}
    steps:
      - uses: ljharb/actions/node/matrix@main
        id: set-matrix
        with:
          versionsAsRoot: true
          type: majors
          preset: '>=4 < 18'

  latest:
    needs: [matrix]
    name: 'latest majors'
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        node-version: ${{ fromJson(needs.matrix.outputs.latest) }}
        eslint:
          - 8
          - 7
          - 6
          - 5
          - 4
          - 4.14 # last version without messageId
          - 3
        babel-eslint:
          - 10
          - 9
          - 8
        exclude:
          - node-version: 5
            babel-eslint: 10
          - node-version: 5
            babel-eslint: 9
          - node-version: 4
            babel-eslint: 10
          - node-version: 4
            babel-eslint: 9
          - node-version: 15
            eslint: 8
          - node-version: 13
            eslint: 8
          - node-version: 11
            eslint: 8
          - node-version: 11
            eslint: 7
          - node-version: 10
            eslint: 8
          - node-version: 9
            eslint: 8
          - node-version: 9
            eslint: 7
          - node-version: 8
            eslint: 8
          - node-version: 8
            eslint: 7
          - node-version: 7
            eslint: 8
          - node-version: 7
            eslint: 7
          - node-version: 7
            eslint: 6
          - node-version: 6
            eslint: 8
          - node-version: 6
            eslint: 7
          - node-version: 6
            eslint: 6
          - node-version: 5
            eslint: 8
          - node-version: 5
            eslint: 7
          - node-version: 5
            eslint: 6
          - node-version: 5
            eslint: 5
          - node-version: 4
            eslint: 8
          - node-version: 4
            eslint: 7
          - node-version: 4
            eslint: 6
          - node-version: 4
            eslint: 5

    steps:
      - uses: actions/checkout@v4
      - uses: ljharb/actions/node/install@main
        name: 'nvm install ${{ matrix.node-version }} && npm install'
        with:
          node-version: ${{ matrix.node-version }}
          after_install: |
            npm install --no-save "eslint@${{ matrix.eslint }}" "@typescript-eslint/parser@${{ matrix.node-version >= 18 && matrix.eslint >= 8 && '8.17' || (matrix.node-version >= 16 && matrix.eslint >= 7 && '6' || (matrix.node-version >= 14 && '5' || (matrix.node-version >= 12 && '4' || (matrix.node-version >= 10 && '4.0' || (matrix.node-version >= 8 && '3' || '2'))))) }}" "babel-eslint@${{ matrix.babel-eslint }}"
          skip-ls-check: ${{ matrix.node-version < 10 && true || false }}
        env:
          NPM_CONFIG_LEGACY_PEER_DEPS: "${{ matrix.node-version >= 16 && matrix.eslint >= 7 && 'false' || 'true' }}"
      - run: npx ls-engines
        if: ${{ matrix.node-version >= 12 }}
      - run: npm run unit-test
      - uses: codecov/codecov-action@v3.1.5

  node:
    name: 'node 4 - 17'
    needs: [latest]
    runs-on: ubuntu-latest
    steps:
      - run: 'echo tests completed'


================================================
FILE: .github/workflows/node-pretest.yml
================================================
name: 'Tests: pretest/posttest'

on: [pull_request, push]

jobs:
  pretest:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - uses: ljharb/actions/node/install@main
        name: 'nvm install lts/* && npm install'
        with:
          node-version: 'lts/*'
      - run: npm run pretest

  posttest:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - uses: ljharb/actions/node/install@main
        name: 'nvm install lts/* && npm install'
        with:
          node-version: 'lts/*'
        env:
          NPM_CONFIG_LEGACY_PEER_DEPS: true
      - run: npx ls-engines
      - run: echo 'legacy-peer-deps=true' >> .npmrc
      - run: npm run posttest


================================================
FILE: .github/workflows/npm-publish.yml
================================================
name: Publish Package to npm
on:
  workflow_dispatch:
    inputs:
      tag:
        description: "Tag to publish"
        required: true

permissions:
  contents: read

jobs:
  check-version:
    runs-on: ubuntu-latest
    outputs:
      is-new-version: ${{ steps.cpv.outputs.is-new-version }}
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.inputs.tag }}

      - name: Validate semver pattern
        run: npx semver ${{ inputs.tag }}

      - name: Check package version
        id: cpv
        uses: PostHog/check-package-version@v2

      - name: Validate package version
        uses: actions/github-script@v6
        with:
          script: |
            const isNewVersion = `${{ steps.cpv.outputs.is-new-version }}`;
            if (isNewVersion === 'true') {
                console.log(`Version ${context.payload.inputs.tag} has not been published yet`);
            } else {
                core.setFailed(`Version ${context.payload.inputs.tag} is already published`);
            }

  check-status:
    needs: check-version
    if: needs.check-version.outputs.is-new-version == 'true'
    runs-on: ubuntu-latest
    steps:
      - name: Verify checks passed
        uses: actions/github-script@v6
        with:
          result-encoding: string
          retries: 3
          script: |
            console.log(process.cwd());
            const ref = context.payload.inputs.tag;

            console.log(`Checking status checks for ${ref}`);

            const { owner, repo } = context.repo;
            const { default_branch: branch } = context.payload.repository;

            const branchData = github.rest.repos.getBranch({ owner, repo, branch });

            const { data: { check_suites: checkSuites } } = await github.rest.checks.listSuitesForRef({ owner, repo, ref });

            const pending = checkSuites.filter(({ status }) => status !== 'completed')

            if (pending.length > 0) {
              core.setFailed(`Some workflows for ${context.payload.inputs.tag} are still in-progress`);
              pending.forEach(({ pull_requests, ...x }) => {
                core.debug(JSON.stringify(x));
              });
            }

            const result = await Promise.all(
              (await branchData).data.protection.required_status_checks.checks.map(({ context: check_name }) => (
                github.rest.checks.listForRef({
                  owner,
                  repo,
                  ref,
                  check_name,
                })
              )),
            );

            const checkRuns = result.flatMap(({ data: { check_runs } }) => check_runs);

            checkRuns.forEach(({ name, status, conclusion }) => {
              if (status !== 'completed' || conclusion !== 'success') {
                console.log(`${name} check failed`);
                core.setFailed(`Required status check ${name} did not succeed`);
              }
              console.log(`${name} check passed`);
            });

  publish:
    needs: [check-status]
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
    steps:
      - uses: step-security/harden-runner@v2
        with:
          egress-policy: block
          allowed-endpoints: >
            github.com:443
            nodejs.org:443
            prod.api.stepsecurity.io:443
            registry.npmjs.org:443
            raw.githubusercontent.com:443

      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.inputs.tag }}

      - uses: ljharb/actions/node/install@main
        name: "nvm install lts/* && npm install"
        with:
          node-version: "lts/*"
        env:
          NPM_CONFIG_LEGACY_PEER_DEPS: true

      - run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> .npmrc

      - run: npm publish --dry-run

      - uses: step-security/wait-for-secrets@v1
        id: wait-for-secrets
        with:
          slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
          secrets: |
            OTP:
              name: 'OTP to publish package'
              description: 'OTP from authenticator app'

      - run: npm publish --access public --otp ${{ steps.wait-for-secrets.outputs.OTP }}


================================================
FILE: .github/workflows/rebase.yml
================================================
name: Automatic Rebase

on: [pull_request_target]

jobs:
  _:
    uses: ljharb/actions/.github/workflows/rebase.yml@main
    secrets:
      token: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/release.yml
================================================
name: Release

on:
  push:
    tags:
      - "v*.*.*"

jobs:
  release:
    if: github.event.repository.fork == false

    runs-on: ubuntu-latest

    permissions:
      contents: write

    steps:
      - uses: step-security/harden-runner@v2
        with:
          allowed-endpoints:
            api.github.com:443
            github.com:443
            raw.githubusercontent.com:443
            nodejs.org:443
            registry.npmjs.org:443

      - name: Get version from tag
        id: tag_name
        run: echo "current_version=${GITHUB_REF#refs/tags/v}" >> "$GITHUB_OUTPUT"
        shell: bash

      - uses: actions/checkout@v4

      - uses: ljharb/actions/node/install@main
        with:
          node-version: node
          skip-install: true
          skip-ls-check: true

      - uses: mindsers/changelog-reader-action@v2
        id: changelog_reader
        with:
          version: ${{ steps.tag_name.outputs.current_version }}

      - name: Get common links from changelog
        id: changelog
        run: |
          # Parse the changelog for common links
          _links="$(egrep '^\[.*]:.+' ${GITHUB_WORKSPACE:-.}/CHANGELOG.md | sort -u)"
          _links="${_links//'%'/'%25'}"
          # _links="${_links//$'\n'/'%0A'}"
          _links="${_links//$'\r'/'%0D'}"
          # Set output 'links' to $_links
          DELIMITER=$(uuidgen)
          echo "links<<${DELIMITER}" >> "${GITHUB_OUTPUT}"
          echo "$_links" >> "${GITHUB_OUTPUT}"
          echo "${DELIMITER}" >> "${GITHUB_OUTPUT}"

      - name: 'concat data > tmp.md'
        run: |
          cat << 'EOF' > tmp.md
          ${{ steps.changelog_reader.outputs.changes }}
          ${{ steps.changelog.outputs.links }}
          EOF

      - run: cat tmp.md

      - id: prune-footnotes
        run: |
          DELIMITER=$(uuidgen)
          echo "body<<${DELIMITER}" >> "${GITHUB_OUTPUT}"
          npx gfm-footnotes -i tmp.md >> "${GITHUB_OUTPUT}"
          echo "${DELIMITER}" >> "${GITHUB_OUTPUT}"

      - uses: softprops/action-gh-release@v2
        with:
          body: |
            ${{ steps.prune-footnotes.outputs.body }}


================================================
FILE: .github/workflows/require-allow-edits.yml
================================================
name: Require “Allow Edits”

on: [pull_request_target]

jobs:
  _:
    name: "Require “Allow Edits”"

    runs-on: ubuntu-latest

    steps:
    - uses: ljharb/require-allow-edits@main


================================================
FILE: .github/workflows/smoke-test.yml
================================================
name: Smoke test

on:
  schedule:
    - cron: '0 0 * * SUN'
  workflow_dispatch:

jobs:
  smoke-test:
    if: ${{ github.repository == 'jsx-eslint/eslint-plugin-react' || github.event_name == 'workflow_dispatch' }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ljharb/actions/node/install@main
        name: 'nvm install lts/* && npm install'
        with:
          node-version: 'lts/*'
          skip-ls-check: true
      - run: |
          npm link
          npm link eslint-plugin-react
      - uses: AriPerkkio/eslint-remote-tester-run-action@v4
        with:
          issue-title: 'Results of weekly scheduled smoke test'
          issue-label: 'smoke-test'
          eslint-remote-tester-config: test/eslint-remote-tester.config.js


================================================
FILE: .github/workflows/type-check.yml
================================================
name: "Types: check published types"

on: [pull_request, push]

permissions:
  contents: read

jobs:
  test:
    name: TS ${{ matrix.ts_version }}, "${{ matrix.ts_lib }}"
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        ts_version:
          # The official ESLint types are not compatible with TS 3.9
          # - 3.9
          - '4.0'
          - 4.1
          - 4.2
          - 4.3
          - 4.4
          - 4.5
          - '5.0'
          - 5.5
          - 5.6
        ts_lib:
          - es2015
          - es2015,dom
          - es2020
          - esnext
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
          show-progress: false

      - uses: ljharb/actions/node/install@main
        name: 'nvm install lts/* && npm install'
        with:
          node-version: 'lts/*'
          skip-ls-check: true

      - name: build types
        run: npm run build-types

      # Pack the lib into a tarball so that when we install the lib later in the
      # test-published-types directory, it's only install `dependencies` of the
      # lib.
      - name: pack the lib
        run: npm pack --pack-destination /tmp/

      - name: find the packed lib
        run: echo "ESLINT_PLUGIN_REACT_PATH=$(ls /tmp/eslint-plugin-react*.tgz | tail -n 1)" >> $GITHUB_ENV

      - name: show the path to the packed lib
        run: echo "$ESLINT_PLUGIN_REACT_PATH"

      - name: npm install working directory
        run: npm install
        working-directory: test-published-types

      - name: install eslint-plugin-react and typescript version ${{ matrix.ts_version }}
        run: npm install --no-save "$ESLINT_PLUGIN_REACT_PATH" typescript@${{ matrix.ts_version }}
        working-directory: test-published-types

      - name: show installed typescript version
        run: npm list typescript --depth=0
        working-directory: test-published-types

      - name: show installed eslint-plugin-react version
        run: npm list eslint-plugin-react --depth=0
        working-directory: test-published-types

      - name: check types with lib "${{ matrix.ts_lib }}"
        run: npx tsc --lib ${{ matrix.ts_lib }}
        working-directory: test-published-types


================================================
FILE: .gitignore
================================================
# gitignore

lib-cov
*.seed
*.log
*.csv
*.dat
*.out
*.pid
*.gz
*.sublime-project
*.sublime-workspace
pids
logs
reports
coverage
.nyc_output/
build
node_modules
!tests/**/node_modules
npm-debug.log
sftp-config.json
eslint-remote-tester-results

# Only apps should have lockfiles
npm-shrinkwrap≥json
package-lock.json
yarn.lock

.npmignore

/lib/**/*.d.ts
/lib/**/*.d.ts.map
!/lib/types.d.ts
/index.d.ts
/index.d.ts.map


================================================
FILE: .markdownlint.json
================================================
{
  "line-length": false,
  "no-inline-html": false,
  "no-hard-tabs": { "spaces_per_tab": 2 },
  "ul-style": { "style": "dash" }
}


================================================
FILE: .markdownlintignore
================================================
CHANGELOG.md
LICENSE
node_modules


================================================
FILE: .npmrc
================================================
package-lock=false


================================================
FILE: CHANGELOG.md
================================================
# Change Log

All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/).
This change log adheres to standards from [Keep a CHANGELOG](https://keepachangelog.com).

## Unreleased

### Added
* [`async-server-action`]: add rule ([#3729][] @jorgezreik)
* [`jsx-props-no-multi-spaces`]: improve autofix for multi-line ([#3930][] @justisb)
* [`jsx-handler-names`]: support namespaced component names ([#3943][] @takuji)
* [`jsx-no-leaked-render`]: add `ignoreAttributes` option ([#3441][] @aleclarson)
* [`jsx-sort-props`]: add `sortFirst` option ([#3965][] @loderunner)
* [`jsx-no-literals`]: add `restrictedAttributes` option ([#3950][] @ushiboy)
* [`forbid-dom-props`]: Add `disallowedValues` option for forbidden props ([#3877][] @makxca)

### Fixed
* [`no-unknown-property`]: allow `onLoad` on `body` ([#3923][] @DerekStapleton)
* [`no-unknown-property`]: allow `closedby` on `dialog` ([#3980][] @ljharb)
* [`no-unknown-property`]: add `onScrollEnd` and `onScrollEndCapture` events as known properties ([#3958][] @xfeeefeee)
* Remove extra space from CLI warning ([#3942][] @junaidkbr)
* [`jsx-key`]: detect missing keys in return statement with ternary operator ([#3928][] @hyeonbinHur)
* [`jsx-key`]: detect missing keys in logical expressions ([#3986][] @yalperg)
* [`display-name`]: avoid false positive when React is shadowed ([#3926][] @hyeonbinHur)
* [`no-unused-prop-types`]: detect used props in nested components ([#3955][] @avaice)

### Changed
* [Docs] [`no-array-index-key`]: add template literal examples ([#3978][] @akahoshi1421)

[#3986]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3986
[#3978]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3978
[#3958]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3958
[#3980]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3980
[#3965]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3965
[#3955]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3955
[#3950]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3950
[#3943]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3943
[#3942]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3942
[#3930]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3930
[#3928]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3928
[#3926]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3926
[#3923]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3923
[#3877]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3877
[#3729]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3729
[#3441]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3441

## [7.37.5] - 2025.04.03

### Fixed
* [`no-unknown-property`]: allow shadow root attrs on `<template>` ([#3912][] @ljharb)
* [`prop-types`]: support `ComponentPropsWithRef` from a namespace import ([#3651][] @corydeppen)
* [`jsx-no-constructed-context-values`]: detect constructed context values in React 19 `<Context>` usage ([#3910][] @TildaDares)
* [`no-unknown-property`]: allow `transform-origin` on `rect` ([#3914][] @ljharb)

### Changed
* [Docs] [`button-has-type`]: clean up phrasing ([#3909][] @hamirmahal)

[7.37.5]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.37.4...v7.37.5
[#3914]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3914
[#3912]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3912
[#3910]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3910
[#3909]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3909
[#3651]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3651

## [7.37.4] - 2025.01.12

### Fixed
* [`no-unknown-property`]: support `onBeforeToggle`, `popoverTarget`, `popoverTargetAction` attributes ([#3865][] @acusti)
* [types] fix types of flat configs ([#3874][] @ljharb)

[7.37.4]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.37.3...v7.37.4
[#3874]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3874
[#3865]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3865

## [7.37.3] - 2024.12.23

### Fixed
* [`no-danger`]: avoid a crash on a nested component name ([#3833][] @ljharb)
* [Fix] types: correct generated type declaration ([#3840][] @ocavue)
* [`no-unknown-property`]: support `precedence` prop in react 19 ([#3829][] @acusti)
* [`prop-types`]: props missing in validation when using generic types from a namespace import ([#3859][] @rbondoc96)

### Changed
* [Tests] [`jsx-no-script-url`]: Improve tests ([#3849][] @radu2147)
* [Docs] fix broken links: [`default-props-match-prop-types`], [`jsx-boolean-value`], [`jsx-curly-brace-presence`], [`jsx-no-bind`], [`no-array-index-key`], [`no-is-mounted`], [`no-render-return-value`], [`require-default-props`] ([#3841][] @bastiendmt)

[7.37.3]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.37.2...v7.37.3
[#3859]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3859
[#3849]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3849
[#3841]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3841
[#3840]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3840
[#3833]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3833
[#3829]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3829

## [7.37.2] - 2024.10.22

### Fixed
* [`destructuring-assignment`]: fix false negative when using `typeof props.a` ([#3835][] @golopot)

### Changed
* [Refactor] [`destructuring-assignment`]: use `getParentStatelessComponent` ([#3835][] @golopot)

[7.37.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.37.1...v7.37.2
[#3835]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3835

## [7.37.1] - 2024.10.01

### Fixed
* [meta] do not npmignore `d.ts` files ([#3836][] @ljharb)

### Changed
* [readme] Fix shared settings link ([#3834][] @MgenGlder)

[7.37.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.37.0...v7.37.1
[#3836]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3836
[#3834]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3834

## [7.37.0] - 2024.09.26

### Added
* add type generation ([#3830][] @voxpelli)
* [`no-unescaped-entities`]: add suggestions ([#3831][] @StyleShit)
* [`forbid-component-props`]: add `allowedForPatterns`/`disallowedForPatterns` options ([#3805][] @Efimenko)
* [`no-unstable-nested-components`]: add `propNamePattern` to support custom render prop naming conventions ([#3826][] @danreeves)

### Changed
* [readme] flat config example for react 17+ ([#3824][] @GabenGar)

[7.37.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.36.1...v7.37.0
[#3831]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3831
[#3830]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3830
[#3826]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3826
[#3824]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3824
[#3805]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3805

## [7.36.1] - 2024.09.12

### Fixed
* [`no-is-mounted`]: fix logic in method name check ([#3821][] @Mathias-S)
* [`jsx-no-literals`]: Avoid crashing on valueless boolean props ([#3823][] @reosarevok)

[7.36.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.36.0...v7.36.1
[#3823]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3823
[#3821]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3821

## [7.36.0] - 2024.09.12

### Added
* [`no-string-refs`]: allow this.refs in > 18.3.0 ([#3807][] @henryqdineen)
* [`jsx-no-literals`] Add `elementOverrides` option and the ability to ignore this rule on specific elements ([#3812][] @Pearce-Ropion)
* [`forward-ref-uses-ref`]: add rule for checking ref parameter is added ([#3667][] @NotWoods)

### Fixed
* [`function-component-definition`], [`boolean-prop-naming`], [`jsx-first-prop-new-line`], [`jsx-props-no-multi-spaces`], `propTypes`: use type args ([#3629][] @HenryBrown0)
* JSX pragma: fail gracefully ([#3632][] @ljharb)
* [`jsx-props-no-spreading`]: add `explicitSpread` option to schema ([#3799][] @ljharb)

### Changed
* [Tests] add @typescript-eslint/parser v6 ([#3629][] @HenryBrown0)
* [Tests] add @typescript-eslint/parser v7 and v8 ([#3629][] @hampustagerud)
* [Docs] [`no-danger`]: update broken link ([#3817][] @lucasrmendonca)
* [types] add jsdoc type annotations ([#3731][] @y-hsgw)
* [Tests] `button-has-type`: add test case with spread ([#3731][] @y-hsgw)

[7.36.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.35.2...v7.36.0
[#3799]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3799
[#3632]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3632
[#3812]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3812
[#3731]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3731
[#3694]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3667
[#3629]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3629
[#3817]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3817
[#3807]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3807

## [7.35.2] - 2024.09.03

### Fixed
* [`jsx-curly-brace-presence`]: avoid autofixing attributes with double quotes to a double quoted attribute ([#3814][] @ljharb)

[7.35.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.35.1...v7.35.2
[#3814]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3814

## [7.35.1] - 2024.09.02

### Fixed
* [`jsx-curly-brace-presence`]: do not trigger on strings containing a quote character ([#3798][] @akulsr0)

[7.35.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.35.0...v7.35.1
[#3798]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3798

## [7.35.0] - 2024.07.19

### Added
* support eslint v9 ([#3759][] @mdjermanovic)
* export flat configs from plugin root and fix flat config crash ([#3694][] @bradzacher @mdjermanovic)
* add [`jsx-props-no-spread-multi`] ([#3724][] @SimonSchick)
* [`forbid-component-props`]: add `propNamePattern` to allow / disallow prop name patterns ([#3774][] @akulsr0)
* [`jsx-handler-names`]: support ignoring component names ([#3772][] @akulsr0)
* version settings: Allow react defaultVersion to be configurable ([#3771][] @onlywei)
* [`jsx-closing-tag-location`]: add `line-aligned` option ([#3777] @kimtaejin3)
* [`no-danger`]: add `customComponentNames` option ([#3748][] @akulsr0)

### Fixed
* [`no-invalid-html-attribute`]: substitute placeholders in suggestion messages ([#3759][] @mdjermanovic)
* [`sort-prop-types`]: single line type ending without semicolon ([#3784][] @akulsr0)
* [`require-default-props`]: report when required props have default value ([#3785][] @akulsr0)

### Changed
* [Refactor] `variableUtil`: Avoid creating a single flat variable scope for each lookup ([#3782][] @DanielRosenwasser)

[7.35.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.34.4...v7.35.0
[#3785]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3785
[#3784]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3784
[#3782]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3782
[#3777]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3777
[#3774]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3774
[#3772]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3772
[#3771]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3771
[#3759]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3759
[#3748]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3748
[#3724]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3724
[#3694]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3694

## [7.34.4] - 2024.07.13

### Fixed

* [`prop-types`]: fix `className` missing in prop validation false negative ([#3749][] @akulsr0)
* [`sort-prop-types`]: Check for undefined before accessing `node.typeAnnotation.typeAnnotation` ([#3779][] @tylerlaprade)

[7.34.4]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.34.3...v7.34.4
[#3779]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3779
[#3749]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3749

## [7.34.3] - 2024.06.18

### Fixed
* [`prop-types`]: null-check rootNode before calling getScope ([#3762][] @crnhrv)
* [`boolean-prop-naming`]: avoid a crash with a spread prop ([#3733][] @ljharb)
* [`jsx-boolean-value`]: `assumeUndefinedIsFalse` with `never` must not allow explicit `true` value ([#3757][] @6uliver)
* [`no-object-type-as-default-prop`]: enable rule for components with many parameters ([#3768][] @JulienR1)
* [`jsx-key`]: incorrect behavior for checkKeyMustBeforeSpread with map callbacks ([#3769][] @akulsr0)

[7.34.3]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.34.2...v7.34.3
[#3769]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3769
[#3768]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3768
[#3762]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3762
[#3757]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3757
[#3733]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3733

## [7.34.2] - 2024.05.24

### Fixed
* [`boolean-prop-naming`]: avoid a crash with a non-TSTypeReference type ([#3718][] @developer-bandi)
* [`jsx-no-leaked-render`]: invalid report if left eside is boolean ([#3746][] @akulsr0)
* [`jsx-closing-bracket-location`]: message shows `{{details}}` when there are no details ([#3759][] @mdjermanovic)
* [`no-invalid-html-attribute`]: ensure error messages are correct ([#3759][] @mdjermanovic, @ljharb)

### Changed
 * [Refactor] create various eslint utils to fix eslint deprecations ([#3759][] @mdjermanovic, @ljharb)

[7.34.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.34.1...v7.34.2
[#3759]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3759
[#3746]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3746
[#3718]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3718

## [7.34.1] - 2024.03.15

### Fixed
* [`jsx-no-leaked-render`]: prevent wrongly adding parens ([#3700][] @developer-bandi)
* [`boolean-prop-naming`]: detect TS interfaces ([#3701][] @developer-bandi)
* [`boolean-prop-naming`]: literalType error fix ([#3704][] @developer-bandi)
* [`boolean-prop-naming`]: allow TSIntersectionType ([#3705][] @developer-bandi)
* [`no-unknown-property`]: support `popover`, `popovertarget`, `popovertargetaction` attributes ([#3707][] @ljharb)
* [`no-unknown-property`]: only match `data-*` attributes containing `-` ([#3713][] @silverwind)
* [`checked-requires-onchange-or-readonly`]: correct options that were behaving opposite ([#3715][] @jaesoekjjang)
* [`boolean-prop-naming`]: avoid a crash with a non-TSTypeReference type ([#3718][] @developer-bandi)

### Changed
* [`boolean-prop-naming`]: improve error message (@ljharb)

[7.34.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.34.0...v7.34.1
[#3715]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3715
[#3713]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3713
[#3707]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3707
[#3705]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3705
[#3704]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3704
[#3701]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3701
[#3700]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3700

## [7.34.0] - 2024.03.03

### Added
* [`sort-prop-types`]: give errors on TS types ([#3615][] @akulsr0)
* [`no-invalid-html-attribute`]: add support for `apple-touch-startup-image` `rel` attributes in `link` tags ([#3638][] @thomashockaday)
* [`no-unknown-property`]: add requireDataLowercase option ([#3645][] @HermanBilous)
* [`no-unknown-property`]: add `displaystyle` on `<math>` ([#3652][] @lounsbrough)
* [`prefer-read-only-props`], [`prop-types`], component detection: allow components to be async functions ([#3654][] @pnodet)
* [`no-unknown-property`]: support `onResize` on audio/video tags ([#3662][] @caesar1030)
* [`jsx-wrap-multilines`]: add `never` option to prohibit wrapping parens on multiline JSX ([#3668][] @reedws)
* [`jsx-filename-extension`]: add `ignoreFilesWithoutCode` option to allow empty files ([#3674][] @burtek)
* [`jsx-boolean-value`]: add `assumeUndefinedIsFalse` option ([#3675][] @developer-bandi)
* `linkAttribute` setting, [`jsx-no-target-blank`]: support multiple properties ([#3673][] @burtek)
* [`jsx-no-script-url`]: add `includeFromSettings` option to support `linkAttributes` setting ([#3673][] @burtek)
* [`jsx-one-expression-per-line`]: add `non-jsx` option to allow non-JSX children in one line ([#3677][] @burtek)
* add [`checked-requires-onchange-or-readonly`] rule ([#3680][] @jaesoekjjang)

### Fixed
* [`jsx-no-leaked-render`]: preserve RHS parens for multiline jsx elements while fixing ([#3623][] @akulsr0)
* [`jsx-key`]: detect conditional returns ([#3630][] @yialo)
* [`jsx-newline`]: prevent a crash when `allowMultilines` ([#3633][] @ljharb)
* [`no-unknown-property`]: use a better regex to avoid a crash ([#3666][] @ljharb @SCH227)
* [`prop-types`]: handle nested forwardRef + memo ([#3679][] @developer-bandi)
* [`no-unknown-property`]: add `fetchPriority` ([#3697][] @SevereCloud)
* [`forbid-elements`]: prevent a crash on `createElement()` ([#3632][] @ljharb)

### Changed
* [`jsx-boolean-value`]: make error messages clearer ([#3691][] @developer-bandi)
* [Refactor] `propTypes`: extract type params to var ([#3634][] @HenryBrown0)
* [Refactor] [`boolean-prop-naming`]: invert if statement ([#3634][] @HenryBrown0)
* [Refactor] [`function-component-definition`]: exit early if no type params ([#3634][] @HenryBrown0)
* [Refactor] [`jsx-props-no-multi-spaces`]: extract type parameters to var ([#3634][] @HenryBrown0)
* [Docs] [`jsx-key`]: fix correct example ([#3656][] @developer-bandi)
* [Tests] `jsx-wrap-multilines`: passing tests ([#3545][] @burtek)
* [Docs] [`iframe-missing-sandbox`]: fix link to iframe attribute on mdn ([#3690][] @nnmrts)
* [Docs] [`hook-use-state`]: fix an undefined variable ([#3626][] @chentsulin)

[7.34.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.33.2...v7.34.0
[#3697]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3697
[#3691]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3691
[#3690]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3690
[#3680]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3680
[#3679]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3679
[#3677]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3677
[#3675]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3675
[#3674]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3674
[#3673]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3673
[#3668]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3668
[#3666]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3666
[#3662]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3662
[#3656]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3656
[#3654]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3654
[#3652]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3652
[#3645]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3645
[#3638]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3638
[#3634]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3634
[#3633]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3633
[#3632]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3632
[#3630]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3630
[#3626]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3626
[#3623]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3623
[#3615]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3615
[#3545]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3545

## [7.33.2] - 2023.08.15

### Fixed
* [`no-deprecated`]: prevent false positive on commonjs import ([#3614][] @akulsr0)
* [`no-unsafe`]: report on the method instead of the entire component (@ljharb)
* [`no-deprecated`]: report on the destructured property instead of the entire variable declarator (@ljharb)
* [`no-deprecated`]: report on the imported specifier instead of the entire import statement (@ljharb)
* [`no-invalid-html-attribute`]: report more granularly (@ljharb)

[7.33.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.33.1...v7.33.2
[#3614]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3614

## [7.33.1] - 2023.07.29

### Fixed
* [`require-default-props`]: fix config schema ([#3605][] @controversial)
* [`jsx-curly-brace-presence`]: Revert [#3538][] due to issues with intended string type casting usage ([#3611][] @taozhou-glean)
* [`sort-prop-types`]: ensure sort-prop-types respects noSortAlphabetically ([#3610][] @caesar1030)

[7.33.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.33.0...v7.33.1
[#3611]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3611
[#3610]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3610
[#3605]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3605

## [7.33.0] - 2023.07.19

### Added
* [`display-name`]: add `checkContextObjects` option ([#3529][] @JulesBlm)
* [`jsx-first-prop-new-line`]: add `multiprop` option ([#3533][] @haydncomley)
* [`no-deprecated`]: add React 18 deprecations ([#3548][] @sergei-startsev)
* [`forbid-component-props`]: add `disallowedFor` option ([#3417][] @jacketwpbb)

### Fixed
* [`no-array-index-key`]: consider flatMap ([#3530][] @k-yle)
* [`jsx-curly-brace-presence`]: handle single and only expression template literals ([#3538][] @taozhou-glean)
* [`no-unknown-property`]: allow `onLoad` on `source` (@ljharb)
* [`jsx-first-prop-new-line`]: ensure autofix preserves generics in component name ([#3546][] @ljharb)
* [`no-unknown-property`]: allow `fill` prop on `<symbol>` ([#3555][] @stefanprobst)
* [`display-name`], [`prop-types`]: when checking for a capitalized name, ignore underscores entirely ([#3560][] @ljharb)
* [`no-unused-state`]: avoid crashing on a class field function with destructured state ([#3568][] @ljharb)
* [`no-unused-prop-types`]: allow using spread with object expression in jsx ([#3570][] @akulsr0)
* Revert "[`destructuring-assignment`]: Handle destructuring of useContext in SFC" ([#3583][] [#2797][] @102)
* [`prefer-read-only-props`]: add TS support ([#3593][] @HenryBrown0)

### Changed
* [Docs] [`jsx-newline`], [`no-unsafe`], [`static-property-placement`]: Fix code syntax highlighting ([#3563][] @nbsp1221)
* [readme] resore configuration URL ([#3582][] @gokaygurcan)
* [Docs] [`jsx-no-bind`]: reword performance rationale ([#3581][] @gpoole)
- [Docs] [`jsx-first-prop-new-line`]: add missing `multiprop` value ([#3598][] @dzek69)

[7.33.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.32.2...v7.33.0
[#3598]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3598
[#3593]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3593
[#3583]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3583
[#3582]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3582
[#3581]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3581
[#3570]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3570
[#3568]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3568
[#3563]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3563
[#3560]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3560
[#3555]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3555
[#3548]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3548
[#3546]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3546
[#3538]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3538
[#3533]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3533
[#3530]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3530
[#3529]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3529
[#3417]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3417

## [7.32.2] - 2023.01.28

### Fixed
* configs: restore `parserOptions` in legacy configs ([#3523][] @ljharb)
* [`jsx-no-constructed-context-values`], [`jsx-no-useless-fragment`]: add a rule schema (@ljharb)
( [`no-unknown-property`]: add `fill` for `<marker>` ([#3525][] @alexey-koran)

[7.32.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.32.1...v7.32.2
[#3525]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3525
[#3520]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3523

## [7.32.1] - 2023.01.16

### Fixed
* prevent circular dependency in index and "all" config ([#3519][] @ljharb)
* [`destructuring-assignment`]: do not force destructuring of optionally chained properties ([#3520][] @ljharb)

[7.32.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.32.0...v7.32.1
[#3520]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3520
[#3519]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3519

## [7.32.0] - 2023.01.10

### Added
* support new config system ([#3429][] @jjangga0214)
* [`hook-use-state`]: add `allowDestructuredState` option ([#3449][] @ljharb)
* add [`sort-default-props`] and deprecate [`jsx-sort-default-props`] ([#1861][] @alexzherdev)
* add [`no-object-type-as-default-prop`] rule ([#2848][] @cyan33 @fengkx)

### Fixed
* configs: avoid legacy config system error ([#3461][] @ljharb)
* [`sort-prop-types`]: restore autofixing ([#3452][], [#3471][] @ROSSROSALES)
* [`no-unknown-property`]: do not check `fbs` elements ([#3494][] @brianogilvie)
* [`jsx-newline`]: No newline between comments and jsx elements ([#3493][] @justmejulian)
* [`jsx-no-leaked-render`]: Don't report errors on empty strings if React >= v18 ([#3488][] @himanshu007-creator)
* [`no-invalid-html-attribute`]: convert autofix to suggestion ([#3474][] @himanshu007-creator @ljharb)
* [`jsx-no-leaked-render`]: fix removing parentheses for conditionals ([#3502][] @akulsr0)
* [`jsx-no-leaked-render`]: invalid fixes in coerce mode ([#3511][] @akulsr0)
* [`destructuring-assignment`]: Handle destructuring of useContext in SFC ([#2797][] @Zinyon @ljharb)

### Changed
* [Docs] [`jsx-no-leaked-render`]: Remove mentions of empty strings for React 18 ([#3468][] @karlhorky)
* [Docs] update `eslint-doc-generator` to v1.0.0 ([#3499][] @bmish)
* [meta] add issue template ([#3483][] @ROSSROSALES)
* [Docs] Use emoji for jsx-runtime config and config file for eslint-doc-generator ([#3504][] @bmish)
* [Docs] [`prefer-exact-props`]: fix example flow syntax ([#3510][] @smackfu)
* [Perf] use `anyOf` instead of `oneOf` (@ljharb @remcohaszing)

[7.32.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.11...v7.32.0
[#3511]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3511
[#3510]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3510
[#3504]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3504
[#3502]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3502
[#3499]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3499
[#3494]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3494
[#3493]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3493
[#3488]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3488
[#3483]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3483
[#3474]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3474
[#3471]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3471
[#3468]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3468
[#3461]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3461
[#3452]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3452
[#3449]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3449
[#3429]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3429
[#2848]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2848
[#2797]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2797
[#1861]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1861

## [7.31.11] - 2022.11.17

### Fixed
* [`jsx-no-target-blank`]: allow ternaries with literals ([#3464][] @akulsr0)
* [`no-unknown-property`]: add `inert` attribute ([#3484][] @ljharb)
* [`jsx-key`]: detect keys in logical expression and conditional expression ([#3490][] @metreniuk)

### Changed
* [Perf] component detection: improve performance by avoiding traversing parents unnecessarily ([#3459][] @golopot)
* [Docs] `forbid-component-props`: inclusive language w/ allowlist ([#3473][] @AndersDJohnson)
* [Docs] automate doc generation with `eslint-doc-generator` ([#3469][] @bmish)

[7.31.11]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.10...v7.31.11
[#3490]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3490
[#3484]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3484
[#3473]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3473
[#3469]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3469
[#3464]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3464
[#3459]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3459

## [7.31.10] - 2022.10.10

### Fixed
* [`no-unknown-property`]: allow `allowFullScreen` on `iframe` ([#3455][] @almeidx)

[7.31.10]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.9...v7.31.10
[#3455]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3455

## [7.31.9] - 2022.10.09

### Fixed
* [`no-unknown-property`]: add `dialog` attributes ([#3436][] @ljharb)
* [`no-arrow-function-lifecycle`]: when converting from an arrow, remove the semi and wrapping parens ([#3337][] @ljharb)
* [`jsx-key`]: Ignore elements inside `React.Children.toArray()` ([#1591][] @silvenon)
* [`jsx-no-constructed-context-values`]: fix false positive for usage in non-components ([#3448][] @golopot)
* [`static-property-placement`]: warn on nonstatic expected-statics ([#2581][] @ljharb)
* [`no-unknown-property`]: properly tag-restrict case-insensitive attributes (@ljharb)
* [`no-unknown-property`]: allow `webkitDirectory` on `input`, case-insensitive ([#3454][] @ljharb)

### Changed
* [Docs] [`no-unknown-property`]: fix typo in link ([#3445][] @denkristoffer)
* [Perf] component detection: improve performance by optimizing getId ([#3451][] @golopot)
* [Docs] [`no-unstable-nested-components`]: Warn about memoized, nested components ([#3444][] @eps1lon)

[7.31.9]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.8...v7.31.9
[#3454]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3454
[#3451]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3451
[#3448]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3448
[#3445]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3445
[#3444]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3444
[#3436]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3436
[#3337]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3337
[#2581]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2581
[#1591]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1591

## [7.31.8] - 2022.09.08

### Fixed
* [`no-unknown-property`]: add `viewBox` on `marker` ([#3416][] @ljharb)
* [`no-unknown-property`]: add `noModule` on `script` ([#3414][] @ljharb)
* [`no-unknown-property`]: allow `onLoad` on `<object>` ([#3415][] @OleksiiKachan)
* [`no-multi-comp`]: do not detect a function property returning only null as a component ([#3412][] @ljharb)
* [`no-unknown-property`]: allow `abbr` on `<th>` and `<td>` ([#3419][] @OleksiiKachan)
* [`no-unknown-property`]: add `viewBox` for `pattern`, `symbol`, `view` ([#3424][] @MNBuyskih)
* [`no-unknown-property`]: add `align` on all the tags that support it ([#3425][] @ljharb)

### Changed

* [meta] npmignore markdownlint config ([#3413][] @jorrit)

[7.31.8]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.7...v7.31.8
[#3425]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3425
[#3424]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3424
[#3419]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3419
[#3416]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3416
[#3415]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3415
[#3414]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3414
[#3413]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3413
[#3412]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3412

## [7.31.7] - 2022.09.05

### Fixed
* [`no-unknown-property`]: avoid warning on `fbt` nodes entirely ([#3391][] @ljharb)
* [`no-unknown-property`]: add `download` property support for `a` and `area` ([#3394][] @HJain13)
* [`no-unknown-property`]: allow `webkitAllowFullScreen` and `mozAllowFullScreen` ([#3396][] @ljharb)
* [`no-unknown-property`]: `controlsList`, not `controlList` ([#3397][] @ljharb)
* [`no-unknown-property`]: add more capture event properties ([#3402][] @sjarva)
* [`no-unknown-property`]: Add more one word properties found in DefinitelyTyped's react/index.d.ts ([#3402][] @sjarva)
* [`no-unknown-property`]: Mark onLoad/onError as supported on iframes ([#3398][] @maiis, [#3406][] @akx)
* [`no-unknown-property`]: allow `imageSrcSet` and `imageSizes` attributes on `<link>` ([#3407][] @terrymun)
* [`no-unknown-property`]: add `border`; `focusable` on `<svg>` ([#3404][] [#3404][] @ljharb)
* [`no-unknown-property`]: React lowercases `data-` attrs ([#3395][] @ljharb)
* [`no-unknown-property`]: add `valign` on table components ([#3389][] @ljharb)

[7.31.7]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.6...v7.31.7
[#3407]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3407
[#3406]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3406
[#3405]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3405
[#3404]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3404
[#3402]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3402
[#3398]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3398
[#3397]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3397
[#3396]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3396
[#3395]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3395
[#3394]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3394
[#3391]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3391
[#3389]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3389

## [7.31.6] - 2022.09.04

### Fixed
* [`no-unknown-property`]: `onError` and `onLoad` both work on `img` and `script` ([#3388][] @ljharb)
* [`no-unknown-property`]: data-* attributes can have numbers ([#3390][] @sjarva)
* [`no-unknown-property`]: add more audio/video attributes ([#3390][] @sjarva)
* [`no-unknown-property`]: move allowfullscreen to case ignored attributes ([#3390][] @sjarva)
* [`no-unknown-property`]: fill works on line, mask, and use elements ([#3390][] @sjarva)
* [`no-unknown-property`]: add onMouseMoveCapture as valid react-specific attribute ([#3390][] @sjarva)
* [`no-unknown-property`]: make onLoad and onError be accepted on more elements ([#3390][] @sjarva)

### Changed

* [Docs] [`no-unknown-property`]: add a mention about using ignores properties with libraries that add props ([#3390][] @sjarva)

[7.31.6]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.5...v7.31.6
[#3390]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3390
[#3388]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3388

## [7.31.5] - 2022.09.03

### Fixed
* [`no-unknown-property`]: add properties `onToggle`, `fill`, `as`, and pointer events ([#3385][] @sjarva)
* [`no-unknown-property`]: add `defaultChecked` property ([#3385][] @sjarva)
* [`no-unknown-property`]: add touch and media event related properties ([#3385][] @sjarva)
* [`no-unknown-property`]: `children` is always an acceptable prop; iframes have `scrolling`; video has `playsInline` ([#3385][] @ljharb)

[7.31.5]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.4...v7.31.5
[#3385]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3385

## [7.31.4] - 2022.09.03

### Fixed
* [`no-unknown-property`]: support `checked` on inputs ([#3383][] @ljharb)

[#3383]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3383

[7.31.4]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.3...v7.31.4

## [7.31.3] - 2022.09.02

### Fixed
* [`no-unknown-property`]: add SVG and meta properties ([#3381][] @AhmadMayo)

[7.31.3]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.2...v7.31.3
[#3381]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3381

## [7.31.2] - 2022.09.02

### Fixed
* [`jsx-key`]: avoid a crash with optional chaining ([#3371][] @ljharb)
* [`jsx-sort-props`]: avoid a crash with spread props ([#3376][] @ljharb)
* [`no-unknown-property`]: properly recognize valid data- and aria- attributes ([#3377][] @sjarva)
* [`no-unknown-property`]: properly recognize unknown HTML/DOM attributes ([#3377][] @sjarva)

### Changed
* [Docs] [`jsx-sort-props`]: replace ref string with ref variable ([#3375][] @Luccasoli)
* [Refactor] [`no-unknown-property`]: improve jsdoc; extract logic to separate functions ([#3377][] @sjarva)
* [Refactor] [`no-unknown-property`]: update DOM properties to include also one word properties ([#3377][] @sjarva)

[7.31.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.1...v7.31.2
[#3377]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3377
[#3376]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3376
[#3375]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3375
[#3371]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3371

## [7.31.1] - 2022.08.26

### Fixed
* [`jsx-key`]: fix detecting missing key in `Array.from`'s mapping function ([#3369][] @sjarva)
* [`jsx-no-leaked-render`]: coerce strategy now allows a ternary ([#3370][] @sjarva)

[7.31.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.0...v7.31.1
[#3370]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3370
[#3369]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3369

## [7.31.0] - 2022.08.24

### Added
* [`jsx-newline`]: add `allowMultiline` option when prevent option is true ([#3311][] @TildaDares)
* [`forbid-dom-props`]: add `disallowedFor` option ([#3338][] @TildaDares)

### Fixed
* [`jsx-no-literals`]: properly error on children with noAttributeStrings: true ([#3317][] @TildaDares)
* [`jsx-key`]: catch key errors inside conditional statements ([#3320][] @TildaDares)
* [`display-name`]: Accept forwardRef and Memo nesting in newer React versions ([#3321][] @TildaDares)
* [`jsx-key`]: avoid a crash from optional chaining from [#3320][] ([#3327][] @ljharb)
* [`jsx-key`]: avoid a crash on a non-array node.body from [#3320][] ([#3328][] @ljharb)
* [`display-name`]: fix false positive for assignment of function returning null ([#3331][] @apbarrero)
* [`display-name`]: fix identifying `_` as a capital letter ([#3335][] @apbarrero)
* [`require-default-props`]: avoid a crash when function has no props param ([#3350][] @noahnu)
* [`display-name`], component detection: fix HOF returning null as Components ([#3347][] @jxm-math)
* [`forbid-prop-types`]: Ignore objects that are not of type React.PropTypes ([#3326][] @TildaDares)
* [`display-name`], component detection: fix false positive for HOF returning only nulls and literals ([#3305][] @golopot)
* [`jsx-no-target-blank`]: False negative when rel attribute is assigned using ConditionalExpression ([#3332][] @V2dha)
* [`jsx-no-leaked-render`]: autofix nested "&&" logical expressions ([#3353][] @hduprat)
* [`jsx-sort-props`]: sorted attributes now respect comments ([#3358][] @ROSSROSALES)

### Changed
* [Refactor] [`jsx-indent-props`]: improved readability of the checkNodesIndent function ([#3315][] @caroline223)
* [Tests] [`jsx-indent`], [`jsx-one-expression-per-line`]: add passing test cases ([#3314][] @ROSSROSALES)
* [Refactor] `boolean-prop-naming`, `jsx-indent`: avoid assigning to arguments ([#3316][] @caroline223)
* [Docs] [`sort-comp`]: add class component examples ([#3339][] @maurer2)
* [Docs] [`jsx-no-useless-fragment`]: add more examples of correct code ([#3349][] @karlhorky)
* [Docs] [`jsx-boolean-value`]: add jsdoc types for helper functions ([#3344][] @caroline223)
* [readme] remove dead codeclimate badge, add actions badge (@ljharb)
* [readme] Remove dead david-dm badge ([#3262][] @ddzz)
* [Refactor] [`jsx-closing-bracket-location`], [`jsx-no-bind`]: fix eslint issues ([#3351][] @caroline223)
* [Tests] [`function-component-definition`]: add passing test cases ([#3355][] @TildaDares)
* [Docs] [`jsx-no-target-blank`]: Fix link to link-type-noreferrer ([#3319][] @Luccasoli)
* [Docs] document which rules provide suggestions ([#3359][], [#3365][] @bmish)
* [Docs] Consistent rule descriptions and doc sections ([#3361][] @bmish)
* [Docs] Standardize deprecated rule notice ([#3364][] @bmish)
* [Docs] Fix typos ([#3366][] @bmish)
* [Docs] Add markdownlint for documentation formatting consistency ([#3367][] @bmish)
* [Docs] Add config notice to rule docs ([#3362][] @bmish)

[7.31.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.30.1...v7.31.0
[#3367]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3367
[#3366]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3366
[#3365]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3365
[#3364]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3364
[#3362]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3362
[#3361]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3361
[#3359]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3359
[#3358]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3358
[#3355]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3355
[#3353]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3353
[#3351]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3351
[#3350]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3350
[#3349]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3349
[#3347]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3347
[#3344]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3344
[#3339]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3339
[#3338]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3338
[#3335]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3335
[#3332]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3332
[#3331]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3331
[#3328]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3328
[#3327]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3327
[#3326]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3326
[#3321]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3321
[#3320]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3320
[#3319]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3319
[#3317]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3317
[#3316]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3316
[#3315]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3315
[#3314]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3314
[#3311]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3311
[#3305]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3305
[#3262]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3262

## [7.30.1] - 2022.06.23

### Fixed
* [`display-name`]: fix false positive for HOF returning only nulls ([#3291][] @golopot)
* [`jsx-no-leaked-render`]: avoid unnecessary negation operators and ternary branches deletion ([#3299][] @Belco90)
* [`display-name`]: fix false positive when using memo ([#3304][] @golopot)

### Changed
* [Docs] [`jsx-tag-spacing`]: rename option from [#3264][] ([#3294[] @ljharb)
* [Docs] [`jsx-key`]: split the examples ([#3293][] @ioggstream)

[7.30.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.30.0...v7.30.1
[#3304]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3304
[#3299]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3299
[#3294]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3294
[#3293]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3293
[#3291]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3291

## [7.30.0] - 2022.05.18

### Added
* [`destructuring-assignment`]: add option `destructureInSignature` ([#3235][] @golopot)
* [`no-unknown-property`]: Allow crossOrigin on image tag (SVG) ([#3251][] @zpao)
* [`jsx-tag-spacing`]: Add `multiline-always` option ([#3260][], [#3264][] @Nokel81)
* [`function-component-definition`]: replace `var` by `const` in certain situations ([#3248][] @JohnBerd @SimeonC)
* add [`jsx-no-leaked-render`] ([#3203][] @Belco90)
* [`require-default-props`]: add option `functions` ([#3249][] @nix6839)
* [`jsx-newline`]: Add `allowMultilines` option ([#3311][] @TildaDares)

### Fixed
* [`hook-use-state`]: Allow UPPERCASE setState setter prefixes ([#3244][] @duncanbeevers)
* `propTypes`: add `VFC` to react generic type param map ([#3230][] @dlech)
* [`no-unused-state`]: avoid a crash ([#3258][] @WillyLiaoWH @ljharb)
* [`jsx-no-useless-fragment`]: use proper apostrophe in error message ([#3266][] @develohpanda)
* `propTypes`: handle imported types/interface in forwardRef generic ([#3280][] @vedadeepta)
* [`button-has-type`]: fix exception for `<button type>` ([#3255][] @meowtec)
* [`no-unstable-nested-components`]: Improve error message and catch React.memo() ([#3247][] @zacharyliu)

### Changed
* [readme] remove global usage and eslint version from readme ([#3254][] @aladdin-add)
* [Refactor] fix linter errors ([#3261][] @golopot)
* [Docs] [`no-unused-prop-types`]: fix syntax errors ([#3259][] @mrdulin)
* [Refactor] improve performance for detecting function components ([#3265][] @golopot)
* [Refactor] improve performance for detecting class components ([#3267][] @golopot)
* [Refactor] [`no-deprecated`]: improve performance ([#3271][] @golopot)
* [Refactor] [`no-did-mount-set-state`], [`no-did-update-set-state`], [`no-will-update-set-state`]: improve performance ([#3272][] @golopot)
* [Refactor] improve performance by avoiding unnecessary `Components.detect` ([#3273][] @golopot)
* [Refactor] add `isParenthesized` AST util ([#3203][] @Belco90)
* [Docs] `default-props-match-prop-types`, `require-default-props`, `sort-prop-types`: fix typos ([#3279][] @nix6839)
* [Refactor] improve performance of rule merging ([#3281][] @golopot)
* [Refactor] improve performance of component detection ([#3276][] @golopot)

[7.30.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.29.4...v7.30.0
[#3281]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3281
[#3280]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3280
[#3279]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3279
[#3276]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3276
[#3273]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3273
[#3272]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3272
[#3271]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3271
[#3267]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3267
[#3266]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3266
[#3265]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3265
[#3264]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3264
[#3261]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3261
[#3260]: https://github.jsx-eslintckcr/eslint-plugin-react/pull/3260
[#3259]: https://githubjsx-eslintickcr/eslint-plugin-react/pull/3259
[#3258]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3258
[#3255]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3255
[#3254]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3254
[#3251]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3251
[#3249]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3249
[#3248]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3248
[#3247]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3247
[#3244]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3244
[#3235]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3235
[#3230]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3230
[#3203]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3203

## [7.29.4] - 2022.03.13

### Fixed
* [`no-unused-state`]: avoid a crash on a class field gDSFP ([#3236][] @ljharb)
* [`boolean-prop-naming`]: handle React.FC, intersection, union types ([#3241][] @ljharb)

[7.29.4]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.29.3...v7.29.4
[#3241]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3241
[#3236]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3236

## [7.29.3] - 2022.03.03

### Fixed
* [`no-unused-state`]: avoid a crash on type-only gDSFP declarations ([#3225][] @ljharb)
* [`jsx-curly-brace-presence`]: the string "never" defaults to `propElementValues` as `ignore` ([#3228][] @ljharb)
* `propTypes`: add `VFC` to react generic list ([#3230][] @ljharb)

[7.29.3]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.29.2...v7.29.3
[#3230]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3230
[#3228]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3228
[#3225]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3225

## [7.29.2] - 2022.02.25

### Fixed
* [`jsx-curly-brace-presence`]: avoid warning on curlies containing quote characters ([#3214][] @ljharb)
* [`jsx-indent`]: do not report on non-jsx-returning ternaries that contain null ([#3222][] @ljharb)
* [`jsx-indent`]: properly report on returned ternaries with jsx ([#3222][] @ljharb)
* [`no-array-index-key`]: detect named-imported `cloneElement`/`createElement` ([#3213][] @ljharb)

[7.29.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.29.1...v7.29.2
[#3222]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3222
[#3214]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3214
[#3213]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3213

## [7.29.1] - 2022.02.25

### Fixed
* [`jsx-key`]: prevent false "missing array key" warning ([#3215][] @ljharb)
* [`jsx-indent`]: avoid checking returns sans jsx ([#3218][] @ljharb)
* [`jsx-key`]: avoid a crash ([#3220][] @ljharb)
* version settings: avoid a crash with an invalid version ([#3219][] @ljharb)

[7.29.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.29.0...v7.29.1
[#3220]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3220
[#3219]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3219
[#3218]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3218
[#3215]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3215

## [7.29.0] - 2022.02.24

### Added
* add [`hook-use-state`] rule to enforce symmetric useState hook variable names ([#2921][] @duncanbeevers)
* [`jsx-no-target-blank`]: Improve fixer with option `allowReferrer` ([#3167][] @apepper)
* [`jsx-curly-brace-presence`]: add "propElementValues" config option ([#3191][] @ljharb)
* add [`iframe-missing-sandbox`] rule ([#2753][] @tosmolka @ljharb)
* [`no-did-mount-set-state`], [`no-did-update-set-state`]: no-op with react >= 16.3 ([#1754][] @ljharb)
* [`jsx-sort-props`]: support multiline prop groups ([#3198][] @duhamelgm)
* [`jsx-key`]: add `warnDuplicates` option to warn on duplicate jsx keys in an array ([#2614][] @ljharb)
* [`jsx-sort-props`]: add `locale` option ([#3002][] @ljharb)

### Fixed
* [`prop-types`], `propTypes`: add support for exported type inference ([#3163][] @vedadeepta)
* [`no-invalid-html-attribute`]: allow 'shortcut icon' on `link` ([#3174][] @Primajin)
* [`prefer-exact-props`] improve performance for `Identifier` visitor ([#3190][] @meowtec)
* `propTypes`: Handle TSTypeReference in no-unused-prop-type ([#3195][] @niik)
* [`sort-prop-types`]: avoid repeated warnings of the same node/reason ([#519][] @ljharb)
* [`jsx-indent`]: Fix indent handling for closing parentheses ([#620][] @stefanbuck])
* [`prop-types`]/`propTypes`: follow a returned identifier to see if it is JSX ([#1046][] @ljharb)
* [`no-unused-state`]: TS: support `getDerivedStateFromProps` as an arrow function ([#2061][] @ljharb)
* [`no-array-index-key`]: catch `.toString` and `String()` usage ([#2813][] @RedTn)
* [`function-component-definition`]: do not break on dollar signs ([#3207][] @ljharb)
* [`prefer-stateless-function`]: avoid a crash inside `doctrine` ([#2596][] @ljharb)
* [`prop-types`]: catch infinite loop ([#2861][] @ljharb)
* [`forbid-prop-types`]: properly report name in error message; check undestructured arguments ([#2945][] @ljharb)

### Changed
* [readme] change [`jsx-runtime`] link from branch to sha ([#3160][] @tatsushitoji)
* [Docs] HTTP => HTTPS ([#3133][] @Schweinepriester)
* [readme] Some grammar fixes ([#3186][] @JJ)
* [Docs] [`jsx-no-target-blank`]: Improve readme ([#3169][] @apepper)
* [Docs] [`display-name`]: improve examples ([#3189][] @golopot)
* [Refactor] [`no-invalid-html-attribute`]: sort HTML_ELEMENTS and messages ([#3182][] @Primajin)
* [Docs] [`forbid-foreign-prop-types`]: document `allowInPropTypes` option ([#1815][] @ljharb)
* [Refactor] [`jsx-sort-default-props`]: remove unnecessary code ([#1817][] @ljharb)
* [Docs] [`jsx-no-target-blank`]: fix syntax highlighting ([#3199][] @shamrin)
* [Docs] [`jsx-key`]: improve example ([#3202][] @chnakamura)
* [Refactor] [`jsx-key`]: use more AST selectors (@ljharb)

[7.29.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.28.0...v7.29.0
[#3207]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3207
[#3202]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3202
[#3199]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3199
[#3198]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3198
[#3195]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3195
[#3191]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3191
[#3190]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3190
[#3189]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3189
[#3186]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3186
[#3182]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3182
[#3174]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3174
[#3169]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3169
[#3167]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3167
[#3163]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3163
[#3160]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3160
[#3133]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3133
[#3002]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3002
[#2945]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2945
[#2921]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2921
[#2861]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2861
[#2813]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2813
[#2753]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2753
[#2614]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2614
[#2596]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2596
[#2061]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2061
[#1817]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1817
[#1815]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1815
[#1754]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1754
[#1046]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1046
[#620]: https://github.com/jsx-eslint/eslint-plugin-react/pull/620
[#519]: https://github.com/jsx-eslint/eslint-plugin-react/issues/519

## [7.28.0] - 2021.12.22

### Added
* [`function-component-definition`]: support namedComponents option being an array ([#3129][] @petersendidit)

### Fixed
* [`jsx-indent-props`]: Reset `line.isUsingOperator` correctly after ternary ([#3146][] @tobiaswaltl)

### Changed
* [Refactor] [`no-arrow-function-lifecycle`], [`no-unused-class-component-methods`]: use report/messages convention (@ljharb)
* [Tests] component detection: Add testing scaffolding ([#3149][] @duncanbeevers)
* [New] component detection: track React imports ([#3149][] @duncanbeevers)
* [New] component detection: add `util.isReactHookCall` ([#3156][] @duncanbeevers)

[7.28.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.27.1...v7.28.0
[#3156]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3156
[#3149]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3149
[#3146]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3146
[#3129]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3129

## [7.27.1] - 2021.11.18

### Fixed
* [`no-invalid-html-attribute`]: allow `link` `rel` to have `apple-touch-icon`, `mask-icon` ([#3132][] @ljharb)
* [`no-unused-class-component-methods`]: add `getChildContext` lifecycle method ([#3136][] @yoyo837)
* [`prop-types`]: fix false positives on renames in object destructuring ([#3142][] @golopot)
* [`no-arrow-function-lifecycle`]: fix invalid autofix from a concise arrow method to a regular one ([#3145][] @ljharb)
* [`display-name`]: avoid false positives on non-creatClass object expressions ([#3144] @ljharb)

### Changed
* [readme] fix syntax typo ([#3141][] @moselhy)

[7.27.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.27.0...v7.27.1
[#3145]: https://github.com/jsx-eslint/eslint-plugin-react/issue/3145
[#3144]: https://github.com/jsx-eslint/eslint-plugin-react/issue/3144
[#3142]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3142
[#3141]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3141
[#3136]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3136
[#3132]: https://github.com/jsx-eslint/eslint-plugin-react/issue/3132

## [7.27.0] - 2021.11.09

### Added
* support eslint 8.x ([#3059][] @MichaelDeBoey @ljharb)
* [`no-unused-class-component-methods`]: Handle unused class component methods ([#2166][] @jakeleventhal @pawelnvk)
* add [`no-arrow-function-lifecycle`] ([#1980][] @ngtan)
* add support for `@typescript-eslint/parser` v5 (@ljharb)
* [`no-invalid-html-attribute`]: add rule ([#2863][] @Nokel81)

### Fixed
* `propTypes`: add `VoidFunctionComponent` to react generic list ([#3092][] @vedadeepta)
* [`jsx-fragments`], [`jsx-no-useless-fragment`]: avoid a crash on fragment syntax in `typescript-eslint` parser (@ljharb)
* [`jsx-props-no-multi-spaces`]: avoid a crash on long member chains in tag names in `typescript-eslint` parser (@ljharb)
* [`no-unused-prop-types`], `usedPropTypes`: avoid crash with typescript-eslint parser (@ljharb)
* [`display-name`]: unwrap TS `as` expressions ([#3110][] @ljharb)
* [`destructuring-assignment`]: detect refs nested in functions ([#3102] @ljharb)
* [`no-unstable-components`]: improve handling of objects containing render function properties ([#3111] @fizwidget)
* [`prop-types`], `propTypes`: add forwardRef<>, ForwardRefRenderFunction<> prop-types ([#3112] @vedadeepta)
* [`no-typos`]: prevent a crash when using private methods (@ljharb)
* [`destructuring-assignment`], component detection: improve component detection ([#3122] @vedadeepta)
* [`no-invalid-html-attribute`]: avoid crash on spread props ([#3126] @ljharb)

### Changed
* [Tests] test on the new babel eslint parser ([#3113] @ljharb)
* [Docs] [`jsx-no-target-blank`]: adjust options description ([#3124] @gebsh)

[7.27.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.26.1...v7.27.0
[#3126]: https://github.com/jsx-eslint/eslint-plugin-react/issue/3126
[#3124]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3124
[#3122]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3122
[#3113]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3113
[#3112]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3112
[#3111]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3111
[#3110]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3110
[#3102]: https://github.com/jsx-eslint/eslint-plugin-react/issue/3102
[#3092]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3092
[#3059]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3059
[#2863]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2863
[#2166]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2166
[#1980]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1980

## [7.26.1] - 2021.09.29

### Fixed
* [`no-namespace`]: fix crash on non-string React.createElement name ([#3082] @ljharb)
* [`no-namespace`]: avoid crash on non-string createElement values ([#3085] @ljharb)
* [`jsx-no-target-blank`]: improve error messages ([#3088] @cutiful)

### Changed
* [Docs] [`jsx-max-props-per-line`]: fix options example ([#3083] @MrRaiter)

[7.26.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.26.0...v7.26.1
[#3088]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3088
[#3085]: https://github.com/jsx-eslint/eslint-plugin-react/issue/3085
[#3083]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3083
[#3082]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3082

## [7.26.0] - 2021.09.20

### Added
* add [`no-namespace`] rule ([#2640] @yacinehmito @ljharb)
* [`jsx-max-props-per-line`]: add `single` and `multi` options ([#3078] @SIL0RAK)

### Fixed
* [`display-name`]: Get rid of false position on component detection ([#2759] @iiison)

### Changed
* [`no-access-state-in-setstate`]: passing test for “don't error if it's not a React Component” ([#1873] @kentcdodds)

[7.26.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.25.3...v7.26.0
[#3078]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3078
[#2640]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2640
[#2759]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2759
[#1873]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1873

## [7.25.3] - 2021.09.19

### Fixed
* [`prop-types`], `propTypes`: bail out unknown generic types inside func params ([#3076] @vedadeepta)

### Changed
* [readme] Update broken link for configuration files ([#3071] @prateek3255)
* [Refactor] create/extract `isCreateElement` and `isDestructuredFromPragmaImport` utils (@ljharb)

[7.25.3]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.25.2...v7.25.3
[#3076]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3076
[#3071]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3071

## [7.25.2] - 2021.09.16

### Fixed
* [`jsx-no-useless-fragments`]: Handle insignificant whitespace correctly when `allowExpressions` is `true` ([#3061][] @benj-dobs)
* [`prop-types`], `propTypes`: handle implicit `children` prop in react's generic types ([#3064][] @vedadeepta)
* [`display-name`]: fix arrow function returning result of function call with JSX arguments being interpreted as component ([#3065][] @danielfinke)
* [`jsx-no-target-blank`]: avoid crash on attr-only href ([#3066][] @ljharb @gaz77a)
* [`jsx-uses-vars`]: ignore lowercase tag names ([#3070][] @alanorozco)

[7.25.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.25.1...v7.25.2
[#3070]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3070
[#3066]: https://github.com/jsx-eslint/eslint-plugin-react/issue/3066
[#3065]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3065
[#3064]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3064
[#3061]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3061

## [7.25.1] - 2021.08.29

### Fixed
* [`no-this-in-sfc`], component detection: Improve stateless component detection ([#3056][] @Wesitos)

[7.25.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.25.0...v7.25.1
[#3056]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3056

## [7.25.0] - 2021.08.27

### Added
* [`jsx-no-useless-fragments`]: add option to allow single expressions in fragments ([#3006][] @mattdarveniza)
* add [`prefer-exact-props`] rule ([#1547][] @jomasti)
* [`jsx-no-target-blank`]: add `forms` option ([#1617][] @jaaberg)
* [`jsx-pascal-case`]: add `allowLeadingUnderscore` option ([#3039][] @pangaeatech)
* [`no-children-prop`]: Add `allowFunctions` option ([#1903][] @alexzherdev)
* [`jsx-runtime`]: set `parserOptions.jsxPragma` for `@typescript-eslint/parser` ([bb64df65][] @ljharb)

### Fixed
* component detection: use `estraverse` to improve component detection ([#2992][] @Wesitos)
* [`destructuring-assignment`], [`no-multi-comp`], [`no-unstable-nested-components`], component detection: improve component detection ([#3001][] @vedadeepta)
* [`no-deprecated`]: fix crash on rest elements ([#3016][] @ljharb)
* [`destructuring-assignment`]: get the contextName correctly ([#3025][] @ohhoney1)
* [`no-typos`]: prevent crash on styled components and forwardRefs ([#3036][] @ljharb)
* [`destructuring-assignment`], component detection: handle default exports edge case ([#3038][] @vedadeepta)
* [`no-typos`]: fix crash on private methods ([#3043][] @ljharb)
* [`jsx-no-bind`]: handle local function declarations ([#3048][] @p7g)
* [`prop-types`], `propTypes`: handle React.* TypeScript types ([#3049][] @vedadeepta)
* [`prop-types`], `propTypes`: add handling for `FC<Props>`, improve tests ([#3051][] @vedadeepta)
* [`prop-types`], `propTypes`: prevent crash introduced in [#3051][] ([#3053][] @ljharb)

### Changed
* [Docs] [`jsx-no-bind`]: updates discussion of refs ([#2998][] @dimitropoulos)
* [Refactor] `utils/Components`: correct spelling and delete unused code ([#3026][] @ohhoney1)
* [Docs] [`jsx-uses-react`], [`react-in-jsx-scope`]: document [`react/jsx-runtime`] config ([#3018][] @pkuczynski @ljharb)
* [Docs] [`require-default-props`]: fix small typo ([#2994][] @evsasse)
* [Tests] add weekly scheduled smoke tests ([#2963][] @AriPerkkio)
* [Docs] improve instructions for `jsx-runtime` config ([#3052][] @ljharb)

[7.25.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.24.0...v7.25.0
[bb64df65]: https://github.com/jsx-eslint/eslint-plugin-react/commit/bb64df6505b3e9a01da5b61626ab9f544caea438
[#3053]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3053
[#3052]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3052
[#3051]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3051
[#3049]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3049
[#3048]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3048
[#3043]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3043
[#3039]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3039
[#3038]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3038
[#3036]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3036
[#3026]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3026
[#3025]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3025
[#3018]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3018
[#3016]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3016
[#3006]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3006
[#3001]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3001
[#2998]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2998
[#2994]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2994
[#2992]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2992
[#2963]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2963
[#1903]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1903
[#1617]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1617
[#1547]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1547

## [7.24.0] - 2021.05.27

### Added
* component detection: add componentWrapperFunctions setting ([#2713][] @@jzabala @LandonSchropp)
* [`no-unused-prop-types`]: add ignore option ([#2972][] @grit96)
* version detection: support recursive processor virtual filename ([#2965][] @JounQin)

### Fixed
* [`jsx-handler-names`]: properly substitute value into message ([#2975][] @G-Rath)
* [`jsx-uses-vars`]: ignore namespaces ([#2985][] @remcohaszing)
* [`jsx-no-undef`]: ignore namespaces ([#2986][] @remcohaszing)
* [`jsx-child-element-spacing`]: Don't flag whitespace around `<br/>` tags ([#2989][] @pascalpp)

### Changed
* [Docs] [`jsx-newline`]: Fix minor spelling error on rule name ([#2974][] @DennisSkoko)
* [Refactor] [`void-dom-elements-no-children`]: improve performance
* [readme] fix missing trailing commas ([#2980][] @sugardon)
* [readme] fix broken anchor link ([#2982][] @vzvu3k6k)
* [Docs] [`jsx-child-element-spacing`]: fixes sentence which ends abruptly ([#2990][] @pascalpp)

[7.24.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.23.2...v7.24.0
[#2990]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2990
[#2989]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2989
[#2986]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2986
[#2985]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2985
[#2982]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2982
[#2980]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2980
[#2977]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2977
[#2975]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2975
[#2974]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2974
[#2972]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2972
[#2965]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2965
[#2713]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2713

## [7.23.2] - 2021.04.08

### Fixed
* [`jsx-max-depth`]: Prevent getting stuck in circular references ([#2957][] @AriPerkkio)
* [`jsx-no-target-blank`]: fix handling of `warnOnSpreadAttributes` being false ([#2953][] @Nokel81)
* [`forbid-dom-props`]: support `JSXNamespacedName` ([#2961][] @mrtnzlml)
* [`forbid-component-props`]: support `JSXNamespacedName` (@ljharb)

### Changed
* Fix CHANGELOG.md ([#2950][] @JounQin)

[7.23.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.23.1...v7.23.2
[#2961]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2961
[#2953]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2953
[#2957]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2957
[#2950]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2950

## [7.23.1] - 2021.03.23

### Fixed
* version detection: support processor virtual filename ([#2949][] @JounQin)

[7.23.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.23.0...v7.23.1
[#2949]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2949

## [7.23.0] - 2021.03.22

### Added
* [`jsx-no-target-blank`]: add fixer ([#2862][] @Nokel81)
* [`jsx-pascal-case`]: support minimatch `ignore` option ([#2906][] @bcherny)
* [`jsx-pascal-case`]: support `allowNamespace` option ([#2917][] @kev-y-huang)
* [`jsx-newline`]: Add prevent option ([#2935][] @jsphstls)
* [`no-unstable-nested-components`]: Prevent creating unstable components inside components ([#2750][] @AriPerkkio)
* added `jsx-runtime` config, for the modern JSX runtime transform (@ljharb)

### Fixed
* [`jsx-no-constructed-context-values`]: avoid a crash with `as X` TS code ([#2894][] @ljharb)
* [`jsx-no-constructed-context-values`]: avoid a crash with boolean shorthand ([#2895][] @ljharb)
* [`static-property-placement`]: do not report non-components ([#2893][] @golopot)
* [`no-array-index-key`]: support optional chaining ([#2897][] @SyMind)
* [`no-typos`]: avoid a crash on bindingless `prop-types` import; add warning ([#2899][] @ljharb)
* [`jsx-curly-brace-presence`]: ignore containers with comments ([#2900][] @golopot)
* [`destructuring-assignment`]: fix a false positive for local prop named `context` in SFC ([#2929][] @SyMind)
* [`jsx-no-target-blank`]: Allow rel="noreferrer" when `allowReferrer` is true ([#2925][] @edemaine)
* [`boolean-prop-naming`]: add check for typescript "boolean" type ([#2930][] @vedadeepta)
* version detection: Add tests that verify versioning works for sibling and child projects ([#2943][] @jcrosetto)
* [`jsx-curly-newline`]: Update error messages ([#2933][] @jbrower2)

### Changed
* [Docs] [`jsx-no-constructed-context-values`][]: fix invalid example syntax ([#2910][] @kud)
* [readme] Replace lists of rules with tables in readme ([#2908][] @motato1)
* [Docs] added missing curly braces ([#2923][] @Muditxofficial)

[7.23.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.22.0...v7.23.0
[#2943]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2943
[#2935]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2935
[#2933]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2933
[#2930]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2930
[#2929]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2929
[#2925]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2925
[#2923]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2923
[#2917]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2917
[#2910]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2910
[#2908]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2908
[#2906]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2906
[#2900]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2900
[#2899]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2899
[#2897]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2897
[#2895]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2895
[#2894]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2894
[#2893]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2893
[#2862]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2862
[#2750]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2750

## [7.22.0] - 2020.12.29

### Added
* [`jsx-key`]: added `checkKeyMustBeforeSpread` option for new jsx transform ([#2835][] @morlay)
* [`jsx-newline`]: add new rule ([#2693][] @jzabala)
* [`jsx-no-constructed-context-values`]: add new rule which checks when the value passed to a Context Provider will cause needless rerenders ([#2763][] @dylanOshima)
* [`jsx-indent-props`]: add `ignoreTernaryOperator` option ([#2846][] @SebastianZimmer)
* [`jsx-no-target-blank`]: Add `warnOnSpreadAttributes` option ([#2855][] @michael-yx-wu)

### Fixed
* [`display-name`]/component detection: avoid a crash on anonymous components ([#2840][] @ljharb)
* [`prop-types`]: function in class that returns a component causes false warning in typescript ([#2843][] @SyMind)
* [`jsx-no-target-blank`]: avoid a crash with a non-string literal ([#2851][] @ljharb)
* [`jsx-no-script-url`]: avoid crash with boolean `href` ([#2871][] @ljharb, @AriPerkkio)
* [`no-typos`]: avoid crash with computed method name ([#2870][] @ljharb, @AriPerkkio)
* [`jsx-max-depth`]: avoid crash with childless jsx child ([#2869][] @ljharb, @AriPerkkio)
* [`jsx-wrap-multilines`]: fix crash with `declaration`s that are on a new line after `=` ([#2875][] @ljharb)
* [`no-unknown-property`]: avoid crash with prop named with Object.prototype key ([#2879][] @ljharb, @AriPerkkio)
* [`prop-types`]: default argument does not count as props-types declaration ([#2877][] @golopot)
* [`jsx-props-no-multi-spaces`]: fix a false positive for beside comments ([#2878][] @golopot)
* [`jsx-no-undef`]: handle the TS parser combined with an invalid ecmaVersion ([#2882][] @ljharb)
* [`no-unused-prop-types`]: apply `skipShapeProps` to exact types ([#2883][] @golopot)
* [`no-danger-with-children`]/[`style-prop-object`]/[`no-adjacent-inline-elements`]: add category, URL ([#2891][] @thofmann)

### Docs
* [`no-unused-prop-types`]: Add new example to rule ([#2852][] @thehereward)
* [`prop-types`]: fix example ([#2881][] @technote-space)

[7.22.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.21.5...v7.22.0
[#2891]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2891
[#2883]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2883
[#2882]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2882
[#2881]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2881
[#2879]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2879
[#2878]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2878
[#2877]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2877
[#2875]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2875
[#2871]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2871
[#2870]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2870
[#2869]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2869
[#2855]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2855
[#2852]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2852
[#2851]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2851
[#2846]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2846
[#2843]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2843
[#2840]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2840
[#2835]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2835
[#2763]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2763
[#2693]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2693

## [7.21.5] - 2020.10.19

### Fixed
* [`jsx-indent-props`]: Apply indentation when using brackets ([#2826][] @Moong0122)
* [`jsx-handler-names`]: Skip inline handlers when checkInlineFunction=false ([#2833][] @onigoetz)

### Changed
* [Tests] `jsx-indent-props`: Add passing test ([#2823][] @Hypnosphi)

[7.21.5]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.21.4...v7.21.5
[#2833]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2833
[#2826]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2826
[#2823]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2823

## [7.21.4] - 2020.10.09

### Fixed
* [`no-unused-prop-types`]: Silence false positive on `never` type in TS ([#2815][] @pcorpet)
* [`jsx-indent-props`]: Apply indentation when operator is used in front of the upper line ([#2808][], [#2820][] @Moong0122)
* [Deps] update `jsx-ast-utils` ([#2822][] [jsx-eslint/jsx-ast-utils#102][] @ljharb)

[7.21.4]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.21.3...v7.21.4
[#2822]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2822
[#2820]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2820
[#2815]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2815
[#2808]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2808
[jsx-eslint/jsx-ast-utils#102]: https://github.com/jsx-eslint/jsx-ast-utils/pull/102

## [7.21.3] - 2020.10.02

### Fixed
* [`prop-types`]: fix Cannot read property 'type' of undefined error when destructured param ([#2807][] @minwe)
* [`no-typos`]: avoid crash on spread syntax in createReactClass object ([#2816][] @ljharb @Songyu-Wang)

[7.21.3]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.21.2...v7.21.3
[#2816]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2816
[#2807]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2807

## [7.21.2] - 2020.09.24

### Fixed
* [`prop-types`]: handle RestElement in destructured param ([#2805][] @hank121314)

[7.21.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.21.1...v7.21.2
[#2805]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2805

## [7.21.1] - 2020.09.23

### Fixed
* [`jsx-handler-names`]: avoid a crash when an inline prop is not a MemberExpression ([#2803][] @willheslam)

[7.21.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.21.0...v7.21.1
[#2803]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2803

## [7.21.0] - 2020.09.22

### Added
* [`button-has-type`]: support trivial ternary expressions ([#2748][] @Hypnosphi)
* [`jsx-handler-names`]: add `checkInlineFunction` option ([#2761][] @dididy)
* [`jsx-no-literals`]: add `noAttributeStrings` option ([#2782][] @TaLeaMonet)
* [`prop-types`]: add support for `PropTypes.exact` ([#2740][] @jzabala)
* [`jsx-filename-extension`]: Add allow option ([#2746][] @remcohaszing)

### Fixed
* [`function-component-definition`]: ignore object properties ([#2771][] @stefan-wullems)
* [`forbid-component-props`]: Implemented support for "namespaced" components ([#2767][] @mnn)
* [`prefer-read-only-props`]: support Flow `$ReadOnly` ([#2772][], [#2779][], [#2770][] @karolina-benitez)
* [`jsx-handler-names`]: handle whitespace ([#2789][] @AriPerkkio)
* [`prop-types`]: Detect TypeScript types for destructured default prop values ([#2780][] @sunghyunjo)
* [`jsx-pascal-case`]: Handle single character namespaced component ([#2791][] @daviferreira)
* [`jsx-closing-bracket-location`]: In `tag-aligned`, made a distinction between tabs and spaces ([#2796][] @Moong0122)
* [`jsx-handler-names`]: false positive when handler name begins with number ([#1689][] @jsphstls)
* [`prop-types`]: Detect JSX returned by sequential expression ([#2801][] @mikol)
* [`jsx-props-no-multi-spaces`]: "Expected no line gap between" false positive ([#2792][] @karolina-benitez)
* [`no-unknown-property`]: check attributes with any input case ([#2790][] @julienw)
* [`prop-types`]/[`no-unused-prop-types`]: handle CallExpression in ReturnType ([#2802][] @hank121314)
* [`jsx-uses-react`]: mark fragment variables as used ([#2775][] @remcohaszing)
* [`no-unused-prop-types`]: improve component declared props detection ([#2755][] @jzabala)
* [`jsx-props-no-multi-spaces`]: Show error in multi-line props ([#2756][] @iiison)

### Changed
* [Tests] [`jsx-one-expression-per-line`]: add passing tests ([#2799][] @TaLeaMonet)
* [Tests] [`prop-types`]: add test ([#2757][] @jzabala)

[7.21.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.20.6...v7.21.0
[#2802]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2802
[#2801]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2801
[#2799]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2799
[#2796]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2796
[#2792]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2792
[#2791]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2791
[#2790]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2790
[#2789]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2789
[#2782]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2782
[#2780]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2780
[#2779]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2779
[#2775]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2775
[#2772]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2772
[#2771]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2771
[#2770]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2770
[#2767]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2767
[#2761]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2761
[#2757]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2757
[#2756]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2756
[#2748]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2748
[#2746]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2746
[#2740]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2740
[#1689]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1689

## [7.20.6] - 2020.08.12

### Fixed
* [`jsx-curly-brace-presence`]: fix multiline comment case ([#2716][] @ljharb)
* [`jsx-no-useless-fragment`]: accept fragments with call expressions ([#2744][] @hasparus)
* [`jsx-no-literals`] with allowStrings doesn't work in props ([#2736][] @karolina-benitez)
* [`no-find-dom-node`]: Improve error message ([#2741][] @ecraig12345)
* [`no-typos`]/[`no-unused-prop-types`]/propType detection: Support typescript props interface extension and TSTypeAliasDeclaration ([#2721][] @hank121314)
* [`no-this-in-sfc`]/component detection: add arrow function to list of allowed position for component ([#2708][] @jzabala)
* [`no-access-state-in-setstate`]: add check for class component ([#2711][] @jzabala)
* [`prop-types`]/component detection: avoid a crash when a local `createElement` identifier exists ([#2733][] @ljharb)

### Changed
* [`no-unused-prop-types`]: add test assigning this.props to a variable

[7.20.6]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.20.5...v7.20.6
[#2744]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2744
[#2741]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2741
[#2737]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2737
[#2736]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2736
[#2733]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2733
[#2721]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2721
[#2716]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2716
[#2711]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2711
[#2708]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2708

## [7.20.5] - 2020.07.28

### Fixed
* [`jsx-curly-brace-presence`]: disable disallowed JSX text chars check in props ([#2710][] @jzabala)
* [`no-unused-state`]: check for class expression ([#2712][] @jzabala)
* [`prop-types`]: handle anonymous functions ([#2730][], [#2731][] @odinho @wKich @jzabala)

### Docs
* [Docs] [`no-access-state-in-setstate`]: fix example ([#2724][] @youngjuning)

[7.20.5]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.20.4...v7.20.5
[#2731]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2731
[#2730]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2730
[#2724]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2724
[#2712]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2712
[#2710]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2710

## [7.20.4] - 2020.07.26

### Fixed
* improve algorithm to check if a variable is coming from the pragma ([#2706][] @jzabala)
* [`prop-types`]: handle component returning null ([#2696][] @hank121314)
* [`prop-types`]/[`function-component-definition`]: Add check for first letter capitalization in functional component detection ([#2699][] @jzabala)
* [`prop-types`]: use variable value in prop type fields defined by variables ([#2704][] @jzabala)
* [`no-typos`]: warn on a bindingless `react` import

### Changed
* [Tests] `boolean-prop-naming`: Added test for function invocation of bool ([#2697][] @ajkovar)
* [Tests] `jsx-curly-brace-presence`, `jsx-no-comment-textnodes`: add passing tests
* [Refactor] `no-unused-state`: avoid a loop

[7.20.4]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.20.3...v7.20.4
[#2704]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2704
[#2699]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2699
[#2697]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2697
[#2696]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2696

## [7.20.3] - 2020-06-30

### Fixed
* [`no-unused-prop-types`]/[`prop-types`]: typescript interface support literal type and only FunctionComponent should have propTypes validation ([#2690][] @hank121314)
* [`no-unused-prop-types`]/TypeScript: avoid crash on indexable interface ([#2687][] @ljharb)

[7.20.3]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.20.2...v7.20.3
[#2690]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2690
[#2687]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2687

## [7.20.2] - 2020-06-29

### Fixed
* [`no-unused-prop-types`]: handle optional chaining ([#2679][] @hank121314)
* [`jsx-pascal-case`]: fix a false positive with "H1" ([#2683][] @ljharb)
* [`jsx-no-useless-fragment`]: avoid a crash when autofixing a self-closing React.Fragment ([#2680][] @ljharb)
* [`forbid-prop-types`]: avoid crash ([#2682][] @ljharb)

[7.20.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.20.1...v7.20.2
[#2683]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2683
[#2682]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2682
[#2680]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2680
[#2679]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2679

## [7.20.1] - 2020-06-28

### Fixed
* [`forbid-dom-props`], [`function-component-definition`]: fix schema typos ([#2667][] @mflorence99)
* [`no-unused-prop-types`]: fix with typescript eslint parser ([#2661][] @eltonio450)

### Changed
* [`forbid-prop-types`]: warn on destructured values as well ([#2676][] @ajkovar)
* relax JSX pragma regexp ([#2643][] @gfmio)
* Cache detected React version ([#2673][] @lencioni)
* [refactor] [`jsx-pascal-case`]: Remove xregexp ([#2636][] @yacinehmito))
* [Tests] a [`no-typos`] test fails in eslint v7.3 ([#2678][] @toshi-toma)
* [Deps] update `jsx-ast-utils`, `object.entries`, `resolve`
* [Dev Deps] update `@types/eslint`, `@types/estree`, `@types/node`, `@typescript-eslint/parser`, `eslint-config-airbnb-base`, `eslint-plugin-eslint-plugin`, `eslint-plugin-import`, `typescript`

[7.20.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.20.0...v7.20.1
[#2676]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2676
[#2673]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2673
[#2667]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2667
[#2661]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2661
[#2643]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2643
[#2636]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2636

## [7.20.0] - 2020-05-12

### Added
* support eslint v7 ([#2635][] @ljharb, @toshi-toma)
* [`forbid-component-props`][]/[`forbid-dom-props`][]: Allow a custom message with forbid props ([#2615][] @mtamhankar1)
* [`jsx-no-literals`][]: add `ignoreProps` option to ignore props validation ([#2146][] @iiison)

### Fixed
* [`jsx-sort-props`][]: only use localeCompare when case is ignored ([#2556][] @tanmoyopenroot)
* [`jsx-key`][]: add a failing test case for optional chaining ([#2610][] @JonathanLee-LX)
* [`no-unused-state`][]: handle optional chaining ([#2588][] @golopot)
* [`jsx-pascal-case`][]: Do not consider namespaces when checking for DOM ([#2638][] @yacinehmito)
* [`jsx-curly-spacing`][], [`jsx-no-bind`][], `usedPropTypes` util: avoid node.start and node.end ([25b1936][] @toshi-toma)
* [`jsx-no-target-blank`][]: allow `no-referrer` without `noopener` by default ([#2043][] @seancrater)
* [`button-has-type`][]: improve message when non-static value is used ([aecff62][] @golopot)
* [`no-adjacent-inline-elements`][]: prevent crash on nullish children ([#2621][] @Rogdham)
* [`prop-types`][]: avoid crash when spreading any type ([#2606][] @golopot))
* [`require-render-return`][]: add missing "a" ([#2604][] @leothorp)
* [`jsx-no-comment-textnodes`][]: fix for `@typescript-eslint/parser` ([#2601][] @Axnyff)
* [`displayName`][]: avoid a crash when using React.memo ([#2587][] @golopot)

### Docs
* Clean up examples in rule docs ([#2546][] @silvenon)
* [readme] Add Rules of Hooks to Other useful plugins section ([#2633][] @petetnt)
* [`no-this-in-sfc`][]: backtick `this` ([#2616][] @mrflip)
* [`function-component-definition`][]: Fix unnamedComponents option examples ([#2608][] @vkrol))

### Changed
* [Deps] Move "semver" to devDependencies ([#2595][] @rajivshah3)
* [eslint] remove `operator-linebreak` override ([#2578][] @golopot)
* [Tests] `button-has-type`: ensure no mistakenly allowed identifiers named `button`/`submit`/`reset` ([#2625][] @golopot)
* [Tests] `displayName`: add a test case ([#2593][] @golopot)
* [Dev Deps] update `@types/eslint`, `@types/estree`, `@types/node`, `@typescript-eslint/parser`, `coveralls`, `eslint-config-airbnb-base`, `eslint-plugin-import`, `typescript`

[7.20.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.19.0...v7.20.0
[#2638]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2638
[#2635]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2635
[#2633]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2633
[#2625]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2625
[#2621]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2621
[#2616]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2616
[#2615]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2615
[#2610]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2610
[#2608]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2608
[#2606]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2606
[#2604]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2604
[#2601]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2601
[#2595]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2595
[#2593]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2593
[#2588]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2588
[#2587]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2587
[#2578]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2578
[#2556]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2556
[#2546]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2546
[#2146]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2146
[#2043]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2043
[25b1936]: https://github.com/jsx-eslint/eslint-plugin-react/commit/25b19365e6cc3f188d6a5ed6cecc70fe6f1af7cd
[aecff62]: https://github.com/jsx-eslint/eslint-plugin-react/commit/aecff625bf0590ed4d80ed6b58b81af11901f5f6

## [7.19.0] - 2020-03-06

### Added
 * [`style-prop-object`][]: Add `allow` option ([#1819][] @hornta)
 * [`jsx-pascal-case`][]: Support unicode characters ([#2557][] @Svish)

### Fixed
 * [`prefer-stateless-function`][]: avoid crash on ts empty constructor ([#2582][] @golopot)
 * [`no-adjacent-inline-elements`][]: avoid a crash ([#2575] @ljharb)
 * [`no-unused-prop-types`][]: Change the reporting to point to a more accurate node ([#2292][] @jseminck)
 * [`self-closing-comp`][]: consider JSXMemberExpression as component too ([#2572][] @Belco90)
 * [`no-unused-prop-types`][]: make `markPropTypesAsUsed` work with `TSEmptyBodyFunctionExpression` AST node ([#2560][] @guillaumewuip)
 * [`displayName`][] (but really, `propTypes` detection): do not crash on empty flow type spreads ([#2570][] @ljharb)

### Changed
 * [readme] Small visual inconsistency ([#2568] @arvigeus)
 * [docs] add `react/` prefix to rule name, for consistency
 * [`no-unescaped-entities`][]: skip test cases that are now parsing errors in acorn-jsx@5.2.0 ([#2583] @golopot)

[7.19.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.18.3...v7.19.0
[#2583]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2583
[#2582]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2582
[#2575]: https://github.com/jsx-eslint/eslint-plugin-react/issue/2575
[#2572]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2572
[#2570]: https://github.com/jsx-eslint/eslint-plugin-react/issue/2570
[#2568]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2568
[#2560]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2560
[#2557]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2557
[#2292]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2292
[#1819]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1819

## [7.18.3] - 2020-02-02

### Fixed
 * [`jsx-indent`][]: don't check literals not within JSX ([#2564][] @toshi-toma)

[7.18.3]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.18.2...v7.18.3
[#2564]: https://github.com/jsx-eslint/eslint-plugin-react/issue/2564

## [7.18.2] - 2020-02-01

### Fixed
 * [`jsx-indent`][]: avoid a crash on non-string literals ([#2561][] @ljharb)

[7.18.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.18.1...v7.18.2
[#2561]: https://github.com/jsx-eslint/eslint-plugin-react/issue/2561

## [7.18.1] - 2020-02-01

### Fixed
 * [`jsx-indent`][]: Does not check indents for JSXText ([#2542][] @toshi-toma)
 * [`jsx-props-no-spreading`][]: add support for namespaced jsx components ([#2534][] @jonathanpalma)
 * [`jsx-no-target-blank`][]: allow rel to be an expression ([#2544][] @odinho)
 * [`sort-comp`][]: `|` isn’t a valid regex flag; `u` and `s` are (@ljharb)

### Changed
 * [Docs] use `markdown-magic` to automatically sort all rules alphabetically ([#1742][] @ybiquitous)
 * [Docs] [`jsx-props-no-spreading`][]: fix typo to use correct rule ([#2547][] @jonggyun))

[7.18.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.18.0...v7.18.1
[#2547]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2547
[#2544]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2544
[#2542]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2542
[#2534]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2534
[#1742]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1742

## [7.18.0] - 2020-01-15

### Added
 * [`require-default-props`][]: add option to ignore functional components ([#2532][] @RedTn)
 * [`function-component-definition`][]: Enforce a specific function type for function components ([#2414][] @Stefanwullems)
 * [`no-adjacent-inline-elements`][]: Prevent adjacent inline elements not separated by whitespace ([#1155][] @SeanHayes)
 * [`jsx-no-script-url`][]: prevent usage of `javascript:` URLs ([#2419][] @sergei-startsev)

### Fixed
 * [`jsx-pascal-case`][]: false negative with namespacing ([#1337][] @mfyuce)
 * [`jsx-curly-brace-presence`][]: Fix `curly-brace-presence` edge cases ([#2523][] @rafbgarcia)
 * [`prop-types`][]: Does not validate missing propTypes for LogicalExpression ([#2533][] @toshi-toma)
 * [`no-unknown-property`][]: allowTransparency does not exist in React >= v16.1 ([#1538][] @dawidvdh)
 * [`jsx-curly-brace-presence`][]: Fix error related to tags line break ([#2521][] @rafbgarcia)
 * [`no-typos`][]: Compilation error when method name is string instead of identifier ([#2514][] @shijistar)
 * [`jsx-curly-brace-presence`][]: allow trailing spaces in TemplateLiteral ([#2507][] @doochik)
 * [`no-unused-prop-types`], [`no-unused-state`]: fix false positives when using TS type assertions ([#2536][] @kdmadej)

### Changed
 * [Docs] [`no-render-return-value`][]: Fix title ([#2540][] @micnic)
 * [Refactor]: remove unused codes in util/propTypes ([#2288][] @golopot)
 * [`no-typos`]: check static lifecycle methods ([#2006][] @bsonntag)
 * [Docs] [`jsx-first-prop-new-line`][]: Fix rule name in "Rule Options" section ([#2535][] @barreira)
 * [Tests] [`no-unused-prop-types`][]: Added test cases ([#977][] @dozoisch)
 * [Tests] avoid running tests on pretest job
 * [meta] Move eslint-plugin-eslint-plugin to devDeps ([#2510][] @nstepien)
 * [Deps] update `array-includes`, `object.entries`, `object.fromentries`, `object.values`, `resolve`

[7.18.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.17.0...v7.18.0
[#2540]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2540
[#2536]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2536
[#2535]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2535
[#2533]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2533
[#2532]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2532
[#2523]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2523
[#2521]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2521
[#2514]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2514
[#2510]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2510
[#2507]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2507
[#2419]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2419
[#2414]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2414
[#2288]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2288
[#2006]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2006
[#1538]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1538
[#1337]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1337
[#1155]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1155
[#977]: https://github.com/jsx-eslint/eslint-plugin-react/pull/977

## [7.17.0] - 2019-11-28

### Added
 * [`jsx-no-target-blank`][]: add `allowReferrer` option ([#2478][] @eps1lon)
 * [`jsx-handler-names`][]: add `checkLocalVariables` option ([#2470][] @aub)
 * [`prop-types`][]: Support Flow Type spread ([#2446][] @moroine)
 * [`jsx-props-no-spreading`][]: add `explicitSpread` option to allow explicit spread of props ([#2449][] @pawelnvk)
 * [`jsx-no-target-blank`][]: warn on `target={'_blank'}` expressions ([#2451][] @timkraut)
 * [`function-component-definition`]: Enforce a specific function type for function components ([#2414][] @Stefanwullems)

### Fixed
 * [`sort-prop-types`][], [`jsx-sort-default-props`][]: disable broken autofix ([#2505][] @webOS101)
 * [`no-typos`][]: improve report location ([#2468][] @golopot)
 * [`jsx-no-literals`][]: trim whitespace for `allowedStrings` check ([#2436][] @cainlevy)
 * [`jsx-curly-brace-presence`][]: Fix filter of undefined error with whitespace inside jsx attr curlies ([#2460][] @dustinyoste)
 * [`no-render-return-value`][]: should warn when used in assignment expression ([#2462][] @jichu4n)
 * [`jsx-curly-brace-presence`][]: allow trailing spaces in literal ([#2448][] @doochik)

### Changed
 * [Deps] update `jsx-ast-utils`, `object.fromentries`, `resolve`
 * [eslint] fix func-names and change object-shorthand to 'always' ([#2483][] @golopot)
 * [Docs] `jsx-first-prop-new-line`: Fix documentation formatting ([#2489][] @pjg)
 * [Docs] [`prop-types`][]: Update 'skipUndeclared' in rule options ([#2504][] @cjnickel)
 * [Docs] [`jsx-first-prop-new-line`][]: fix wrong rule name ([#2500][] @zgayjjf)
 * [eslint] enable eslint-plugin-eslint-plugin ([#2469][] @golopot)
 * [Docs] [`jsx-props-no-multi-spaces`][]: suggest using core rule instead ([#2463][] @golopot)
 * [Docs] [`jsx-first-prop-new-line`][]: add rule options ([#2465][] @SerdarMustafa1)
 * [Docs] [`jsx-no-target-blank`][]: Add section about overriding for trusted links ([#2438][] @aschriner)
 * [Docs] fix typo ([#2453][] @cainwatson)
 * [Docs] [`no-unused-prop-types`][]: clean up prose ([#2273][] @coryhouse)
 * [Docs] [`jsx-no-bind`][]: add section about React Hooks ([#2443][] @kdex)

[7.17.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.16.0...v7.17.0
[#2532]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2532
[#2505]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2505
[#2504]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2504
[#2500]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2500
[#2489]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2489
[#2483]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2483
[#2478]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2478
[#2470]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2470
[#2469]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2469
[#2468]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2468
[#2465]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2465
[#2463]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2463
[#2460]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2460
[#2453]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2453
[#2451]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2451
[#2449]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2449
[#2448]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2448
[#2446]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2446
[#2443]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2443
[#2438]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2438
[#2436]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2436
[#2414]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2414
[#2273]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2273

## [7.16.0] - 2019-10-04

### Added
* [`jsx-sort-default-props`][]: make rule fixable ([#2429][] @emroussel)

### Fixed
* [`jsx-no-useless-fragment`][]: use `array-includes` over `.includes` for back compat (@ljharb)
* [`jsx-curly-brace-presence`][]: allow necessary white-space literal ([#2437][] @uniqname)
* [`jsx-curly-brace-presence`][]: warns incorrectly on trailing whitespace ([#2431][] @BC-M)
* [`no-unused-prop-types`][]: false positive when nested destructuring ([#2428][] @golopot)

[7.16.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.15.1...v7.16.0
[#2437]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2437
[#2431]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2431
[#2429]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2429
[#2428]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2428

## [7.15.1] - 2019-10-01

### Fixed
* [`jsx-curly-brace-presence`][]: bail out checks when JSXElements are passed as props ([#2426][] @vedadeepta)

### Changed
* [Docs] [`prefer-es6-class`][]: Fix typos ([#2425][] @spencerbyw)

[7.15.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.15.0...v7.15.1
[#2426]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2426
[#2425]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2425

## [7.15.0] - 2019-09-30

### Added
* add [`jsx-no-useless-fragment`][] rule ([#2261][] @golopot)
* [`jsx-handler-name`][]: allow `false` to disable `eventHandlerPrefix`/`eventHandlerPropPrefix` ([#2410][] @tanmoyopenroot)
* [`sort-comp`][]: add `static-variables` grouping ([#2408][] @vedadeepta)
* [`jsx-no-literals`][]: Add `allowedStrings` option ([#2380][] @benhollander)
* [`no-multi-comp`][]: Added handling for `forwardRef` and `memo` wrapping components declared in the same file ([#2184][] @jenil94)
* [`jsx-pascal-case`][]: `allowAllCaps` option now allows `SCREAMING_SNAKE_CASE` ([#2364][] @TylerR909)

### Fixed
* [`jsx-indent`][]: Fix false positive when a jsx element is the last statement within a do expression (with tests) ([#2200][] @Kenneth-KT)
* [`jsx-curly-brace-presence`][]: fix jsx tags in braces ([#2422][] @tanmoyopenroot)
* [`display-name`][]: Fix false positives ([#2399][] @BPScott)
* [`jsx-curly-brace-presence`][]: report unnecessary curly braces with children on next line ([#2409][] @vedadeepta)
* [`no-unused-prop-types`][]: false positive with callback ([#2375][] @golopot)
* Fix prop-types detection collision on renamed props ([#2383][] @yannickcr)
* [`jsx-sort-props`][]: use localeCompare rather than comparison operator ([#2391][] @tanmoyopenroot)
* [`jsx-pascal-case`][]: allow one-letter-named components ([#2395][] @Haegin)
* [`jsx-wrap-multilines`][]: fix incorrect formatting ([#2392][] @tanmoyopenroot)
* [`require-optimization`][]: fix when using arrow function in class components ([#2385][] @jenil94)
* [`no-deprecated`][]: Deprecate cWM/cWRP/cWU lifecycle methods since React 16.9.0 ([#2378][] @meowtec)
* [`jsx-key`][]: improve docs and confusing error message ([#2367][] @kaykayehnn)
* Recognize props wrapped in flow $ReadOnly<> utility type ([#2361][] @lukeapage)
* [`prop-types`][]: false positive with setState updator ([#2359][] @golopot)

### Changed
* [Docs] [`no-access-state-in-setstate`][]: update grammar ([#2418][] @neaumusic)
* [`jsx-curly-brace-presence`][], [`jsx-one-expression-per-line`][], [`no-danger-with-children`][]: add `isWhiteSpaces` to `lib/util/jsx` ([#2409][] @vedadeepta)

[7.15.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.14.3...v7.15.0
[#2422]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2422
[#2410]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2410
[#2409]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2409
[#2408]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2408
[#2402]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2402
[#2399]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2399
[#2395]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2395
[#2392]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2392
[#2391]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2391
[#2385]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2385
[#2383]: https://github.com/jsx-eslint/eslint-plugin-react/issue/2383
[#2380]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2380
[#2378]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2378
[#2375]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2375
[#2367]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2367
[#2364]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2364
[#2361]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2361
[#2359]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2359
[#2261]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2261
[#2200]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2200
[#2184]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2184

## [7.14.3] - 2019-07-23

### Fixed
* Fix [`prop-types`][] to ignore validation when Flow indexers are used ([#2330][] @yannickcr)
* Fix error being thrown after the first warning when react version cannot be detected ([#2336][] @abhishekdev)
* Fix component detection when `memo` and `forwardRef` are used together ([#2349][] @yannickcr)

### Changed
* Documentation improvements (@ljharb, [#2354][] @golopot)

[7.14.3]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.14.2...v7.14.3
[#2330]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2330
[#2336]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2336
[#2349]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2349
[#2354]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2354

## [7.14.2] - 2019-06-24

### Fixed
* Fix [`prop-types`][] crash on for...of destructuring ([#2326][] @yannickcr)

[7.14.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.14.1...v7.14.2
[#2326]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2326

## [7.14.1] - 2019-06-24

### Fixed
* Fix [`prop-types`][] crash on multiple destructuring ([#2319][] @golopot)

[7.14.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.14.0...v7.14.1
[#2319]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2319

## [7.14.0] - 2019-06-23

### Added
* Add [`jsx-curly-newline`][] rule ([#1493][] @golopot)
* Add support for nested destructuring to [`prop-types`][] ([#296][] [#1422][] @golopot)
* Add support for variables defined as props to [`prop-types`][] and [`no-unused-prop-types`][] ([#442][] [#833][] [#1002][] [#1116][] [#1257][] [#1764][] @golopot)
* Add `checkFragmentShorthand` option to [`jsx-key`][] ([#2316][] @kaykayehnn)

### Fixed
* Fix [`no-did-mount-set-state`][] and [`no-did-update-set-state`][] to handle cDU and cDM defined as class properties ([#1595][] @jaaberg)
* Fix [`sort-prop-types`][] cash when a shape PropType is defined in a variable ([#1749][] @alexzherdev)
* Fix [`no-unused-state`][] false positive when using state of non-lifecycle method ([#2274][] @golopot)
* Fix [`static-property-placement`][] false positive when accessing static property inside method ([#2283][] @dmason30)
* Fix [`prop-type`][] detection for annotated props with default value ([#2298][] @yannickcr)

### Changed
* Add ESLint 6.0.0 as valid peerDependency (@yannickcr)
* Improve [`no-render-return-value`][] performance ([#2259][] @golopot)
* Change [`jsx-sort-props`][] to report errors only on the identifier ([#2312][] @MrHen)
* Change to warn only once if react version cannot be detected ([#2276][] @ljharb)
* Documentation improvements ([#2263][] @dimitropoulos, [#2262][] @ybiquitous, [#2295][] @battaglr, [#2302][] @Jason-Cooke, [#2303][] @golopot)
* Code refactoring ([#2265][] [#2267][] [#2286][] [#2294][] @golopot, @ljharb)
* Tests improvements ([#2304][] [#1047][] @golopot, @yannickcr)

[7.14.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.13.0...v7.14.0
[#296]: https://github.com/jsx-eslint/eslint-plugin-react/issues/296
[#442]: https://github.com/jsx-eslint/eslint-plugin-react/issues/442
[#833]: https://github.com/jsx-eslint/eslint-plugin-react/issues/833
[#1002]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1002
[#1047]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1047
[#1116]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1116
[#1257]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1257
[#1422]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1422
[#1493]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1493
[#1595]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1595
[#1749]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1749
[#1764]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1764
[#2259]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2259
[#2262]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2262
[#2263]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2263
[#2265]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2265
[#2267]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2267
[#2274]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2274
[#2276]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2276
[#2283]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2283
[#2286]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2286
[#2294]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2294
[#2295]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2295
[#2298]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2298
[#2302]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2302
[#2303]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2303
[#2304]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2304
[#2312]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2312
[#2316]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2316

## [7.13.0] - 2019-05-03

### Added
* Make [`jsx-sort-props`][] fully fixable ([#2250][], @guliashvili)
* [`boolean-prop-naming`][]: add `validateNested` option to validate shape prop names ([#2234][], @pawelnvk)
* add [`static-property-placement`][] rule ([#2193][], @dmason30)
* add "detect" for flow version ([#2233][], @jedwards1211)
* [`jsx-indent`][]: Add `indentLogicalExpressions` option ([#2227][], @mdnsk)
* add [`jsx-props-no-spreading`][] ([#2191][], @ashbhir)
* [`no-string-refs`][]: Added `noTemplateLiteral` option ([#2167][], @jenil94)
* add `linkComponents` setting ([#2116][], @gbakernet)
* [`jsx-no-target-blank`][]: add support for `linkComponents` setting ([#2116][], @gbakernet)
* Add [`state-in-constructor`][] rule ([#1945][], @lukyth)
* Add [`prefer-read-only-props`][] rule ([#2110][], @golopot)
* [`no-unescaped-entities`][]: more friendly error message; add config to adjust ([#2016][], @stevemao)

### Fixed
* [`jsx-props-no-multi-spaces`][]: support generic components (ts) ([#2256][], @mateuszsokola)
* [`prop-types`][]: fix case with destructuring and default param ([#2246][], @golopot)
* [`prefer-stateless-function`][]: Ignoring pure components without props and context usage ([#2238][], @pawelnvk)
* `propTypes`: resolveSuperParameterPropsType: add null check ([#2232][], @jedwards1211)
* [`self-closing-comp`][]: stop reporting single-line spaces ([#2210][], @golopot)
* [`require-render-return`][]: more accurate report location ([#2229][], @golopot)
* [`sort-prop-types`][]: Fix sorting props with numeric keys ([#2230][], @pawelnvk)
* [`display-name`][]: fix false negative around nested functions ([#2225][], @dwelle)
* [`no-unknown-property`][]: fix case like `<Foo.bar>` ([#2207][], @golopot)
* [`jsx-curly-brace-presence`][]: accept multiline template string ([#2203][], @golopot)
* [`jsx-one-expression-per-line`][]: fix when using tabs ([#2198][], @Ohar)
* [`prop-types`][]: Fix false positive on computed member expression ([#2202][], @golopot)
* [`jsx-sort-default-props`][]: fix case with spread ([#2182][], @VincentLanglet)
* [`no-this-in-sfc`][]: Fix false positive on SFC defined as object property ([#2147][], @yannickcr)
* [`sort-comp`][]: correctly recognize instance variables declared without explicit value ([#2183][], @yannickcr)
* [`no-unused-state`][]: fix set state callback destructing & state use inside callback ([#2151][], @barakyosi)
* [`no-multi-comp`][]: correctly ignore wrapped stateless components: ([#2145][], @yannickcr)
* [`display-name`][]: avoid crash on for..of ([#2137][], @ljharb)

### Changed
* [Docs] [`no-access-state-in-setstate`][]: Use syntax highlighting for examples ([#2160][], @pReya)
* [Docs] [`jsx-fragments`][]: add "fixable" note ([#2143][], @joshunger)
* [Docs] Added shared settings info, React version default note ([#2180][], @samsch)
* [Tests] [`jsx-curly-spacing`][]: add regression test case ([#2206][], @ColCh)

[7.13.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.12.4...v7.13.0
[#2256]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2256
[#2250]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2250
[#2246]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2246
[#2238]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2238
[#2234]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2234
[#2233]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2233
[#2232]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2232
[#2230]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2230
[#2229]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2229
[#2227]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2227
[#2225]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2225
[#2210]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2210
[#2207]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2207
[#2206]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2206
[#2203]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2203
[#2202]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2202
[#2198]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2198
[#2193]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2193
[#2191]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2191
[#2183]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2183
[#2182]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2182
[#2180]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2180
[#2167]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2167
[#2147]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2147
[#2145]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2145
[#2143]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2143
[#2137]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2137
[#2116]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2116
[#2110]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2110
[#2016]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2016
[#1945]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1945

## [7.12.4] - 2019-01-16

### Fixed
* [`no-unused-prop-types`][]: avoid a crash ([#2131][], @ljharb)
* [`prop-types`][]: avoid further crashes from nonexistent nodes in unusedPropTypes ([#2127][], @ljharb)
* [`prop-types`][]: Read name of callee object ([#2125][], @CrOrc)
* [`prop-types`][]: Ignore reassignments when matching props declarations with components ([#2051][], [#1957][], @yannickcr)
* [`prop-types`][], [`no-unused-prop-types`][], [`require-default-props`][]: Detect components with return statement in switch/case ([#2118][], @yannickcr)

### Changed
* [`prop-types`][], [`no-typos`][]: add passing test cases ([#2123][], [#2128][], [#2136][], [#2134][], @ljharb)

[7.12.4]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.12.3...v7.12.4
[#2136]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2136
[#2134]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2134
[#2131]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2131
[#2128]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2128
[#2127]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2127
[#2125]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2125
[#2123]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2123
[#2118]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2118
[#2051]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2051
[#1957]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1957

## [7.12.3] - 2019-01-04

### Fixed
* [`jsx-indent`][]: Prevent crash on valueless props ([#2120][], @jomasti)
* [`jsx-fragments`][]: avoid crashing on self-closing fragments ([#2113][], @alexzherdev)
* [`no-unused-prop-types`][]: Fix propType detection inside class bodies ([#2115][], @drx)
* [`no-unused-prop-types`][]: fix issue with propTypes misclassifying props ([#2111][], @drx)
* [`display-name`][]: fix false positive for `React.memo` ([#2109][], @jomasti)

### Changed
* [Docs] add a missing comma in the JSON settings ([#2117][], @haideralsh)
* [Docs] update README to document React version detection ([#2114][], @mohsinulhaq)

[7.12.3]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.12.2...v7.12.3
[#2120]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2120
[#2117]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2117
[#2115]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2115
[#2114]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2114
[#2113]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2113
[#2111]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2111
[#2109]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2109

## [7.12.2] - 2019-01-02

### Fixed
* [`prop-types`][]: avoid crash on used prevProps ([#2095][], @ljharb)
* Version warning: Link does not end with '.' ([#2103][], @yoyo837))
* [`forbid-prop-types`][]: fix crash with propWrapper check on MemberExpressions ([#2104][], @ljharb)

[7.12.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.12.1...v7.12.2
[#2104]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2104
[#2103]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2103
[#2095]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2095

## [7.12.1] - 2019-01-01

### Fixed
* [`no-unused-state`][]: Fix crash with class fields ([#2098][], @jomasti)
* [`prop-types`][]: Fix false positives inside lifecycle methods ([#2099][], @jomasti)
* [`jsx-max-depth`][]: avoid a crash ([#2102][], @ljharb)
* [`jsx-wrap-multilines`][]: avoid crash when no trailing newline ([#2100][], @ljharb)

### Changed
* Fix CHANGELOG.md ([#2097][], @alexzherdev)

[7.12.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.12.0...v7.12.1
[#2102]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2102
[#2100]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2100
[#2099]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2099
[#2098]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2098
[#2097]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2097

## [7.12.0] - 2018-12-27

### Added
* [`no-typos`]: Support createClass ([#1828][], @alexzherdev)
* Support detecting React.forwardRef/React.memo ([#2089][], @jomasti)
* [`jsx-indent`][]: add `checkAttributes` option for JSX attribute indentation ([#2086][], @jomasti)
* Change allowed `propWrapperFunctions` setting values ([#2065][], @jomasti)
* add [`jsx-fragments`][] rule to enforce fragment syntax ([#1994][], @alexzherdev)
* Support "detect" option for React version setting ([#1978][], @alexzherdev)
* Support shorthand fragment syntax in many rules ([#1956][], @alexzherdev)
* [`jsx-no-literals`][]: print node value in warning message ([#2008][], @jlgonzalezdev)

### Fixed
* [`jsx-max-depth`][]: Fix depth of JSX siblings in a JSXEpressionContainer ([#1824][], @alexzherdev)
* [`no-array-index-key`][]: fix in React.Children methods ([#2085][], @himynameisdave)
* [`no-unused-state`][]: handle functional setState ([#2084][], @jomasti)
* version errors should log to stderr, not stdout ([#2082][], @ljharb)
* [`no-deprecated`][]: Disable legacy lifecycle methods linting for now ([#2069][], @sergei-startsev)
* ensure that react and flow versions can be numbers ([#2056][], @ljharb)
* [`forbid-foreign-prop-types`][]: ensure `allowInPropTypes` option applies to class fields ([#2040][], @Sheile)
* [`jsx-wrap-multilines`][]: catch single missing newlines ([#1984][], @MrHen)
* [`jsx-first-prop-new-line`][]: Fix for parsers (like TypeScript) ([#2026][], @HauptmannEck)
* [`sort-comp`][]: Fix fixer in case of more than 10 props ([#2012][], @tihonove)
* [`no-unused-state`][] Don't depend on state parameter name ([#1829][], @alexzherdev)
* [`no-this-in-sfc`][] fix for class properties ([#1995][], @sergei-startsev)
* [`no-this-in-sfc`][] fix rule behavior for arrow functions inside a class field ([#1989][], @sergei-startsev)
* [`destructuring-assignment`][]: handle nested props usage ([#1983][], @alexzherdev)
* [`sort-prop-types`][]: fix string property order ([#1977][], @metreniuk)
* [`jsx-no-target-blank`][]: don’t crash when there’s no value ([#1949][], @ljharb)
* [`prop-types`][], [`no-unused-prop-types`][]: better handle object spread ([#1939][], @alexzherdev)

### Changed
* [`jsx-fragments`][]: improve message text ([#2032][], @alexzherdev)
* [`no-unsafe`][]: handle all unsafe life-cycle methods ([#2075][], @sergei-startsev)
* [`require-default-props`][]: Change error message naming from singular defaultProp to plural defaultProps ([#2064][], @jseminck)
* [Refactor] Extract used `propTypes` detection ([#1946][], @alexzherdev)
* [Refactor] Extract `defaultProps` detection ([#1942][], @alexzherdev)
* [Refactor] Extract required `propTypes` detection ([#2001][], @alexzherdev)
* [Docs] [`no-did-mount-set-state`][], [`no-did-update-set-state`][], [`no-will-update-set-state`][]: fix docs URLs ([#2090][], @JBallin)
* [Docs] Remove statement on GC in jsx-no-bind ([#2067][], @rickhanlonii)
* [Docs] [`jsx-sort-props`][]: Fix small mistake ([#2044][], @dimitarnestorov)
* [Docs] [`no-unescaped-entities`][]: add more escape examples ([#2015][], @stevemao)
* [Docs] [`display-name`][]: mention default `ignoreTranspilerName` value ([#2002][], @OliverJAsh)
* [Docs] [`jsx-no-target-blank`][]: Add full example ([#1988][], @atomcorp)
* [Docs] Update [`jsx-no-target-blank`][].md ([#1953][], @brunocoelho)
* [Changelog] fix "Ignore class properties" contributor ([#1941][], @alexzherdev)
* [Tests] Remove redundant `require('babel-eslint')` from tests ([#2004][], @sergei-startsev)
* [Tests] [`prop-types`][]: Add tests for prop-types destructuring ([#2029][], @sstern6)
* [Tests] [`display-name`][]: add false positive component detection for destructured createElement ([#1098][], @arian)

[7.12.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.11.1...v7.12.0
[#2090]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2090
[#2089]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2089
[#2086]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2086
[#2085]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2085
[#2084]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2084
[#2082]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2082
[#2075]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2075
[#2069]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2069
[#2067]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2067
[#2065]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2065
[#2064]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2064
[#2056]: https://github.com/jsx-eslint/eslint-plugin-react/issues/2056
[#2044]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2044
[#2040]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2040
[#2032]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2032
[#2029]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2029
[#2026]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2026
[#2015]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2015
[#2012]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2012
[#2008]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2008
[#2004]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2004
[#2002]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2002
[#2001]: https://github.com/jsx-eslint/eslint-plugin-react/pull/2001
[#1995]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1995
[#1994]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1994
[#1989]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1989
[#1988]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1988
[#1984]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1984
[#1983]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1983
[#1978]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1978
[#1977]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1977
[#1956]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1956
[#1953]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1953
[#1949]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1949
[#1946]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1946
[#1942]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1942
[#1941]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1941
[#1939]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1939
[#1829]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1829
[#1828]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1828
[#1824]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1824
[#1098]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1098

## [7.11.1] - 2018-08-14
### Fixed
* stop crashing when assigning to propTypes ([#1932][], @alexzherdev)

### Changed
* Fix changelog links ([#1926][], @ferhatelmas)
* Fix changelog links ([#1929][], @alexzherdev)

[7.11.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.11.0...v7.11.1
[#1932]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1932
[#1929]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1929
[#1926]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1926

## [7.11.0] - 2018-08-13
### Added
* [`jsx-one-expression-per-line`][]: add "allow" option ([#1924][], @alexzherdev)
* [`sort-prop-types`][]: add autofix ([#1891][], @finnp)
* [`jsx-no-bind`][]: Add ignoreDOMComponents option ([#1868][], @alexzherdev)
* Output a warning if React version is missing in settings ([#1857][], @alexzherdev)

### Fixed
* [`destructuring-assignment`][]: Ignore class properties ([#1909][], @alexandernanberg)
* [`destructuring-assignment`][], component detection: ignore components with confidence = 0 ([#1907][], @alexzherdev)
* [`boolean-prop-naming`][]: Handle inline Flow type ([#1905][], @alexzherdev)
* [`jsx-props-no-multi-spaces`][]: Handle member expressions ([#1890][], @alexzherdev)
* [`sort-comp`][]: Allow methods to belong to any matching group ([#1858][], @nosilleg)
* [`jsx-sort-props`][]: Fix `reservedFirst` ([#1883][], @fleischie)
* [`prop-types`][]: (flow) Stop crashing on undefined or null properties ([#1860][], @nicholas-l)
* [`no-unknown-property`][]: Make attribute "charset" valid ([#1863][], @silvenon)
* [`no-deprecated`][]: report identifier AST node instead of the class node ([#1854][], @jsnajdr)
* [`button-has-type`][]: Account for pragma ([#1851][], @alexzherdev)
* [`button-has-type`][]: improve error message when an identifier is used as the value ([#1874][], @ljharb)
* support JSXText nodes alongside Literal nodes (@ljharb)

### Changed
* Extract propTypes detection code ([#1911][], @alexzherdev)
* Fix broken links in changelog ([#1849][], @alexzherdev)
* [`no-unused-state`][]: combine spread visitors (@ljharb)
* [`jsx-one-expression-per-line`][]: Fix JSX Syntax in docs ([#1867][], @peter-mouland)
* [`jsx-max-depth`][], [`jsx-sort-default-props`][]: add missing docs urls ([#1880][], @flyerhzm)
* [`jsx-indent`][]: add test cases ([#1892][], @alexzherdev)
* [`prop-types`][]: add test cases ([#1898][], @alexzherdev)
* Add a helper function for determining function-like expressions ([#1914][], @alexzherdev)
* [`jsx-props-no-multi-spaces`][]: update docs ([#1918][], @BenRichter)

[7.11.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.10.0...v7.11.0
[#1924]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1924
[#1918]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1918
[#1914]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1914
[#1911]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1911
[#1909]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1909
[#1907]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1907
[#1905]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1905
[#1898]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1898
[#1892]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1892
[#1891]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1891
[#1890]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1890
[#1883]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1883
[#1880]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1880
[#1874]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1874
[#1868]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1868
[#1867]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1867
[#1863]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1863
[#1860]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1860
[#1858]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1858
[#1857]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1857
[#1854]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1854
[#1851]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1851
[#1849]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1849

## [7.10.0] - 2018-06-24
### Added
* Allow eslint ^5 ([#1843][] @papandreou, @ljharb)
* [`no-unsafe`][] rule ([#1831][], [#1830][] @sergei-startsev)
* [`no-will-update-set-state`][]: Account for `UNSAFE_` methods ([#1845][], [#1844][] @alexzherdev)

### Fixed
* [`no-typos`][]: Fix static propTypes handling ([#1827][], [#1677][] @alexzherdev)
* [`destructuring-assignment`][]: Allow LHS ([#1825][], [#1728][] @alexzherdev)
* [`no-unused-prop-types`][]: Fix crash when encountering mixed union and intersection flow types ([#1806][] @yannickcr)

### Changed
* Typo fixes in [`jsx-no-target-blank`][] ([#1805][] @ferhatelmas))

[7.10.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.9.1...v7.10.0
[#1845]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1845
[#1844]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1844
[#1843]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1843
[#1831]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1831
[#1830]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1830
[#1827]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1827
[#1825]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1825
[#1806]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1806
[#1805]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1805
[#1728]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1728
[#1677]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1677

## [7.9.1] - 2018-06-03
* Nothing was fixed; this is a republish with some updated deps. ([#1804][] @ljharb)

[7.9.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.9.0...v7.9.1
[#1804]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1804

## [7.9.0] - 2018-06-03
### Added
* Add [`jsx-props-no-multi-spaces`][] rule ([#1755][] @ThiefMaster)
* Add `first` option to [`jsx-indent-props`][] ([#398][] @ThiefMaster)
* Add `enforceDynamicLinks` option to [`jsx-no-target-blank`][] ([#1737][] @kenearley)

### Fixed
* Fix static lifecycle methods validation in [`sort-comp`][] ([#1793][] @lynxtaa)
* Fix crash in [`no-typos`][] when encountering anonymous react imports ([#1796][] @jsg2021)
* Fix ESLint 3 support ([#1779][])

### Changed
* Documentation improvements ([#1794][] @lencioni)
* Update Travis CI configuration to test on multiple ESLint verions

[7.9.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.8.2...v7.9.0
[#1755]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1755
[#398]: https://github.com/jsx-eslint/eslint-plugin-react/issues/398
[#1737]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1737
[#1793]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1793
[#1796]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1796
[#1779]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1779
[#1794]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1794

## [7.8.2] - 2018-05-13
### Fixed
* Fix crash in [`boolean-prop-naming`][] when encountering a required shape prop type ([#1791][] @pcorpet)

[7.8.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.8.1...v7.8.2
[#1791]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1791

## [7.8.1] - 2018-05-12
### Fixed
* Fix crash in [`no-deprecated`][] when encountering a class constructor ([#1785][] @taddei)

[7.8.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.8.0...v7.8.1
[#1785]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1785

## [7.8.0] - 2018-05-11
### Added
* Add support for fragments to [`react-in-jsx-scope`][] ([#1758][])
* Add support for Flow generic PropType to [`require-default-props`][] ([#1724][] @Miziak)
* Add component whitelist option to [`forbid-component-props`][] ([#1732][] @ThiefMaster)
* Add support for React 16.3 lifecycle methods to [`no-unused-prop-types`][] ([#1681][] @bvaughn)
* Add support for React 16.3 lifecycle methods to [`sort-comp`][] ([#1767][] @joe-denea)
* Add support for React 16.3 lifecycle methods to [`no-typos`][]
* Add support for `prevState` and `nextState` to [`no-unused-state`][] ([#1759][])
* Add warnings for `componentWillMount`, `componentWillReceiveProps` and `componentWillUpdate` lifecycle methods in [`no-deprecated`][] ([#1750][] @sergei-startsev)

### Fixed
* Fix [`no-typos`][] false positive on custom `PropType` classes ([#1389][] @brettdh)
* Fix [`boolean-prop-naming`][] to handle required props ([#1389][] @louisscruz)
* Fix [`jsx-curly-brace-presence`][] to allow whitespace JSX container ([#1717][] @sharmilajesupaul)
* Fix [`jsx-no-bind`][] to handle ternary conditions ([#1722][] @gwenaellarmet)

### Changed
* Documentation improvements ([#1699][] @ronanmathew, [#1743][] @ybiquitous, [#1753][] @awthwathje, [#1783][] @chentsulin, [#1703][] @ferhatelmas)

[7.8.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.7.0...v7.8.0
[#1758]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1758
[#1724]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1724
[#1732]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1732
[#1681]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1681
[#1767]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1767
[#1759]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1759
[#1750]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1750
[#1389]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1389
[#1717]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1717
[#1722]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1722
[#1699]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1699
[#1743]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1743
[#1753]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1753
[#1783]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1783
[#1703]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1703

## [7.7.0] - 2018-02-19
### Added
* [`forbid-foreign-prop-types`][]: add `allowInPropTypes` option ([#1655][] @iansu)
* Add [`jsx-max-depth`][] rule ([#1260][] @chriswong)

### Fixed
* [`no-access-state-in-setstate`][]: Exclude references to this.state in setState callback ([#1610][] @pfhayes)
* [`no-danger-with-children`][]: prevent infinite loop ([#1571][] @ljharb)
* [`sort-prop-types`][]: Fix sortShapeProp when shape is not an object literal ([#1669][] @justinanastos)
* [`jsx-child-element-spacing`][]: fix error location ([#1666][] @pfhayes)
* [`no-unused-prop-types`][]: fix for createClass ([#1675][] @yuri-sakharov)
* [`prop-types`][]: include nextProps checking in shouldComponentUpdate ([#1690][] @amerryma)
* [`jsx-curly-spacing`][]: refactor to fix start and end-braces in a single pass ([#1414][] @s-h-a-d-o-w)

### Changed
* [`jsx-child-element-spacing`][]: add missing docs ([#1665][] @pfhayes); fix docs ([#1670][] @SammyM)

[7.7.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.6.1...v7.7.0
[#1690]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1690
[#1675]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1675
[#1670]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1670
[#1669]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1669
[#1666]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1666
[#1665]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1665
[#1655]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1655
[#1610]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1610
[#1414]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1414
[#1260]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1260
[#1571]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1571

## [7.6.1] - 2018-01-28
### Fixed
* Flow: fix crash in [`prop-types`][] with recursive type annotations ([#1653][] @jetpacmonkey)
* Fix [`no-unknown-property`][] to properly recognize `crossOrigin` instead of `crossorigin`, and allow it on `link` tags. ([#1659][] @jzDev)
* Fix [`no-access-state-in-setstate`][] to handle object spread ([#1657][] @ljharb)

[7.6.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.6.0...v7.6.1
[#1659]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1659
[#1657]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1657
[#1653]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1653

## [7.6.0] - 2018-01-25
### Added
* Add [`forbid-dom-props`][] rule ([#1562][] @davazp)
* Add [`jsx-child-element-spacing`][] rule ([#1515][] @pfhayes)
* Add [`no-this-in-sfc`][] rule ([#1435][] @jomasti)
* Add [`jsx-sort-default-props`][] rule ([#281][] @b0gok)
* Add `message` option to [`boolean-prop-naming`][] ([#1588][] @louisscruz)
* Add `beforeClosing` option to [`jsx-tag-spacing`][] ([#1396][] @cjskillingstad)
* Add `instance-methods` and `instance-variables` to [`sort-comp`][] ([#599][] @RDGthree)
* Add `propWrapperFunctions` support for [`boolean-prop-naming`][] ([#1478][] @jomasti)
* Add warning for `React.addons.TestUtils` in [`no-deprecated`][] ([#1644][] @nirnaor)
* Add URL to rule documentation to the rules metadata ([#1635][] @Arcanemagus)

### Fixed
* Fix crashes in [`no-access-state-in-setstate`][] ([#1559][] @jomasti, [#1611][] @pfhayes)
* Fix crash in [`require-optimization`][] when encountering arrays with empty items as values in object ([#1621][] @kamataryo)
* Fix crash in [`no-unused-prop-types`][] when passing an empty function as a PropType ([#1542][] [#1581][] @kevinzwhuang)
* Fix crash in [`no-typos`][] when using `PropType.shape` without arguments ([#1471][] @mrichmond)
* Fix crash when using Unions in flow propTypes ([#1468][] @justinanastos)
* Fix missing meta in [`jsx-tag-spacing`][] ([#1650][] @flyerhzm)
* Fix [`no-unused-state`][] to detect usage of `this.state` as an object ([#1572][])
* Fix [`no-access-state-in-setstate`][] to detect when the `state` variable is destructured from `this.state` ([#1597][] @jaaberg)
* Fix [`jsx-no-literals`][] to correctly find string literals part of BinaryExpressions ([#1511][] @jaaberg)
* Fix [`no-typos`][] false positive on custom propTypes with isRequired ([#1607][] @lfades)
* Fix [`prop-types`][] to check for `nextProps` in `componentWillReceiveProps` ([#1636][] @xjmdoo)
* Fix [`no-unknown-property`][] to not pascal-casing `crossorigin` attribute and only allow it on script/img/video ([#1642][] @ljharb)

### Changed
* Improve [`jsx-wrap-multilines`][] auto fix ([#1576][] @sharmilajesupaul)
* Export `defaultConfig` from [`sort-comp`][] rule for programmatic use ([#1578][] @Andarist)
* Documentation improvements ([#1552][] @TSMMark, [#1566][] @lukeapage, [#1624][] @alexilyaev, @ljharb)
* Update dependencies (@ljharb)

[7.6.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.5.1...v7.6.0
[#1562]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1562
[#1515]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1515
[#1435]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1435
[#281]: https://github.com/jsx-eslint/eslint-plugin-react/issues/281
[#1588]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1588
[#1396]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1396
[#599]: https://github.com/jsx-eslint/eslint-plugin-react/issues/599
[#1478]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1478
[#1644]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1644
[#1635]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1635
[#1559]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1559
[#1611]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1611
[#1621]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1621
[#1542]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1542
[#1581]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1581
[#1471]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1471
[#1468]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1468
[#1650]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1650
[#1572]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1572
[#1597]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1597
[#1511]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1511
[#1607]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1607
[#1636]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1636
[#1642]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1642
[#1576]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1576
[#1578]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1578
[#1552]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1552
[#1566]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1566
[#1624]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1624

## [7.5.1] - 2017-11-19
### Fixed
* Fix [`jsx-no-bind`][] crash ([#1543][] @jomasti)
* Fix [`no-unused-prop-types`][] crash ([#1542][] @jomasti)

### Changed
* Documentation improvements ([#1546][] @jseminck)

[7.5.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.5.0...v7.5.1
[#1543]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1543
[#1542]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1542
[#1546]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1546

## [7.5.0] - 2017-11-18
### Added
* Add [`jsx-one-expression-per-line`][] rule ([#1497][] @TSMMark)
* Add [`destructuring-assignment`][] rule ([#1462][] @DianaSuvorova)
* Add [`no-access-state-in-setstate`][] rule ([#1374][] @jaaberg)
* Add [`button-has-type`][] rule ([#1525][] @Hypnosphi)
* Add warnings for `React.DOM` factories in [`no-deprecated`][] ([#1530][] @backjo)
* Add `sortShapeProp` option to [`sort-prop-types`][] ([#1476][] @jomasti)
* Add `parens-new-line` option to [`jsx-wrap-multilines`][] ([#1475][] @jomasti)
* Add `checkContextTypes` and `checkChildContextTypes` options to [`forbid-prop-types`][] ([#1533][] @jomasti)
* Add `forbidDefaultForRequired ` option to [`require-default-props`][] ([#1524][] @jomasti)
* Add new nodes support to [`jsx-wrap-multilines`][] ([#1384][] @evgeny-petukhov)

### Fixed
* Fix [`jsx-curly-brace-presence`][] auto fix by bailing out when some chars exist ([#1479][] [#1449][] @jackyho112)
* Fix [`boolean-prop-naming`][] crash with Object spread ([#1485][] @track0x1)
* Fix [`no-unused-state`][] to correctly handle arrow function class method ([#1363][] @jackyho112)
* Fix incompatibility with [`typescript-eslint-parser`](https://github.com/eslint/typescript-eslint-parser) ([#1496][] @timothykang)
* Fix [`jsx-no-bind`][] to only warn for props and account for variable declaration ([#1444][] [#1395][] [#1417][] @jackyho112)
* Fix [`no-unused-prop-types`][] to handle props usage in custom prop validators ([#1518][] @petersendidit)
* Fix [`prefer-stateless-function`][] to account for `contextTypes` and `defaultProps` ([#1521][] @jomasti)
* Fix [`jsx-no-comment-textnodes`][] to not warn when using two slashes via html entities at the beginning of a literal ([#1517][] @jomasti)
* Fix [`default-props-match-prop-types`][] crash ([#1499][] @jomasti)
* Fix [`no-unused-prop-types`][] to handle props used in the `setState` update callback ([#1507][] @petersendidit)
* Fix alignment bug in [`jsx-indent`][] ([#1246][] @jseminck)

### Changed
* Documentation improvements ([#1438][] @jseminck, [#1464][] @AlaaAttya, [#1494][] @piperchester, [#1467][] @felicio, [#1512][] @adam-golab)
* Code refactoring ([#1423][] [#1398][] @jseminck, [#1500][] [#1514][] @Aladdin-ADD, [#1502][] @SimenB, [#1508][] [#1526][] @jomasti, @ljharb)
* Update dependencies ([#1450][] @leebyron, @ljharb)

[7.5.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.4.0...v7.5.0
[#1497]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1497
[#1462]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1462
[#1374]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1374
[#1525]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1525
[#1530]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1530
[#1476]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1476
[#1475]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1475
[#1533]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1533
[#1524]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1524
[#1384]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1384
[#1479]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1479
[#1449]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1449
[#1485]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1485
[#1363]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1363
[#1496]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1496
[#1444]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1444
[#1395]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1395
[#1417]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1417
[#1518]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1518
[#1521]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1521
[#1517]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1517
[#1499]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1499
[#1507]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1507
[#1246]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1246
[#1438]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1438
[#1464]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1464
[#1494]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1494
[#1467]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1467
[#1512]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1512
[#1423]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1423
[#1500]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1500
[#1514]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1514
[#1502]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1502
[#1508]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1508
[#1526]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1526
[#1398]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1398
[#1450]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1450

## [7.4.0] - 2017-09-24
### Added
* Add Flow 0.53 support ([#1376][] @jseminck)
* Add [`jsx-curly-brace-presence`][] rule ([#1310][] @jackyho112)
* Add support for Flow IntersectionTypeAnnotation to [`prop-types`][] and [`no-unused-prop-types`][] ([#1364][] [#1323][] @jseminck)
* Add support for Flow TypedArgument to [`no-unused-prop-types`][] ([#1412][] @jseminck)
* Add support for Flow ClassExpressions to [`prop-types`][] ([#1400][] @jseminck)
* Add support for Flow read-only props to [`no-unused-prop-types`][] ([#1388][] @jseminck)
* Add more tests for [`prop-types`][] and [`no-unused-prop-types`][] ([#1381][] @DianaSuvorova)
* Add support for increment and decrement operations to [`no-direct-mutation-state`][] ([#1386][] @zpao)

### Fixed
* Fix [`no-unused-state`][] to ignore computed property keys ([#1361][] @jackyho112)
* Fix [`no-typos`][] crash ([#1406][] @jseminck)
* Fix [`boolean-prop-naming`][] crash ([#1409][] @EvHaus)
* Fix [`prop-types`][] and [`no-unused-prop-types`][] crash with IntersectionTypeAnnotation ([#1413][] @jseminck)

### Changed
* Documentation improvements ([#1392][] @xcatliu, [#1403][] @piperchester, [#1432][] @jneuendorf)

[7.4.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.3.0...v7.4.0
[#1376]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1376
[#1310]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1310
[#1364]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1364
[#1323]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1323
[#1412]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1412
[#1400]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1400
[#1388]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1388
[#1381]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1381
[#1361]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1361
[#1406]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1406
[#1409]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1409
[#1392]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1392
[#1403]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1403
[#1386]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1386
[#1413]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1413
[#1432]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1432

## [7.3.0] - 2017-08-21
### Added
* Add checks for `propTypes`, `contextTypes` and `childContextTypes` to [`no-typos`][] ([#213][] @DianaSuvorova)

### Fixed
* Fix [`boolean-prop-naming`][] crash ([#1369][] @EvHaus)
* Fix [`no-typos`][] crash ([#1353][] @jseminck)
* Fix [`require-default-props`][] stopping when it finds a component without props ([#1380][] @brgibson)
* Fix [`no-direct-mutation-state`][] detection with nested components ([#1382][])

### Changed
* Documentation improvements ([#1383][] @mjomble)

[7.3.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.2.1...v7.3.0
[#213]: https://github.com/jsx-eslint/eslint-plugin-react/issues/213
[#1369]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1369
[#1353]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1353
[#1380]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1380
[#1382]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1382
[#1383]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1383

## [7.2.1] - 2017-08-14
### Fixed
* Fix [`forbid-prop-types`][] crash on identifiers ([#1352][] @ljharb)
* Fix [`boolean-prop-naming`][] crash with propTypes wrapper ([#1354][] @dustinsoftware)
* Fix [`prop-types`][] false positive with local variable `props` ([#1288][] @DianaSuvorova)
* Fix wrapped propTypes detection ([#1366][])

### Changed
* Documentation improvements ([#1123][] @penx)

[7.2.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.2.0...v7.2.1
[#1352]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1352
[#1354]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1354
[#1288]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1288
[#1366]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1366
[#1123]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1123

## [7.2.0] - 2017-08-09
### Added
* Add [`no-unused-state`][] rule ([#1103][] @wbinnssmith)
* Add [`boolean-prop-naming`][] rule ([#1264][] @EvHaus)
* Add [`no-typos`][] rule ([#1189][] @jseminck, [#1294][] @haridusenadeera)
* Add auto fix for [`jsx-sort-props`][] ([#1273][] @Overload119)
* Add `getters` and `setters` groups to [`sort-comp`][] ([#100][] @RDGthree)
* Add `noStrings` option to [`jsx-no-literals`][] ([#1202][] @deecewan)
* Add inverse option for `always`/`never` to [`jsx-boolean-value`][] ([#1249][] @ljharb)

### Fixed
* Fix [`no-direct-mutation-state`][] to disallow `this.state` mutation in constructor ([#832][] @burabure)
* Fix [`jsx-no-target-blank`][] crash on empty `rel` attribute ([#1269][] @dustinsoftware)
* Fix [`sort-comp`][] component detection with `ClassExpression` ([#1076][] @webOS101)
* Fix [`no-unused-prop-types`][] detection with async class properties and methods ([#1053][] @benstepp)
* Fix [`void-dom-elements-no-children`][] crash ([#1226][] @kokobeware)
* Fix [`no-danger-with-children`][] to ignore line breaks ([#1262][])
* Fix [`no-danger-with-children`][] crash with undefined ([#1287][])
* Fix [`jsx-no-target-blank`][] crash ([#1296][] @jseminck)
* Fix [`no-unused-prop-types`][] to no longer ignore components with no used props ([#1303][] @DianaSuvorova)
* Fix [`jsx-no-duplicate-props`][] crash ([#969][] @marcelmokos)
* Fix [`jsx-no-literals`][] false positives ([#1301][] @davidyorr)
* Fix [`no-find-dom-node`][] detection with named imports ([#785][] @Hypnosphi)
* Fix proTypes-related rules detection with wrapped propTypes ([#1266][] @dustinsoftware)
* Fix [`no-unused-prop-types`][] detection with propTypes wrapped in a function ([#1253][] @dustinsoftware)
* Fix [`no-unused-prop-types`][] detection with destructured use of properties ([#816][] @DianaSuvorova)
* Fix [`no-unused-prop-types`][] detection with inline functions ([#1309][] @DianaSuvorova)
* Fix [`no-unused-prop-types`][] `skipShapeProps` option with Flow annotations ([#1335][] @DianaSuvorova)
* Fix [`jsx-curly-spacing`][] schema incompatibility with ESLint 4.2.0 ([#1290][] @jseminck)

### Changed
* Documentation improvements ([#1261][] @mminer, [#1005][] @yooungt13, [#1289][] @konekoya, [#1308][] @xcatliu, [#1306][] @egberts, [#1329][] [#1344][] @DianaSuvorova)
* ES6-ify codebase ([#1274][] [#1277][] [#1281][] @dfilipidisz)
* Code refactoring (@ljharb)
* Update Travis CI and AppVeyor CI configurations (@lencioni)

[7.2.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.1.0...v7.2.0
[#1103]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1103
[#1273]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1273
[#1264]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1264
[#1189]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1189
[#1294]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1294
[#100]: https://github.com/jsx-eslint/eslint-plugin-react/issues/100
[#1202]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1202
[#1249]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1249
[#832]: https://github.com/jsx-eslint/eslint-plugin-react/issues/832
[#1269]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1269
[#1076]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1076
[#1053]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1053
[#1226]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1226
[#1262]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1262
[#1287]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1287
[#1296]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1296
[#1303]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1303
[#969]: https://github.com/jsx-eslint/eslint-plugin-react/issues/969
[#1301]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1301
[#785]: https://github.com/jsx-eslint/eslint-plugin-react/issues/785
[#1266]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1266
[#1253]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1253
[#816]: https://github.com/jsx-eslint/eslint-plugin-react/issues/816
[#1309]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1309
[#1261]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1261
[#1005]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1005
[#1289]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1289
[#1308]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1308
[#1306]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1306
[#1329]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1329
[#1274]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1274
[#1277]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1277
[#1281]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1281
[#1335]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1335
[#1344]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1344
[#1290]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1290

## [7.1.0] - 2017-06-13
### Added
* Add [`default-props-match-prop-types`][] rule ([#1022][] @webOS101)
* Add [`no-redundant-should-component-update`][] rule ([#985][] @jomasti)
* Add [`jsx-closing-tag-location`][] rule ([#1206][] @rsolomon)
* Add auto fix for [`jsx-max-props-per-line`][] ([#949][] @snowypowers)
* Add support for lifecycle methods with `nextProps`/`prevProps` in [`no-unused-prop-types`][] ([#1213][] @jseminck)
* Add Flow SuperTypeParameters support to [`prop-types`][] ([#1236][] @gpeal)
* Add `children` option to [`jsx-curly-spacing`][] ([#857][] @fatfisz)

### Fixed
* Fix [`prefer-stateless-function`][] `ignorePureComponents` option when using class expressions ([#1122][] @dreid)
* Fix [`void-dom-elements-no-children`][] crash ([#1195][] @oliviertassinari)
* Fix [`require-default-props`][] quoted `defaultProps` detection ([#1201][])
* Fix [`jsx-sort-props`][] bug with `ignoreCase` and `callbacksLast` options set to `true` ([#1175][] @jseminck)
* Fix [`no-unused-prop-types`][] false positive ([#1183][] [#1135][] @jseminck)
* Fix [`jsx-no-target-blank`][] to not issue errors for non-external URLs ([#1216][] @gfx)
* Fix [`prop-types`][] quoted Flow types detection ([#1132][] @ethanjgoldberg)
* Fix [`no-array-index-key`][] crash with `key` without value ([#1242][] @jseminck)

### Changed
* Set ESLint 4.0.0 as valid peerDependency
* Dead code removal ([#1227][] @jseminck)
* Update dependencies (@ljharb)
* Documentation improvements ([#1071][] @adnasa, [#1199][] @preco21, [#1222][] @alexilyaev, [#1231][] @vonovak, [#1239][] @webOS101, [#1241][] @102)

[7.1.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.0.1...v7.1.0
[#1022]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1022
[#949]: https://github.com/jsx-eslint/eslint-plugin-react/pull/949
[#985]: https://github.com/jsx-eslint/eslint-plugin-react/issues/985
[#1213]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1213
[#1236]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1236
[#1206]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1206
[#857]: https://github.com/jsx-eslint/eslint-plugin-react/issues/857
[#1122]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1122
[#1195]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1195
[#1201]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1201
[#1175]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1175
[#1183]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1183
[#1135]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1135
[#1216]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1216
[#1132]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1132
[#1242]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1242
[#1227]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1227
[#1071]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1071
[#1199]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1199
[#1222]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1222
[#1231]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1231
[#1239]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1239
[#1241]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1241

## [7.0.1] - 2017-05-13
### Fixed
* Fix [`jsx-curly-spacing`][] `allowMultiline` option being undefined in some cases ([#1179][] @fatfisz)
* Fix [`jsx-curly-spacing`][] newline with object literals bug ([#1180][] @fatfisz)
* Fix [`prop-types`][] to not mark class static function as valid propTypes definition ([#1174][])
* Fix [`prop-types`][] crash with Flow spread operator ([#1178][])
* Fix [`void-dom-elements-no-children`][] crash on faulty `createElement` detection ([#1101][])
* Fix [`require-default-props`][] error message for quoted props ([#1161][])

### Changed
* Update dependencies
* Documentation improvements ([#1173][] @luftywiranda13, [#1192][] @markus-willems)

[7.0.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.0.0...v7.0.1
[#1179]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1179
[#1180]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1180
[#1174]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1174
[#1178]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1178
[#1101]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1101
[#1161]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1161
[#1173]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1173
[#1192]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1192

## [7.0.0] - 2017-05-06
### Added
* Add [`no-will-update-set-state`][] rule ([#1139][] @ManThursday)
* Add import and destructuring support to [`no-deprecated`][]
* Add `reservedFirst` option to [`jsx-sort-props`][] ([#1134][] @MatthewHerbst)

### Breaking
* Update rules for React 15.5.0:
  * Add warnings for `React.PropTypes` and `React.createClass` in [`no-deprecated`][] ([#1148][] @Calyhre)
  * Update `createClass` component factory to `createReactClass`. This is used for React component detection, if you still using `React.createClass` use the [shared settings](README.md#configuration) to specify `createClass` as component factory
* Drop Node.js < 4 support ([#1038][] @ljharb)
* Add [`no-danger-with-children`][] rule to recommended rules ([#748][] @ljharb)
* Add [`no-string-refs`][] rule to recommended rules ([#749][] @ljharb)
* Add [`jsx-key`][] rule to recommended rules ([#750][] @ljharb)
* Add [`jsx-no-comment-textnodes`][] rule to recommended rules ([#751][] @ljharb)
* Add [`jsx-no-target-blank`][] rule to recommended rules ([#752][] @ljharb)
* Add [`no-unescaped-entities`][] rule to recommended rules ([#841][] @ljharb)
* Add [`no-children-prop`][] rule to recommended rules ([#842][] @ljharb)
* Remove deprecated [`wrap-multilines`][] rule, use [`jsx-wrap-multilines`][] instead
* Remove deprecated [`no-comment-textnodes`][] rule, use [`jsx-no-comment-textnodes`][] instead
* Remove deprecated [`require-extension`][] rule, use the [eslint-plugin-import](https://github.com/benmosher/eslint-plugin-import) [`extensions`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md) rule instead
* Deprecate [`jsx-space-before-closing`][] rule, use the [`jsx-tag-spacing`][] rule instead. [`jsx-space-before-closing`][] still works but will trigger a warning ([#1070][] @afairb)
* [`jsx-first-prop-new-line`][] default is now `multiline-multiprop` ([#802][] @kokarn)
* [`jsx-wrap-multilines`][] now checks arrow functions without block body. It can be deactivated in [rule options](docs/rules/jsx-wrap-multilines.md#rule-details) ([#790][] @ColCh)
* [`jsx-no-undef`][] will not check the global scope by default. You can force it with the [`allowGlobals`](docs/rules/jsx-no-undef.md#allowglobals) option ([#1013][] @jomasti)

### Fixed
* Fix [`no-unused-prop-types`][] false positive with `nextProps` ([#1079][] @Kerumen)
* Fix [`prefer-stateless-function`][] to not warn on classes with decorators ([#1034][] @benstepp)

### Changed
* Update dependencies ([#1119][] @danez)
* Documentation improvements ([#1121][] @omerzach, [#1130][] @dreid, [#1131][] @shoesandsocks, [#1149][] @Adzz, [#1151][] @MatthewHerbst, [#1167][] @Slumber86)

[7.0.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v6.10.3...v7.0.0
[#1134]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1134
[#1038]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1038
[#802]: https://github.com/jsx-eslint/eslint-plugin-react/pull/802
[#790]: https://github.com/jsx-eslint/eslint-plugin-react/issues/790
[#1013]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1013
[#1070]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1070
[#748]: https://github.com/jsx-eslint/eslint-plugin-react/issues/748
[#749]: https://github.com/jsx-eslint/eslint-plugin-react/issues/749
[#750]: https://github.com/jsx-eslint/eslint-plugin-react/issues/750
[#751]: https://github.com/jsx-eslint/eslint-plugin-react/issues/751
[#752]: https://github.com/jsx-eslint/eslint-plugin-react/issues/752
[#841]: https://github.com/jsx-eslint/eslint-plugin-react/issues/841
[#842]: https://github.com/jsx-eslint/eslint-plugin-react/issues/842
[#1139]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1139
[#1148]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1148
[#1079]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1079
[#1034]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1034
[#1119]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1119
[#1121]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1121
[#1130]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1130
[#1131]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1131
[#1149]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1149
[#1151]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1151
[#1167]: https://github.com/jsx-eslint/eslint-plugin-react/pull/1167

## [6.10.3] - 2017-03-20
### Fixed
* Revert [#1057][] due to issues with [`jsx-indent`][] ([#1117][])

[6.10.3]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v6.10.2...v6.10.3

## [6.10.2] - 2017-03-19
### Fixed
* Fix [`jsx-indent`][] indentation calculation with nested JSX ([#1117][])

[6.10.2]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v6.10.1...v6.10.2
[#1117]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1117

## [6.10.1] - 2017-03-19
### Fixed
* Fix [`jsx-indent`][] auto fix with tabs ([#1057][] @kentcdodds @webOS101)
* Fix [`jsx-indent`][] crash ([#1061][] @iancmyers)
* Fix [`void-dom-elements-no-children`][] crash and fix it to only checks for a createElement call from
React ([#1073][] @jomasti)
* Fix component detection that caused a false positive in [`no-multi-comp`][] ([#1088][] @benstepp)

[6.10.1]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v6.10.0...v6.10.1
[#1057]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1057
[#1061]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1061
[#1073]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1073
[#1088]: https://github.com/jsx-eslint/eslint-plugin-react/issues/1088

## [6.10.0] - 2017-02-16
### Added
* Add [`forbid-foreign-prop-types`][] rule ([#696][] @iancmyers)
* Add [`void-dom-elements-no-children`][] rule ([#709][] @lencioni)
* Add [`forbid-elements`][] rule ([#887][] @kentor)
* Add `noSortAlphabetically` option to [`jsx-sort-props`][] ([#541][] [#786][] @markus101)
* Add `when` option to [`jsx-max-props-per-line`][] ([#878][] @kentor)
* Add support for `nextProps` to [`prop-types`][] ([#814][])

### Fixed
* Fix [`require-default-props`][] crash ([#1029][])
* Fix [`require-default-props`][] rule when using Flow type from assignment ([#1043][] @wyze @CarlRosell)
* Fix [`style-prop-object`][] to not warn with explicit `null` or `undefined` ([#812][] @ljharb)
* Fix [`no-unused-prop-types`][] props detection in stateless components ([#885][] @BarryThePenguin)
* Fix [`display-name`] false positive with `document.createElement` ([#996][] @jomasti)
* Fix ESLint 2 compatibility (@ljharb)

### Changed
* Tests improvements (@ljharb)
* Documentation improvements ([#958][] @Jorundur, [#1010][] @amilajack, [#1041][] @EvNaverniouk, [#1050][] @lencioni, [#1062][] @dguo)

[6.10.0]: https://github.com/jsx-eslint/eslint-plugin-react/compare/v6.9.0...v6.10.0
[#696]: https://github.com/jsx-eslint/eslint-plugin-react/issues/696
[#709]: https://github.com/jsx-eslint/eslint-plugin-react/issues/709
[#887]: https://github.com/jsx-eslint/eslint-plugin-react/issues/887
[#541]: https://github.com/jsx-eslint/eslint-plugin-react/issues/541
[#786]: https://github.com/jsx-eslint/eslint-plugin-react/issues/786
[#878]: https://github.com/jsx-eslint/eslint-plugin-react/issues/878
[#814]: https://github.com/jsx-eslint/eslint-plugin-react/issues/
Download .txt
gitextract_41bugypo/

├── .editorconfig
├── .eslint-doc-generatorrc.js
├── .eslintrc
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   └── bug_report.yml
│   └── workflows/
│       ├── node-18+.yml
│       ├── node-minors.yml
│       ├── node-pretest.yml
│       ├── npm-publish.yml
│       ├── rebase.yml
│       ├── release.yml
│       ├── require-allow-edits.yml
│       ├── smoke-test.yml
│       └── type-check.yml
├── .gitignore
├── .markdownlint.json
├── .markdownlintignore
├── .npmrc
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── build.tsconfig.json
├── configs/
│   ├── all.js
│   ├── jsx-runtime.js
│   └── recommended.js
├── docs/
│   └── rules/
│       ├── async-server-action.md
│       ├── boolean-prop-naming.md
│       ├── button-has-type.md
│       ├── checked-requires-onchange-or-readonly.md
│       ├── default-props-match-prop-types.md
│       ├── destructuring-assignment.md
│       ├── display-name.md
│       ├── forbid-component-props.md
│       ├── forbid-dom-props.md
│       ├── forbid-elements.md
│       ├── forbid-foreign-prop-types.md
│       ├── forbid-prop-types.md
│       ├── forward-ref-uses-ref.md
│       ├── function-component-definition.md
│       ├── hook-use-state.md
│       ├── iframe-missing-sandbox.md
│       ├── jsx-boolean-value.md
│       ├── jsx-child-element-spacing.md
│       ├── jsx-closing-bracket-location.md
│       ├── jsx-closing-tag-location.md
│       ├── jsx-curly-brace-presence.md
│       ├── jsx-curly-newline.md
│       ├── jsx-curly-spacing.md
│       ├── jsx-equals-spacing.md
│       ├── jsx-filename-extension.md
│       ├── jsx-first-prop-new-line.md
│       ├── jsx-fragments.md
│       ├── jsx-handler-names.md
│       ├── jsx-indent-props.md
│       ├── jsx-indent.md
│       ├── jsx-key.md
│       ├── jsx-max-depth.md
│       ├── jsx-max-props-per-line.md
│       ├── jsx-newline.md
│       ├── jsx-no-bind.md
│       ├── jsx-no-comment-textnodes.md
│       ├── jsx-no-constructed-context-values.md
│       ├── jsx-no-duplicate-props.md
│       ├── jsx-no-leaked-render.md
│       ├── jsx-no-literals.md
│       ├── jsx-no-script-url.md
│       ├── jsx-no-target-blank.md
│       ├── jsx-no-undef.md
│       ├── jsx-no-useless-fragment.md
│       ├── jsx-one-expression-per-line.md
│       ├── jsx-pascal-case.md
│       ├── jsx-props-no-multi-spaces.md
│       ├── jsx-props-no-spread-multi.md
│       ├── jsx-props-no-spreading.md
│       ├── jsx-sort-default-props.md
│       ├── jsx-sort-props.md
│       ├── jsx-space-before-closing.md
│       ├── jsx-tag-spacing.md
│       ├── jsx-uses-react.md
│       ├── jsx-uses-vars.md
│       ├── jsx-wrap-multilines.md
│       ├── no-access-state-in-setstate.md
│       ├── no-adjacent-inline-elements.md
│       ├── no-array-index-key.md
│       ├── no-arrow-function-lifecycle.md
│       ├── no-children-prop.md
│       ├── no-danger-with-children.md
│       ├── no-danger.md
│       ├── no-deprecated.md
│       ├── no-did-mount-set-state.md
│       ├── no-did-update-set-state.md
│       ├── no-direct-mutation-state.md
│       ├── no-find-dom-node.md
│       ├── no-invalid-html-attribute.md
│       ├── no-is-mounted.md
│       ├── no-multi-comp.md
│       ├── no-namespace.md
│       ├── no-object-type-as-default-prop.md
│       ├── no-redundant-should-component-update.md
│       ├── no-render-return-value.md
│       ├── no-set-state.md
│       ├── no-string-refs.md
│       ├── no-this-in-sfc.md
│       ├── no-typos.md
│       ├── no-unescaped-entities.md
│       ├── no-unknown-property.md
│       ├── no-unsafe.md
│       ├── no-unstable-nested-components.md
│       ├── no-unused-class-component-methods.md
│       ├── no-unused-prop-types.md
│       ├── no-unused-state.md
│       ├── no-will-update-set-state.md
│       ├── prefer-es6-class.md
│       ├── prefer-exact-props.md
│       ├── prefer-read-only-props.md
│       ├── prefer-stateless-function.md
│       ├── prop-types.md
│       ├── react-in-jsx-scope.md
│       ├── require-default-props.md
│       ├── require-optimization.md
│       ├── require-render-return.md
│       ├── self-closing-comp.md
│       ├── sort-comp.md
│       ├── sort-default-props.md
│       ├── sort-prop-types.md
│       ├── state-in-constructor.md
│       ├── static-property-placement.md
│       ├── style-prop-object.md
│       └── void-dom-elements-no-children.md
├── index.js
├── lib/
│   ├── rules/
│   │   ├── async-server-action.js
│   │   ├── boolean-prop-naming.js
│   │   ├── button-has-type.js
│   │   ├── checked-requires-onchange-or-readonly.js
│   │   ├── default-props-match-prop-types.js
│   │   ├── destructuring-assignment.js
│   │   ├── display-name.js
│   │   ├── forbid-component-props.js
│   │   ├── forbid-dom-props.js
│   │   ├── forbid-elements.js
│   │   ├── forbid-foreign-prop-types.js
│   │   ├── forbid-prop-types.js
│   │   ├── forward-ref-uses-ref.js
│   │   ├── function-component-definition.js
│   │   ├── hook-use-state.js
│   │   ├── iframe-missing-sandbox.js
│   │   ├── index.js
│   │   ├── jsx-boolean-value.js
│   │   ├── jsx-child-element-spacing.js
│   │   ├── jsx-closing-bracket-location.js
│   │   ├── jsx-closing-tag-location.js
│   │   ├── jsx-curly-brace-presence.js
│   │   ├── jsx-curly-newline.js
│   │   ├── jsx-curly-spacing.js
│   │   ├── jsx-equals-spacing.js
│   │   ├── jsx-filename-extension.js
│   │   ├── jsx-first-prop-new-line.js
│   │   ├── jsx-fragments.js
│   │   ├── jsx-handler-names.js
│   │   ├── jsx-indent-props.js
│   │   ├── jsx-indent.js
│   │   ├── jsx-key.js
│   │   ├── jsx-max-depth.js
│   │   ├── jsx-max-props-per-line.js
│   │   ├── jsx-newline.js
│   │   ├── jsx-no-bind.js
│   │   ├── jsx-no-comment-textnodes.js
│   │   ├── jsx-no-constructed-context-values.js
│   │   ├── jsx-no-duplicate-props.js
│   │   ├── jsx-no-leaked-render.js
│   │   ├── jsx-no-literals.js
│   │   ├── jsx-no-script-url.js
│   │   ├── jsx-no-target-blank.js
│   │   ├── jsx-no-undef.js
│   │   ├── jsx-no-useless-fragment.js
│   │   ├── jsx-one-expression-per-line.js
│   │   ├── jsx-pascal-case.js
│   │   ├── jsx-props-no-multi-spaces.js
│   │   ├── jsx-props-no-spread-multi.js
│   │   ├── jsx-props-no-spreading.js
│   │   ├── jsx-sort-default-props.js
│   │   ├── jsx-sort-props.js
│   │   ├── jsx-space-before-closing.js
│   │   ├── jsx-tag-spacing.js
│   │   ├── jsx-uses-react.js
│   │   ├── jsx-uses-vars.js
│   │   ├── jsx-wrap-multilines.js
│   │   ├── no-access-state-in-setstate.js
│   │   ├── no-adjacent-inline-elements.js
│   │   ├── no-array-index-key.js
│   │   ├── no-arrow-function-lifecycle.js
│   │   ├── no-children-prop.js
│   │   ├── no-danger-with-children.js
│   │   ├── no-danger.js
│   │   ├── no-deprecated.js
│   │   ├── no-did-mount-set-state.js
│   │   ├── no-did-update-set-state.js
│   │   ├── no-direct-mutation-state.js
│   │   ├── no-find-dom-node.js
│   │   ├── no-invalid-html-attribute.js
│   │   ├── no-is-mounted.js
│   │   ├── no-multi-comp.js
│   │   ├── no-namespace.js
│   │   ├── no-object-type-as-default-prop.js
│   │   ├── no-redundant-should-component-update.js
│   │   ├── no-render-return-value.js
│   │   ├── no-set-state.js
│   │   ├── no-string-refs.js
│   │   ├── no-this-in-sfc.js
│   │   ├── no-typos.js
│   │   ├── no-unescaped-entities.js
│   │   ├── no-unknown-property.js
│   │   ├── no-unsafe.js
│   │   ├── no-unstable-nested-components.js
│   │   ├── no-unused-class-component-methods.js
│   │   ├── no-unused-prop-types.js
│   │   ├── no-unused-state.js
│   │   ├── no-will-update-set-state.js
│   │   ├── prefer-es6-class.js
│   │   ├── prefer-exact-props.js
│   │   ├── prefer-read-only-props.js
│   │   ├── prefer-stateless-function.js
│   │   ├── prop-types.js
│   │   ├── react-in-jsx-scope.js
│   │   ├── require-default-props.js
│   │   ├── require-optimization.js
│   │   ├── require-render-return.js
│   │   ├── self-closing-comp.js
│   │   ├── sort-comp.js
│   │   ├── sort-default-props.js
│   │   ├── sort-prop-types.js
│   │   ├── state-in-constructor.js
│   │   ├── static-property-placement.js
│   │   ├── style-prop-object.js
│   │   └── void-dom-elements-no-children.js
│   ├── types.d.ts
│   └── util/
│       ├── Components.js
│       ├── annotations.js
│       ├── ast.js
│       ├── componentUtil.js
│       ├── defaultProps.js
│       ├── docsUrl.js
│       ├── error.js
│       ├── eslint.js
│       ├── getTokenBeforeClosingBracket.js
│       ├── isCreateContext.js
│       ├── isCreateElement.js
│       ├── isDestructuredFromPragmaImport.js
│       ├── isFirstLetterCapitalized.js
│       ├── jsx.js
│       ├── lifecycleMethods.js
│       ├── linkComponents.js
│       ├── log.js
│       ├── makeNoMethodSetStateRule.js
│       ├── message.js
│       ├── pragma.js
│       ├── propTypes.js
│       ├── propTypesSort.js
│       ├── propWrapper.js
│       ├── props.js
│       ├── report.js
│       ├── usedPropTypes.js
│       ├── variable.js
│       └── version.js
├── package.json
├── test/
│   ├── eslint-remote-tester.config.js
│   └── mocha.opts
├── test-published-types/
│   ├── .npmrc
│   ├── index.js
│   ├── package.json
│   └── tsconfig.json
├── tests/
│   ├── fixtures/
│   │   ├── flat-config/
│   │   │   ├── config-all/
│   │   │   │   ├── eslint.config-deep.js
│   │   │   │   ├── eslint.config-root.js
│   │   │   │   └── test.jsx
│   │   │   ├── config-jsx-runtime/
│   │   │   │   ├── eslint.config-deep.js
│   │   │   │   ├── eslint.config-root.js
│   │   │   │   └── test.jsx
│   │   │   ├── config-recommended/
│   │   │   │   ├── eslint.config-deep.js
│   │   │   │   ├── eslint.config-root.js
│   │   │   │   └── test.jsx
│   │   │   ├── plugin/
│   │   │   │   ├── eslint.config.js
│   │   │   │   └── test.jsx
│   │   │   └── plugin-and-config/
│   │   │       ├── eslint.config-deep.js
│   │   │       ├── eslint.config-root.js
│   │   │       └── test.jsx
│   │   └── version/
│   │       ├── detect-version/
│   │       │   ├── detect-version-child/
│   │       │   │   ├── node_modules/
│   │       │   │   │   ├── flow-bin/
│   │       │   │   │   │   └── package.json
│   │       │   │   │   └── react/
│   │       │   │   │       ├── index.js
│   │       │   │   │       └── package.json
│   │       │   │   └── test.js
│   │       │   ├── node_modules/
│   │       │   │   ├── flow-bin/
│   │       │   │   │   └── package.json
│   │       │   │   └── react/
│   │       │   │       ├── index.js
│   │       │   │       └── package.json
│   │       │   └── test.js
│   │       ├── detect-version-missing/
│   │       │   ├── node_modules/
│   │       │   │   └── react/
│   │       │   │       ├── index.js
│   │       │   │       └── package.json
│   │       │   └── test.js
│   │       └── detect-version-sibling/
│   │           ├── node_modules/
│   │           │   ├── flow-bin/
│   │           │   │   └── package.json
│   │           │   └── react/
│   │           │       ├── index.js
│   │           │       └── package.json
│   │           └── test.js
│   ├── flat-config.js
│   ├── helpers/
│   │   ├── getESLintCoreRule.js
│   │   ├── getRuleDefiner.js
│   │   ├── parsers.js
│   │   └── ruleTester.js
│   ├── index.js
│   ├── lib/
│   │   └── rules/
│   │       ├── async-server-action.js
│   │       ├── boolean-prop-naming.js
│   │       ├── button-has-type.js
│   │       ├── checked-requires-onchange-or-readonly.js
│   │       ├── default-props-match-prop-types.js
│   │       ├── destructuring-assignment.js
│   │       ├── display-name.js
│   │       ├── forbid-component-props.js
│   │       ├── forbid-dom-props.js
│   │       ├── forbid-elements.js
│   │       ├── forbid-foreign-prop-types.js
│   │       ├── forbid-prop-types.js
│   │       ├── forward-ref-uses-ref.js
│   │       ├── function-component-definition.js
│   │       ├── hook-use-state.js
│   │       ├── iframe-missing-sandbox.js
│   │       ├── jsx-boolean-value.js
│   │       ├── jsx-child-element-spacing.js
│   │       ├── jsx-closing-bracket-location.js
│   │       ├── jsx-closing-tag-location.js
│   │       ├── jsx-curly-brace-presence.js
│   │       ├── jsx-curly-newline.js
│   │       ├── jsx-curly-spacing.js
│   │       ├── jsx-equals-spacing.js
│   │       ├── jsx-filename-extension.js
│   │       ├── jsx-first-prop-new-line.js
│   │       ├── jsx-fragments.js
│   │       ├── jsx-handler-names.js
│   │       ├── jsx-indent-props.js
│   │       ├── jsx-indent.js
│   │       ├── jsx-key.js
│   │       ├── jsx-max-depth.js
│   │       ├── jsx-max-props-per-line.js
│   │       ├── jsx-newline.js
│   │       ├── jsx-no-bind.js
│   │       ├── jsx-no-comment-textnodes.js
│   │       ├── jsx-no-constructed-context-values.js
│   │       ├── jsx-no-duplicate-props.js
│   │       ├── jsx-no-leaked-render.js
│   │       ├── jsx-no-literals.js
│   │       ├── jsx-no-script-url.js
│   │       ├── jsx-no-target-blank.js
│   │       ├── jsx-no-undef.js
│   │       ├── jsx-no-useless-fragment.js
│   │       ├── jsx-one-expression-per-line.js
│   │       ├── jsx-pascal-case.js
│   │       ├── jsx-props-no-multi-spaces.js
│   │       ├── jsx-props-no-spread-multi.js
│   │       ├── jsx-props-no-spreading.js
│   │       ├── jsx-sort-default-props.js
│   │       ├── jsx-sort-props.js
│   │       ├── jsx-space-before-closing.js
│   │       ├── jsx-tag-spacing.js
│   │       ├── jsx-uses-react.js
│   │       ├── jsx-uses-vars.js
│   │       ├── jsx-wrap-multilines.js
│   │       ├── no-access-state-in-setstate.js
│   │       ├── no-adjacent-inline-elements.js
│   │       ├── no-array-index-key.js
│   │       ├── no-arrow-function-lifecycle.js
│   │       ├── no-children-prop.js
│   │       ├── no-danger-with-children.js
│   │       ├── no-danger.js
│   │       ├── no-deprecated.js
│   │       ├── no-did-mount-set-state.js
│   │       ├── no-did-update-set-state.js
│   │       ├── no-direct-mutation-state.js
│   │       ├── no-find-dom-node.js
│   │       ├── no-invalid-html-attribute.js
│   │       ├── no-is-mounted.js
│   │       ├── no-multi-comp.js
│   │       ├── no-namespace.js
│   │       ├── no-object-type-as-default-prop.js
│   │       ├── no-redundant-should-component-update.js
│   │       ├── no-render-return-value.js
│   │       ├── no-set-state.js
│   │       ├── no-string-refs.js
│   │       ├── no-this-in-sfc.js
│   │       ├── no-typos.js
│   │       ├── no-unescaped-entities.js
│   │       ├── no-unknown-property.js
│   │       ├── no-unsafe.js
│   │       ├── no-unstable-nested-components.js
│   │       ├── no-unused-class-component-methods.js
│   │       ├── no-unused-prop-types.js
│   │       ├── no-unused-state.js
│   │       ├── no-will-update-set-state.js
│   │       ├── prefer-es6-class.js
│   │       ├── prefer-exact-props.js
│   │       ├── prefer-read-only-props.js
│   │       ├── prefer-stateless-function.js
│   │       ├── prop-types.js
│   │       ├── react-in-jsx-scope.js
│   │       ├── require-default-props.js
│   │       ├── require-optimization.js
│   │       ├── require-render-return.js
│   │       ├── self-closing-comp.js
│   │       ├── sort-comp.js
│   │       ├── sort-default-props.js
│   │       ├── sort-prop-types.js
│   │       ├── state-in-constructor.js
│   │       ├── static-property-placement.js
│   │       ├── style-prop-object.js
│   │       └── void-dom-elements-no-children.js
│   └── util/
│       ├── .eslintrc
│       ├── Components.js
│       ├── ast.js
│       ├── isFirstLetterCapitalized.js
│       ├── jsx.js
│       ├── linkComponents.js
│       ├── pragma.js
│       ├── propWrapper.js
│       ├── variable.js
│       └── version.js
├── tsconfig.json
└── types/
    ├── rules/
    │   └── jsx-no-literals.d.ts
    └── string.prototype.repeat/
        └── index.d.ts
Download .txt
SYMBOL INDEX (850 symbols across 141 files)

FILE: index.js
  function filterRules (line 8) | function filterRules(rules, predicate) {
  function configureAsError (line 16) | function configureAsError(rules) {
  constant SEVERITY_ERROR (line 35) | const SEVERITY_ERROR = /** @type {2} */ (2);
  constant SEVERITY_OFF (line 36) | const SEVERITY_OFF = /** @type {0} */ (0);

FILE: lib/rules/async-server-action.js
  method create (line 39) | create(context) {

FILE: lib/rules/boolean-prop-naming.js
  function nestedPropTypes (line 27) | function nestedPropTypes(prop) {
  function getPropKey (line 102) | function getPropKey(node) {
  function getPropName (line 130) | function getPropName(node) {
  function flowCheck (line 146) | function flowCheck(prop) {
  function regularCheck (line 159) | function regularCheck(prop) {
  function tsCheck (line 168) | function tsCheck(prop) {
  function runCheck (line 183) | function runCheck(proptypes, addInvalidProp) {
  function validatePropNaming (line 202) | function validatePropNaming(node, proptypes) {
  function reportInvalidNaming (line 219) | function reportInvalidNaming(component) {
  function checkPropWrapperArguments (line 233) | function checkPropWrapperArguments(node, args) {
  function getComponentTypeAnnotation (line 240) | function getComponentTypeAnnotation(component) {
  function findAllTypeAnnotations (line 277) | function findAllTypeAnnotations(identifier, node) {
  method 'ClassProperty, PropertyDefinition' (line 311) | 'ClassProperty, PropertyDefinition'(node) {
  method MemberExpression (line 333) | MemberExpression(node) {
  method ObjectExpression (line 355) | ObjectExpression(node) {
  method TypeAlias (line 369) | TypeAlias(node) {
  method TSTypeAliasDeclaration (line 373) | TSTypeAliasDeclaration(node) {
  method TSInterfaceDeclaration (line 377) | TSInterfaceDeclaration(node) {
  method 'Program:exit' (line 382) | 'Program:exit'() {

FILE: lib/rules/button-has-type.js
  method create (line 63) | create(context) {

FILE: lib/rules/checked-requires-onchange-or-readonly.js
  function extractTargetProps (line 31) | function extractTargetProps(properties, keyName) {
  method create (line 66) | create(context) {

FILE: lib/rules/default-props-match-prop-types.js
  function reportInvalidDefaultProps (line 57) | function reportInvalidDefaultProps(propTypes, defaultProps) {
  method 'Program:exit' (line 96) | 'Program:exit'() {

FILE: lib/rules/destructuring-assignment.js
  constant DEFAULT_OPTION (line 16) | const DEFAULT_OPTION = 'always';
  function createSFCParams (line 18) | function createSFCParams() {
  function evalParams (line 45) | function evalParams(params) {
  function handleStatelessComponent (line 106) | function handleStatelessComponent(node) {
  function handleStatelessComponentExit (line 126) | function handleStatelessComponentExit(node) {
  function handleSFCUsage (line 133) | function handleSFCUsage(node) {
  function isInClassProperty (line 152) | function isInClassProperty(node) {
  function handleClassUsage (line 163) | function handleClassUsage(node) {
  function findParent (line 192) | function findParent(node, predicate) {
  method MemberExpression (line 217) | MemberExpression(node) {
  method TSQualifiedName (line 229) | TSQualifiedName(node) {
  method VariableDeclarator (line 248) | VariableDeclarator(node) {

FILE: lib/rules/display-name.js
  function markDisplayNameAsDeclared (line 67) | function markDisplayNameAsDeclared(node) {
  function isNestedMemo (line 78) | function isNestedMemo(node) {
  function reportMissingDisplayName (line 89) | function reportMissingDisplayName(component) {
  function reportMissingContextDisplayName (line 106) | function reportMissingContextDisplayName(contextObj) {
  function hasTranspilerName (line 117) | function hasTranspilerName(node) {
  function hasVariableDeclaration (line 164) | function hasVariableDeclaration(node, name) {
  function isIdentifierShadowed (line 201) | function isIdentifierShadowed(node, identifierName) {
  function isShadowedComponent (line 259) | function isShadowedComponent(node) {
  method ExpressionStatement (line 286) | ExpressionStatement(node) {
  method VariableDeclarator (line 291) | VariableDeclarator(node) {
  method 'ClassProperty, PropertyDefinition' (line 296) | 'ClassProperty, PropertyDefinition'(node) {
  method MemberExpression (line 303) | MemberExpression(node) {
  method 'FunctionExpression, FunctionDeclaration, ArrowFunctionExpression' (line 322) | 'FunctionExpression, FunctionDeclaration, ArrowFunctionExpression'(node) {
  method MethodDefinition (line 331) | MethodDefinition(node) {
  method 'ClassExpression, ClassDeclaration' (line 338) | 'ClassExpression, ClassDeclaration'(node) {
  method ObjectExpression (line 345) | ObjectExpression(node) {
  method CallExpression (line 362) | CallExpression(node) {
  method 'Program:exit' (line 386) | 'Program:exit'() {

FILE: lib/rules/forbid-component-props.js
  constant DEFAULTS (line 16) | const DEFAULTS = ['className', 'style'];
  method create (line 137) | create(context) {

FILE: lib/rules/forbid-dom-props.js
  constant DEFAULTS (line 15) | const DEFAULTS = [];
  function isForbidden (line 29) | function isForbidden(forbidMap, prop, propValue, tagName) {
  method create (line 104) | create(context) {

FILE: lib/rules/forbid-elements.js
  method create (line 60) | create(context) {

FILE: lib/rules/forbid-foreign-prop-types.js
  method create (line 41) | create(context) {

FILE: lib/rules/forbid-prop-types.js
  constant DEFAULTS (line 19) | const DEFAULTS = ['any', 'array', 'object'];
  method create (line 61) | create(context) {

FILE: lib/rules/forward-ref-uses-ref.js
  function isForwardRefIdentifier (line 20) | function isForwardRefIdentifier(node) {
  function isForwardRefCall (line 28) | function isForwardRefCall(node) {
  method create (line 59) | create(context) {

FILE: lib/rules/function-component-definition.js
  function buildFunction (line 19) | function buildFunction(template, parts) {
  constant NAMED_FUNCTION_TEMPLATES (line 26) | const NAMED_FUNCTION_TEMPLATES = {
  constant UNNAMED_FUNCTION_TEMPLATES (line 32) | const UNNAMED_FUNCTION_TEMPLATES = {
  function hasOneUnconstrainedTypeParam (line 37) | function hasOneUnconstrainedTypeParam(node) {
  function hasName (line 46) | function hasName(node) {
  function getNodeText (line 53) | function getNodeText(prop, source) {
  function getName (line 58) | function getName(node) {
  function getParams (line 71) | function getParams(node, source) {
  function getBody (line 79) | function getBody(node, source) {
  function getTypeAnnotation (line 89) | function getTypeAnnotation(node, source) {
  function isUnfixableBecauseOfExport (line 100) | function isUnfixableBecauseOfExport(node) {
  function isFunctionExpressionWithName (line 108) | function isFunctionExpressionWithName(node) {
  function getFixer (line 185) | function getFixer(node, options) {
  function report (line 221) | function report(node, options) {
  function validate (line 228) | function validate(node, functionType) {
  method FunctionDeclaration (line 264) | FunctionDeclaration(node) {
  method ArrowFunctionExpression (line 267) | ArrowFunctionExpression(node) {
  method FunctionExpression (line 270) | FunctionExpression(node) {
  method VariableDeclaration (line 273) | VariableDeclaration(node) {
  method 'Program:exit' (line 276) | 'Program:exit'() {
  method 'ImportDeclaration, ExportNamedDeclaration, ExportDefaultDeclaration, ExportAllDeclaration, ExportSpecifier, ExportDefaultSpecifier, JSXElement, TSExportAssignment, TSImportEqualsDeclaration' (line 280) | 'ImportDeclaration, ExportNamedDeclaration, ExportDefaultDeclaration, Ex...

FILE: lib/rules/hook-use-state.js
  function isNodeDestructuring (line 18) | function isNodeDestructuring(node) {
  method CallExpression (line 58) | CallExpression(node) {

FILE: lib/rules/iframe-missing-sandbox.js
  constant ALLOWED_VALUES (line 17) | const ALLOWED_VALUES = [
  function validateSandboxAttribute (line 36) | function validateSandboxAttribute(context, node, attribute) {
  function checkAttributes (line 68) | function checkAttributes(context, node) {
  function checkProps (line 93) | function checkProps(context, node) {
  method create (line 127) | create(context) {

FILE: lib/rules/jsx-boolean-value.js
  constant ALWAYS (line 21) | const ALWAYS = 'always';
  constant NEVER (line 22) | const NEVER = 'never';
  function isAlways (line 30) | function isAlways(configuration, exceptions, propName) {
  function isNever (line 43) | function isNever(configuration, exceptions, propName) {
  method create (line 109) | create(context) {

FILE: lib/rules/jsx-child-element-spacing.js
  constant INLINE_ELEMENTS (line 9) | const INLINE_ELEMENTS = new Set([
  method create (line 62) | create(context) {

FILE: lib/rules/jsx-closing-bracket-location.js
  method create (line 65) | create(context) {

FILE: lib/rules/jsx-closing-tag-location.js
  method create (line 62) | create(context) {

FILE: lib/rules/jsx-curly-brace-presence.js
  constant OPTION_ALWAYS (line 23) | const OPTION_ALWAYS = 'always';
  constant OPTION_NEVER (line 24) | const OPTION_NEVER = 'never';
  constant OPTION_IGNORE (line 25) | const OPTION_IGNORE = 'ignore';
  constant OPTION_VALUES (line 27) | const OPTION_VALUES = [
  constant DEFAULT_CONFIG (line 32) | const DEFAULT_CONFIG = { props: OPTION_NEVER, children: OPTION_NEVER, pr...
  function containsLineTerminators (line 36) | function containsLineTerminators(rawStringValue) {
  function containsBackslash (line 40) | function containsBackslash(rawStringValue) {
  function containsHTMLEntity (line 44) | function containsHTMLEntity(rawStringValue) {
  function containsOnlyHtmlEntities (line 48) | function containsOnlyHtmlEntities(rawStringValue) {
  function containsDisallowedJSXTextChars (line 52) | function containsDisallowedJSXTextChars(rawStringValue) {
  function containsQuoteCharacters (line 56) | function containsQuoteCharacters(value) {
  function containsMultilineComment (line 60) | function containsMultilineComment(value) {
  function escapeDoubleQuotes (line 64) | function escapeDoubleQuotes(rawStringValue) {
  function escapeBackslashes (line 68) | function escapeBackslashes(rawStringValue) {
  function needToEscapeCharacterForJSX (line 72) | function needToEscapeCharacterForJSX(raw, node) {
  function containsWhitespaceExpression (line 80) | function containsWhitespaceExpression(child) {
  function isLineBreak (line 88) | function isLineBreak(text) {
  function wrapNonHTMLEntities (line 92) | function wrapNonHTMLEntities(text) {
  function wrapWithCurlyBraces (line 104) | function wrapWithCurlyBraces(rawText) {
  function isWhiteSpaceLiteral (line 124) | function isWhiteSpaceLiteral(node) {
  function isStringWithTrailingWhiteSpaces (line 128) | function isStringWithTrailingWhiteSpaces(value) {
  function isLiteralWithTrailingWhiteSpaces (line 132) | function isLiteralWithTrailingWhiteSpaces(node) {
  method create (line 178) | create(context) {

FILE: lib/rules/jsx-curly-newline.js
  function getNormalizedOption (line 18) | function getNormalizedOption(context) {
  method create (line 83) | create(context) {

FILE: lib/rules/jsx-curly-spacing.js
  constant SPACING (line 23) | const SPACING = {
  constant SPACING_VALUES (line 27) | const SPACING_VALUES = [SPACING.always, SPACING.never];
  method create (line 119) | create(context) {

FILE: lib/rules/jsx-equals-spacing.js
  method create (line 41) | create(context) {

FILE: lib/rules/jsx-filename-extension.js
  constant DEFAULTS (line 16) | const DEFAULTS = {
  method create (line 63) | create(context) {

FILE: lib/rules/jsx-first-prop-new-line.js
  method create (line 39) | create(context) {

FILE: lib/rules/jsx-fragments.js
  function replaceNode (line 20) | function replaceNode(source, node, text) {
  method create (line 48) | create(context) {

FILE: lib/rules/jsx-handler-names.js
  function isPrefixDisabled (line 22) | function isPrefixDisabled(prefix) {
  function isInlineHandler (line 26) | function isInlineHandler(node) {
  function getComponentName (line 30) | function getComponentName(node) {
  method create (line 131) | create(context) {

FILE: lib/rules/jsx-indent-props.js
  method create (line 84) | create(context) {

FILE: lib/rules/jsx-indent.js
  method create (line 86) | create(context) {

FILE: lib/rules/jsx-key.js
  method create (line 69) | create(context) {

FILE: lib/rules/jsx-max-depth.js
  method create (line 48) | create(context) {

FILE: lib/rules/jsx-max-props-per-line.js
  function getPropName (line 12) | function getPropName(context, propNode) {
  method create (line 76) | create(context) {

FILE: lib/rules/jsx-newline.js
  function isMultilined (line 23) | function isMultilined(node) {
  method create (line 73) | create(context) {

FILE: lib/rules/jsx-no-bind.js
  method create (line 68) | create(context) {

FILE: lib/rules/jsx-no-comment-textnodes.js
  function checkText (line 25) | function checkText(context, node) {
  method create (line 57) | create(context) {

FILE: lib/rules/jsx-no-constructed-context-values.js
  function isConstruction (line 20) | function isConstruction(node, callScope) {
  function isReactContext (line 122) | function isReactContext(context, node) {
  method JSXOpeningElement (line 188) | JSXOpeningElement(node) {

FILE: lib/rules/jsx-no-duplicate-props.js
  method create (line 43) | create(context) {

FILE: lib/rules/jsx-no-leaked-render.js
  constant COERCE_STRATEGY (line 26) | const COERCE_STRATEGY = 'coerce';
  constant TERNARY_STRATEGY (line 27) | const TERNARY_STRATEGY = 'ternary';
  constant DEFAULT_VALID_STRATEGIES (line 28) | const DEFAULT_VALID_STRATEGIES = [TERNARY_STRATEGY, COERCE_STRATEGY];
  constant COERCE_VALID_LEFT_SIDE_EXPRESSIONS (line 29) | const COERCE_VALID_LEFT_SIDE_EXPRESSIONS = ['UnaryExpression', 'BinaryEx...
  constant TERNARY_INVALID_ALTERNATE_VALUES (line 30) | const TERNARY_INVALID_ALTERNATE_VALUES = [undefined, null, false];
  function trimLeftNode (line 32) | function trimLeftNode(node) {
  function getIsCoerceValidNestedLogicalExpression (line 41) | function getIsCoerceValidNestedLogicalExpression(node) {
  function extractExpressionBetweenLogicalAnds (line 49) | function extractExpressionBetweenLogicalAnds(node) {
  function isWithinAttribute (line 64) | function isWithinAttribute(node) {
  function ruleFixer (line 73) | function ruleFixer(context, fixStrategy, fixer, reportedNode, leftNode, ...
  method create (line 165) | create(context) {

FILE: lib/rules/jsx-no-literals.js
  function trimIfString (line 36) | function trimIfString(value) {
  function normalizeElementConfig (line 91) | function normalizeElementConfig(config) {
  function normalizeConfig (line 112) | function normalizeConfig(config) {
  method create (line 183) | create(context) {

FILE: lib/rules/jsx-no-script-url.js
  function hasJavaScriptProtocol (line 21) | function hasJavaScriptProtocol(attr) {
  function shouldVerifyProp (line 26) | function shouldVerifyProp(node, config) {
  function parseLegacyOption (line 36) | function parseLegacyOption(config, option) {
  method create (line 115) | create(context) {

FILE: lib/rules/jsx-no-target-blank.js
  function findLastIndex (line 17) | function findLastIndex(arr, condition) {
  function attributeValuePossiblyBlank (line 27) | function attributeValuePossiblyBlank(attribute) {
  function hasExternalLink (line 52) | function hasExternalLink(node, linkAttributes, warnOnSpreadAttributes, s...
  function hasDynamicLink (line 59) | function hasDynamicLink(node, linkAttributes) {
  function getStringFromValue (line 75) | function getStringFromValue(value, targetValue) {
  function hasSecureRel (line 103) | function hasSecureRel(node, allowReferrer, warnOnSpreadAttributes, sprea...
  method create (line 167) | create(context) {

FILE: lib/rules/jsx-no-undef.js
  method create (line 44) | create(context) {

FILE: lib/rules/jsx-no-useless-fragment.js
  function isJSXText (line 16) | function isJSXText(node) {
  function isOnlyWhitespace (line 24) | function isOnlyWhitespace(text) {
  function isNonspaceJSXTextOrJSXCurly (line 32) | function isNonspaceJSXTextOrJSXCurly(node) {
  function isFragmentWithOnlyTextAndIsNotChild (line 41) | function isFragmentWithOnlyTextAndIsNotChild(node) {
  function trimLikeReact (line 51) | function trimLikeReact(text) {
  function isKeyedElement (line 66) | function isKeyedElement(node) {
  function containsCallExpression (line 76) | function containsCallExpression(node) {
  method create (line 109) | create(context) {

FILE: lib/rules/jsx-one-expression-per-line.js
  method create (line 55) | create(context) {

FILE: lib/rules/jsx-pascal-case.js
  function testDigit (line 14) | function testDigit(char) {
  function testUpperCase (line 19) | function testUpperCase(char) {
  function testLowerCase (line 24) | function testLowerCase(char) {
  function testPascalCase (line 29) | function testPascalCase(name) {
  function testAllCaps (line 46) | function testAllCaps(name) {
  function ignoreCheck (line 64) | function ignoreCheck(ignore, name) {
  method create (line 118) | create(context) {

FILE: lib/rules/jsx-props-no-multi-spaces.js
  method create (line 41) | create(context) {

FILE: lib/rules/jsx-props-no-spread-multi.js
  method create (line 31) | create(context) {

FILE: lib/rules/jsx-props-no-spreading.js
  constant OPTIONS (line 15) | const OPTIONS = { ignore: 'ignore', enforce: 'enforce' };
  constant DEFAULTS (line 16) | const DEFAULTS = {
  method create (line 96) | create(context) {

FILE: lib/rules/jsx-sort-default-props.js
  method create (line 54) | create(context) {

FILE: lib/rules/jsx-sort-props.js
  function isMultilineProp (line 25) | function isMultilineProp(node) {
  constant RESERVED_PROPS_LIST (line 42) | const RESERVED_PROPS_LIST = [
  function isReservedPropName (line 49) | function isReservedPropName(name, list) {
  function getSortFirstIndex (line 53) | function getSortFirstIndex(name, sortFirstList, ignoreCase) {
  function shouldSortToEnd (line 67) | function shouldSortToEnd(node) {
  function contextCompare (line 72) | function contextCompare(a, b, options) {
  function getGroupsOfSortableAttributes (line 174) | function getGroupsOfSortableAttributes(attributes, context) {
  function generateFixerFunction (line 245) | function generateFixerFunction(node, context, reservedList) {
  function validateReservedFirstConfig (line 315) | function validateReservedFirstConfig(context, reservedFirst) {
  function reportNodeAttribute (line 356) | function reportNodeAttribute(nodeAttribute, errorType, node, context, re...
  method create (line 433) | create(context) {

FILE: lib/rules/jsx-space-before-closing.js
  method create (line 46) | create(context) {

FILE: lib/rules/jsx-tag-spacing.js
  function validateClosingSlash (line 35) | function validateClosingSlash(context, node, option) {
  function validateBeforeSelfClosing (line 103) | function validateBeforeSelfClosing(context, node, option) {
  function validateAfterOpening (line 147) | function validateAfterOpening(context, node, option) {
  function validateBeforeClosing (line 186) | function validateBeforeClosing(context, node, option) {
  method create (line 297) | create(context) {

FILE: lib/rules/jsx-uses-react.js
  method create (line 29) | create(context) {

FILE: lib/rules/jsx-uses-vars.js
  method create (line 31) | create(context) {

FILE: lib/rules/jsx-wrap-multilines.js
  constant DEFAULTS (line 22) | const DEFAULTS = {
  method create (line 85) | create(context) {

FILE: lib/rules/no-access-state-in-setstate.js
  method create (line 35) | create(context) {

FILE: lib/rules/no-adjacent-inline-elements.js
  function isInline (line 55) | function isInline(node) {
  method create (line 93) | create(context) {

FILE: lib/rules/no-array-index-key.js
  function isCreateCloneElement (line 19) | function isCreateCloneElement(node, context) {
  method create (line 59) | create(context) {

FILE: lib/rules/no-arrow-function-lifecycle.js
  function getRuleText (line 21) | function getRuleText(node) {
  function reportNoArrowFunctionLifecycle (line 57) | function reportNoArrowFunctionLifecycle(properties) {
  method 'Program:exit' (line 141) | 'Program:exit'() {

FILE: lib/rules/no-children-prop.js
  function isCreateElementWithProps (line 23) | function isCreateElementWithProps(node, context) {
  method create (line 63) | create(context) {

FILE: lib/rules/no-danger-with-children.js
  method create (line 34) | create(context) {

FILE: lib/rules/no-danger.js
  constant DANGEROUS_PROPERTY_NAMES (line 20) | const DANGEROUS_PROPERTY_NAMES = [
  constant DANGEROUS_PROPERTIES (line 24) | const DANGEROUS_PROPERTIES = fromEntries(DANGEROUS_PROPERTY_NAMES.map((p...
  function isDangerous (line 35) | function isDangerous(name) {
  method create (line 74) | create(context) {

FILE: lib/rules/no-deprecated.js
  constant MODULES (line 23) | const MODULES = {
  function getDeprecated (line 34) | function getDeprecated(pragma) {
  method create (line 133) | create(context) {

FILE: lib/rules/no-direct-mutation-state.js
  function isValid (line 43) | function isValid(component) {
  function reportMutations (line 51) | function reportMutations(component) {
  function getOuterMemberExpression (line 66) | function getOuterMemberExpression(node) {
  function shouldIgnoreComponent (line 78) | function shouldIgnoreComponent(component) {
  method MethodDefinition (line 86) | MethodDefinition(node) {
  method CallExpression (line 94) | CallExpression(node) {
  method AssignmentExpression (line 100) | AssignmentExpression(node) {
  method UpdateExpression (line 116) | UpdateExpression(node) {
  method 'CallExpression:exit' (line 132) | 'CallExpression:exit'(node) {
  method 'MethodDefinition:exit' (line 138) | 'MethodDefinition:exit'(node) {
  method 'Program:exit' (line 146) | 'Program:exit'() {

FILE: lib/rules/no-find-dom-node.js
  method create (line 34) | create(context) {

FILE: lib/rules/no-invalid-html-attribute.js
  constant VALID_VALUES (line 57) | const VALID_VALUES = new Map([
  constant VALID_PAIR_VALUES (line 65) | const VALID_PAIR_VALUES = new Map([
  constant HTML_ELEMENTS (line 73) | const HTML_ELEMENTS = new Set([
  constant COMPONENT_ATTRIBUTE_MAP (line 222) | const COMPONENT_ATTRIBUTE_MAP = new Map([
  function splitIntoRangedParts (line 245) | function splitIntoRangedParts(node, regex) {
  function checkLiteralValueNode (line 260) | function checkLiteralValueNode(context, attributeName, node, parentNode,...
  constant DEFAULT_ATTRIBUTES (line 390) | const DEFAULT_ATTRIBUTES = ['rel'];
  function checkAttribute (line 392) | function checkAttribute(context, node) {
  function isValidCreateElement (line 474) | function isValidCreateElement(node) {
  function checkPropValidValue (line 482) | function checkPropValidValue(context, node, value, attribute) {
  function checkCreateProps (line 524) | function checkCreateProps(context, node, attribute) {
  method create (line 612) | create(context) {

FILE: lib/rules/no-is-mounted.js
  method create (line 35) | create(context) {

FILE: lib/rules/no-multi-comp.js
  function isIgnored (line 55) | function isIgnored(component) {
  method 'Program:exit' (line 65) | 'Program:exit'() {

FILE: lib/rules/no-namespace.js
  method create (line 36) | create(context) {

FILE: lib/rules/no-object-type-as-default-prop.js
  constant FORBIDDEN_TYPES_MAP (line 15) | const FORBIDDEN_TYPES_MAP = {
  constant FORBIDDEN_TYPES (line 25) | const FORBIDDEN_TYPES = new Set(Object.keys(FORBIDDEN_TYPES_MAP));
  constant MESSAGE_ID (line 26) | const MESSAGE_ID = 'forbiddenTypeDefaultParam';
  function hasUsedObjectDestructuringSyntax (line 31) | function hasUsedObjectDestructuringSyntax(params) {
  function verifyDefaultPropsDestructuring (line 39) | function verifyDefaultPropsDestructuring(context, properties) {
  method 'Program:exit' (line 94) | 'Program:exit'() {

FILE: lib/rules/no-redundant-should-component-update.js
  method create (line 35) | create(context) {

FILE: lib/rules/no-render-return-value.js
  method create (line 35) | create(context) {

FILE: lib/rules/no-set-state.js
  function isValid (line 43) | function isValid(component) {
  function reportSetStateUsages (line 51) | function reportSetStateUsages(component) {
  method CallExpression (line 61) | CallExpression(node) {
  method 'Program:exit' (line 79) | 'Program:exit'() {

FILE: lib/rules/no-string-refs.js
  method create (line 45) | create(context) {

FILE: lib/rules/no-this-in-sfc.js
  method MemberExpression (line 35) | MemberExpression(node) {

FILE: lib/rules/no-typos.js
  constant PROP_TYPES (line 7) | const PROP_TYPES = Object.keys(require('prop-types'));
  constant STATIC_CLASS_PROPERTIES (line 19) | const STATIC_CLASS_PROPERTIES = ['propTypes', 'contextTypes', 'childCont...
  function checkValidPropTypeQualifier (line 51) | function checkValidPropTypeQualifier(node) {
  function checkValidPropType (line 60) | function checkValidPropType(node) {
  function isPropTypesPackage (line 69) | function isPropTypesPackage(node) {
  function checkValidCallExpression (line 82) | function checkValidCallExpression(node) {
  function checkValidProp (line 96) | function checkValidProp(node) {
  function checkValidPropObject (line 124) | function checkValidPropObject(node) {
  function reportErrorIfPropertyCasingTypo (line 130) | function reportErrorIfPropertyCasingTypo(propertyValue, propertyKey, isC...
  function reportErrorIfLifecycleMethodCasingTypo (line 147) | function reportErrorIfLifecycleMethodCasingTypo(node) {
  method ImportDeclaration (line 179) | ImportDeclaration(node) {
  method 'ClassProperty, PropertyDefinition' (line 208) | 'ClassProperty, PropertyDefinition'(node) {
  method MemberExpression (line 216) | MemberExpression(node) {
  method MethodDefinition (line 238) | MethodDefinition(node) {
  method ObjectExpression (line 246) | ObjectExpression(node) {

FILE: lib/rules/no-unescaped-entities.js
  constant DEFAULTS (line 21) | const DEFAULTS = [{
  method create (line 84) | create(context) {

FILE: lib/rules/no-unknown-property.js
  constant DEFAULTS (line 18) | const DEFAULTS = {
  constant DOM_ATTRIBUTE_NAMES (line 23) | const DOM_ATTRIBUTE_NAMES = {
  constant ATTRIBUTE_TAGS_MAP (line 32) | const ATTRIBUTE_TAGS_MAP = {
  constant SVGDOM_ATTRIBUTE_NAMES (line 129) | const SVGDOM_ATTRIBUTE_NAMES = {
  constant DOM_PROPERTY_NAMES_ONE_WORD (line 214) | const DOM_PROPERTY_NAMES_ONE_WORD = [
  constant DOM_PROPERTY_NAMES_TWO_WORDS (line 252) | const DOM_PROPERTY_NAMES_TWO_WORDS = [
  constant DOM_PROPERTIES_IGNORE_CASE (line 330) | const DOM_PROPERTIES_IGNORE_CASE = ['charset', 'allowFullScreen', 'webki...
  constant ARIA_PROPERTIES (line 332) | const ARIA_PROPERTIES = [
  constant REACT_ON_PROPS (line 349) | const REACT_ON_PROPS = [
  function getDOMPropertyNames (line 373) | function getDOMPropertyNames(context) {
  function isValidHTMLTagInJSX (line 410) | function isValidHTMLTagInJSX(childNode) {
  function normalizeAttributeCase (line 437) | function normalizeAttributeCase(name) {
  function isValidDataAttribute (line 450) | function isValidDataAttribute(name) {
  function hasUpperCaseCharacter (line 460) | function hasUpperCaseCharacter(name) {
  function isValidAriaAttribute (line 472) | function isValidAriaAttribute(name) {
  function getTagName (line 481) | function getTagName(node) {
  function tagNameHasDot (line 498) | function tagNameHasDot(node) {
  function getStandardName (line 512) | function getStandardName(name, context) {
  method create (line 567) | create(context) {

FILE: lib/rules/no-unsafe.js
  method create (line 48) | create(context) {

FILE: lib/rules/no-unstable-nested-components.js
  constant COMPONENT_AS_PROPS_INFO (line 19) | const COMPONENT_AS_PROPS_INFO = ' If you want to allow component creatio...
  constant HOOK_REGEXP (line 20) | const HOOK_REGEXP = /^use[A-Z0-9].*$/;
  function generateErrorMessageWithParentName (line 31) | function generateErrorMessageWithParentName(parentName) {
  function propMatchesRenderPropPattern (line 41) | function propMatchesRenderPropPattern(text, pattern) {
  function getClosestMatchingParent (line 52) | function getClosestMatchingParent(node, context, matcher) {
  function isCreateElementMatcher (line 70) | function isCreateElementMatcher(node, context) {
  function isObjectExpressionMatcher (line 82) | function isObjectExpressionMatcher(node) {
  function isJSXExpressionContainerMatcher (line 91) | function isJSXExpressionContainerMatcher(node) {
  function isJSXAttributeOfExpressionContainerMatcher (line 100) | function isJSXAttributeOfExpressionContainerMatcher(node) {
  function isPropertyOfObjectExpressionMatcher (line 114) | function isPropertyOfObjectExpressionMatcher(node) {
  function isMapCall (line 130) | function isMapCall(node) {
  function isReturnStatementOfHook (line 145) | function isReturnStatementOfHook(node, context) {
  function isComponentInRenderProp (line 173) | function isComponentInRenderProp(node, context, propNamePattern) {
  function isDirectValueOfRenderProperty (line 231) | function isDirectValueOfRenderProperty(node, propNamePattern) {
  function resolveComponentName (line 247) | function resolveComponentName(node) {
  function isInsideRenderMethod (line 307) | function isInsideRenderMethod(node) {
  function isFunctionComponentInsideClassComponent (line 335) | function isFunctionComponentInsideClassComponent(node) {
  function isComponentInsideCreateElementsProp (line 358) | function isComponentInsideCreateElementsProp(node) {
  function isComponentInProp (line 381) | function isComponentInProp(node) {
  function isStatelessComponentReturningNull (line 403) | function isStatelessComponentReturningNull(node) {
  function validate (line 413) | function validate(node) {
  method FunctionDeclaration (line 484) | FunctionDeclaration(node) { validate(node); }
  method ArrowFunctionExpression (line 485) | ArrowFunctionExpression(node) { validate(node); }
  method FunctionExpression (line 486) | FunctionExpression(node) { validate(node); }
  method ClassDeclaration (line 487) | ClassDeclaration(node) { validate(node); }
  method CallExpression (line 488) | CallExpression(node) { validate(node); }

FILE: lib/rules/no-unused-class-component-methods.js
  constant LIFECYCLE_METHODS (line 16) | const LIFECYCLE_METHODS = new Set([
  constant ES6_LIFECYCLE (line 34) | const ES6_LIFECYCLE = new Set([
  constant ES5_LIFECYCLE (line 38) | const ES5_LIFECYCLE = new Set([
  function isKeyLiteralLike (line 44) | function isKeyLiteralLike(node, property) {
  function uncast (line 52) | function uncast(node) {
  function getName (line 62) | function getName(node) {
  function isThisExpression (line 78) | function isThisExpression(node) {
  function getInitialClassInfo (line 82) | function getInitialClassInfo(node, isClass) {
  function addProperty (line 119) | function addProperty(node) {
  function addUsedProperty (line 125) | function addUsedProperty(node) {
  function reportUnusedProperties (line 132) | function reportUnusedProperties() {
  function exitMethod (line 160) | function exitMethod() {
  method ClassDeclaration (line 169) | ClassDeclaration(node) {
  method ObjectExpression (line 175) | ObjectExpression(node) {
  method 'ClassDeclaration:exit' (line 181) | 'ClassDeclaration:exit'() {
  method 'ObjectExpression:exit' (line 189) | 'ObjectExpression:exit'(node) {
  method Property (line 197) | Property(node) {
  method 'ClassProperty, MethodDefinition, PropertyDefinition' (line 207) | 'ClassProperty, MethodDefinition, PropertyDefinition'(node) {
  method MemberExpression (line 226) | MemberExpression(node) {
  method VariableDeclarator (line 242) | VariableDeclarator(node) {

FILE: lib/rules/no-unused-prop-types.js
  function mustBeValidated (line 22) | function mustBeValidated(component) {
  function isIgnored (line 79) | function isIgnored(name) {
  function isPropUsed (line 89) | function isPropUsed(node, prop) {
  function reportUnusedPropType (line 111) | function reportUnusedPropType(component, props) {
  function reportUnusedPropTypes (line 152) | function reportUnusedPropTypes(component) {
  method 'Program:exit' (line 161) | 'Program:exit'() {

FILE: lib/rules/no-unused-state.js
  function uncast (line 20) | function uncast(node) {
  function getName (line 30) | function getName(node) {
  function isThisExpression (line 46) | function isThisExpression(node) {
  function getInitialClassInfo (line 50) | function getInitialClassInfo() {
  function isSetStateCall (line 67) | function isSetStateCall(node) {
  method create (line 96) | create(context) {

FILE: lib/rules/prefer-es6-class.js
  method create (line 38) | create(context) {

FILE: lib/rules/prefer-exact-props.js
  function getPropTypesErrorMessage (line 42) | function getPropTypesErrorMessage() {
  function isNonExactObjectTypeAnnotation (line 48) | function isNonExactObjectTypeAnnotation(node) {
  function hasNonExactObjectTypeAnnotation (line 57) | function hasNonExactObjectTypeAnnotation(node) {
  function hasGenericTypeAnnotation (line 66) | function hasGenericTypeAnnotation(node) {
  function isNonEmptyObjectExpression (line 75) | function isNonEmptyObjectExpression(node) {
  function isNonExactPropWrapperFunction (line 83) | function isNonExactPropWrapperFunction(node) {
  function reportPropTypesError (line 90) | function reportPropTypesError(node) {
  function reportFlowError (line 97) | function reportFlowError(node) {
  method TypeAlias (line 104) | TypeAlias(node) {
  method 'ClassProperty, PropertyDefinition' (line 109) | 'ClassProperty, PropertyDefinition'(node) {
  method Identifier (line 123) | Identifier(node) {
  method MemberExpression (line 140) | MemberExpression(node) {

FILE: lib/rules/prefer-read-only-props.js
  function isFlowPropertyType (line 15) | function isFlowPropertyType(node) {
  function isTypescriptPropertyType (line 19) | function isTypescriptPropertyType(node) {
  function isCovariant (line 23) | function isCovariant(node) {
  function isReadonly (line 34) | function isReadonly(node) {
  function reportReadOnlyProp (line 67) | function reportReadOnlyProp(prop, propName, fixer) {
  method 'Program:exit' (line 78) | 'Program:exit'() {

FILE: lib/rules/prefer-stateless-function.js
  function isSingleSuperCall (line 69) | function isSingleSuperCall(body) {
  function isSimple (line 85) | function isSimple(node) {
  function isSpreadArguments (line 96) | function isSpreadArguments(superArgs) {
  function isValidIdentifierPair (line 113) | function isValidIdentifierPair(ctorParam, superArg) {
  function isValidRestSpreadPair (line 129) | function isValidRestSpreadPair(ctorParam, superArg) {
  function isValidPair (line 144) | function isValidPair(ctorParam, superArg) {
  function isPassingThrough (line 159) | function isPassingThrough(ctorParams, superArgs) {
  function isRedundantSuperCall (line 180) | function isRedundantSuperCall(body, ctorParams) {
  function hasOtherProperties (line 196) | function hasOtherProperties(node) {
  function markSCUAsDeclared (line 216) | function markSCUAsDeclared(node) {
  function markChildContextTypesAsDeclared (line 226) | function markChildContextTypesAsDeclared(node) {
  function markThisAsUsed (line 236) | function markThisAsUsed(node) {
  function markPropsOrContextAsUsed (line 246) | function markPropsOrContextAsUsed(node) {
  function markRefAsUsed (line 256) | function markRefAsUsed(node) {
  function markReturnAsInvalid (line 266) | function markReturnAsInvalid(node) {
  function markDecoratorsAsUsed (line 276) | function markDecoratorsAsUsed(node) {
  function visitClass (line 282) | function visitClass(node) {
  method VariableDeclarator (line 297) | VariableDeclarator(node) {
  method MemberExpression (line 315) | MemberExpression(node) {
  method JSXAttribute (line 338) | JSXAttribute(node) {
  method ReturnStatement (line 347) | ReturnStatement(node) {
  method 'Program:exit' (line 373) | 'Program:exit'() {

FILE: lib/rules/prop-types.js
  function isIgnored (line 70) | function isIgnored(name) {
  function mustBeValidated (line 79) | function mustBeValidated(component) {
  function internalIsDeclaredInComponent (line 95) | function internalIsDeclaredInComponent(declaredPropTypes, keyList) {
  function isDeclaredInComponent (line 154) | function isDeclaredInComponent(node, names) {
  function reportUndeclaredPropTypes (line 174) | function reportUndeclaredPropTypes(component) {
  function checkNestedComponent (line 195) | function checkNestedComponent(component, list) {
  method 'Program:exit' (line 213) | 'Program:exit'() {

FILE: lib/rules/react-in-jsx-scope.js
  method create (line 36) | create(context) {

FILE: lib/rules/require-default-props.js
  function isPropWithNoDefaulVal (line 27) | function isPropWithNoDefaulVal(prop) {
  function reportPropTypesWithoutDefault (line 87) | function reportPropTypesWithoutDefault(propTypes, defaultProps) {
  function reportFunctionComponent (line 122) | function reportFunctionComponent(componentNode, declaredPropTypes, defau...
  method 'Program:exit' (line 175) | 'Program:exit'() {

FILE: lib/rules/require-optimization.js
  function hasPureRenderDecorator (line 55) | function hasPureRenderDecorator(node) {
  function hasCustomDecorator (line 82) | function hasCustomDecorator(node) {
  function isSCUDeclared (line 107) | function isSCUDeclared(node) {
  function isPureRenderDeclared (line 116) | function isPureRenderDeclared(node) {
  function markSCUAsDeclared (line 138) | function markSCUAsDeclared(node) {
  function reportMissingOptimization (line 148) | function reportMissingOptimization(component) {
  function isFunctionInClass (line 159) | function isFunctionInClass(node) {
  method ArrowFunctionExpression (line 174) | ArrowFunctionExpression(node) {
  method ClassDeclaration (line 183) | ClassDeclaration(node) {
  method FunctionDeclaration (line 194) | FunctionDeclaration(node) {
  method FunctionExpression (line 203) | FunctionExpression(node) {
  method MethodDefinition (line 212) | MethodDefinition(node) {
  method ObjectExpression (line 219) | ObjectExpression(node) {
  method 'Program:exit' (line 230) | 'Program:exit'() {

FILE: lib/rules/require-render-return.js
  function markReturnStatementPresent (line 45) | function markReturnStatementPresent(node) {
  function findRenderMethod (line 56) | function findRenderMethod(node) {
  method ReturnStatement (line 64) | ReturnStatement(node) {
  method ArrowFunctionExpression (line 81) | ArrowFunctionExpression(node) {
  method 'Program:exit' (line 88) | 'Program:exit'() {

FILE: lib/rules/self-closing-comp.js
  function isComponent (line 14) | function isComponent(node) {
  function childrenIsEmpty (line 22) | function childrenIsEmpty(node) {
  function childrenIsMultilineSpaces (line 26) | function childrenIsMultilineSpaces(node) {
  method create (line 74) | create(context) {

FILE: lib/rules/sort-comp.js
  function getMethodsOrder (line 61) | function getMethodsOrder(userConfig) {
  function getRefPropIndexes (line 142) | function getRefPropIndexes(method) {
  function getPropertyName (line 239) | function getPropertyName(node) {
  function storeError (line 256) | function storeError(propA, propB) {
  function dedupeErrors (line 290) | function dedupeErrors() {
  function reportErrors (line 309) | function reportErrors() {
  function comparePropsOrder (line 336) | function comparePropsOrder(propertiesInfos, propA, propB) {
  function checkPropsOrder (line 389) | function checkPropsOrder(properties) {
  method 'Program:exit' (line 437) | 'Program:exit'() {

FILE: lib/rules/sort-default-props.js
  method create (line 49) | create(context) {

FILE: lib/rules/sort-prop-types.js
  function getKey (line 29) | function getKey(context, node) {
  method create (line 79) | create(context) {

FILE: lib/rules/state-in-constructor.js
  method create (line 39) | create(context) {

FILE: lib/rules/static-property-placement.js
  constant STATIC_PUBLIC_FIELD (line 20) | const STATIC_PUBLIC_FIELD = 'static public field';
  constant STATIC_GETTER (line 21) | const STATIC_GETTER = 'static getter';
  constant PROPERTY_ASSIGNMENT (line 22) | const PROPERTY_ASSIGNMENT = 'property assignment';
  constant POSITION_SETTINGS (line 23) | const POSITION_SETTINGS = [STATIC_PUBLIC_FIELD, STATIC_GETTER, PROPERTY_...
  constant ERROR_MESSAGES (line 28) | const ERROR_MESSAGES = {
  function isContextInClass (line 104) | function isContextInClass(node) {
  function reportNodeIncorrectlyPositioned (line 123) | function reportNodeIncorrectlyPositioned(node, expectedRule) {
  method 'ClassProperty, PropertyDefinition' (line 153) | 'ClassProperty, PropertyDefinition'(node) {
  method MemberExpression (line 161) | MemberExpression(node) {
  method MethodDefinition (line 181) | MethodDefinition(node) {

FILE: lib/rules/style-prop-object.js
  method create (line 50) | create(context) {

FILE: lib/rules/void-dom-elements-no-children.js
  constant VOID_DOM_ELEMENTS (line 21) | const VOID_DOM_ELEMENTS = {
  function isVoidDOMElement (line 40) | function isVoidDOMElement(elementName) {
  method JSXElement (line 68) | JSXElement(node) {
  method CallExpression (line 107) | CallExpression(node) {

FILE: lib/types.d.ts
  type ASTNode (line 5) | interface ASTNode extends estree.BaseNode {
  type Scope (line 8) | type Scope = eslint.Scope.Scope;
  type Token (line 9) | type Token = eslint.AST.Token;
  type Fixer (line 10) | type Fixer = eslint.Rule.RuleFixer;
  type JSXAttribute (line 11) | type JSXAttribute = ASTNode;
  type JSXElement (line 12) | type JSXElement = ASTNode;
  type JSXFragment (line 13) | type JSXFragment = ASTNode;
  type JSXOpeningElement (line 14) | type JSXOpeningElement = ASTNode;
  type JSXSpreadAttribute (line 15) | type JSXSpreadAttribute = ASTNode;
  type Context (line 17) | type Context = eslint.Rule.RuleContext;
  type TypeDeclarationBuilder (line 19) | type TypeDeclarationBuilder = (annotation: ASTNode, parentName: string, ...
  type TypeDeclarationBuilders (line 21) | type TypeDeclarationBuilders = {
  type UnionTypeDefinition (line 25) | type UnionTypeDefinition = {

FILE: lib/util/Components.js
  function getId (line 29) | function getId(node) {
  function usedPropTypesAreEquivalent (line 33) | function usedPropTypesAreEquivalent(propA, propB) {
  function mergeUsedPropTypes (line 46) | function mergeUsedPropTypes(propsList, newPropsList) {
  constant USE_HOOK_PREFIX_REGEX (line 55) | const USE_HOOK_PREFIX_REGEX = /^use[A-Z]/;
  class Components (line 63) | class Components {
    method constructor (line 64) | constructor() {
    method add (line 76) | add(node, confidence) {
    method get (line 100) | get(node) {
    method set (line 115) | set(node, props) {
    method list (line 144) | list() {
    method length (line 188) | length() {
    method getDefaultReactImports (line 200) | getDefaultReactImports() {
    method getNamedReactImports (line 209) | getNamedReactImports() {
    method addDefaultReactImport (line 219) | addDefaultReactImport(specifier) {
    method addNamedReactImport (line 232) | addNamedReactImport(specifier) {
  function getWrapperFunctions (line 240) | function getWrapperFunctions(context, pragma) {
  function mergeRules (line 262) | function mergeRules(rules) {
  function componentRule (line 287) | function componentRule(rule, context) {
  method detect (line 956) | detect(rule) {

FILE: lib/util/annotations.js
  function isAnnotatedFunctionPropsDeclaration (line 17) | function isAnnotatedFunctionPropsDeclaration(node, context) {

FILE: lib/util/ast.js
  function traverse (line 21) | function traverse(ASTnode, visitor) {
  function loopNodes (line 36) | function loopNodes(nodes) {
  function findReturnStatement (line 57) | function findReturnStatement(node) {
  function traverseReturns (line 81) | function traverseReturns(ASTNode, context, onReturn) {
  function getPropertyNameNode (line 150) | function getPropertyNameNode(node) {
  function getPropertyName (line 169) | function getPropertyName(node) {
  function getComponentProperties (line 179) | function getComponentProperties(node) {
  function getFirstNodeInLine (line 197) | function getFirstNodeInLine(context, node) {
  function isNodeFirstInLine (line 219) | function isNodeFirstInLine(context, node) {
  function isFunctionLikeExpression (line 231) | function isFunctionLikeExpression(node) {
  function isFunction (line 240) | function isFunction(node) {
  function isFunctionLike (line 249) | function isFunctionLike(node) {
  function isClass (line 258) | function isClass(node) {
  function inConstructor (line 268) | function inConstructor(context, node) {
  function stripQuotes (line 285) | function stripQuotes(string) {
  function getKeyValue (line 295) | function getKeyValue(context, node) {
  function isParenthesized (line 323) | function isParenthesized(context, node) {
  function isAssignmentLHS (line 338) | function isAssignmentLHS(node) {
  function isTSAsExpression (line 346) | function isTSAsExpression(node) {
  function isCallExpression (line 355) | function isCallExpression(node) {
  function unwrapTSAsExpression (line 365) | function unwrapTSAsExpression(node) {
  function isTSTypeReference (line 369) | function isTSTypeReference(node) {
  function isTSTypeAnnotation (line 375) | function isTSTypeAnnotation(node) {
  function isTSTypeLiteral (line 381) | function isTSTypeLiteral(node) {
  function isTSIntersectionType (line 387) | function isTSIntersectionType(node) {
  function isTSInterfaceHeritage (line 393) | function isTSInterfaceHeritage(node) {
  function isTSInterfaceDeclaration (line 399) | function isTSInterfaceDeclaration(node) {
  function isTSTypeDeclaration (line 408) | function isTSTypeDeclaration(node) {
  function isTSTypeAliasDeclaration (line 418) | function isTSTypeAliasDeclaration(node) {
  function isTSParenthesizedType (line 427) | function isTSParenthesizedType(node) {
  function isTSFunctionType (line 433) | function isTSFunctionType(node) {
  function isTSTypeQuery (line 439) | function isTSTypeQuery(node) {
  function isTSTypeParameterInstantiation (line 445) | function isTSTypeParameterInstantiation(node) {
  function isMemberExpression (line 451) | function isMemberExpression(node) {
  function isObjectPattern (line 457) | function isObjectPattern(node) {
  function isVariableDeclarator (line 463) | function isVariableDeclarator(node) {

FILE: lib/util/componentUtil.js
  function memoize (line 17) | function memoize(fn) {
  function isES5Component (line 39) | function isES5Component(node, context) {
  function isExplicitComponent (line 64) | function isExplicitComponent(node, context) {
  function isES6Component (line 102) | function isES6Component(node, context) {
  function getParentES5Component (line 127) | function getParentES5Component(context, node) {
  function getParentES6Component (line 146) | function getParentES6Component(context, node) {
  function isPureComponent (line 164) | function isPureComponent(node, context) {
  function isStateMemberExpression (line 176) | function isStateMemberExpression(node) {

FILE: lib/util/defaultProps.js
  constant QUOTES_REGEX (line 15) | const QUOTES_REGEX = /^["']|["']$/g;
  function resolveNodeValue (line 24) | function resolveNodeValue(node) {
  function getDefaultPropsFromObjectExpression (line 45) | function getDefaultPropsFromObjectExpression(objectExpression) {
  function markDefaultPropsAsUnresolved (line 65) | function markDefaultPropsAsUnresolved(component) {
  function addDefaultPropsToComponent (line 78) | function addDefaultPropsToComponent(component, defaultProps) {
  method MemberExpression (line 102) | MemberExpression(node) {
  method MethodDefinition (line 164) | MethodDefinition(node) {
  method 'ClassProperty, PropertyDefinition' (line 204) | 'ClassProperty, PropertyDefinition'(node) {
  method ObjectExpression (line 241) | ObjectExpression(node) {

FILE: lib/util/docsUrl.js
  function docsUrl (line 3) | function docsUrl(ruleName) {

FILE: lib/util/error.js
  function error (line 7) | function error(message) {

FILE: lib/util/eslint.js
  function getSourceCode (line 3) | function getSourceCode(context) {
  function getAncestors (line 7) | function getAncestors(context, node) {
  function getScope (line 12) | function getScope(context, node) {
  function markVariableAsUsed (line 21) | function markVariableAsUsed(name, node, context) {
  function getFirstTokens (line 28) | function getFirstTokens(context, node, count) {
  function getText (line 33) | function getText(context) {

FILE: lib/util/getTokenBeforeClosingBracket.js
  function getTokenBeforeClosingBracket (line 8) | function getTokenBeforeClosingBracket(node) {

FILE: lib/util/jsx.js
  constant COMPAT_TAG_REGEX (line 15) | const COMPAT_TAG_REGEX = /^[a-z]/;
  function isDOMComponent (line 22) | function isDOMComponent(node) {
  function isFragment (line 34) | function isFragment(node, reactPragma, fragmentPragma) {
  function isJSX (line 61) | function isJSX(node) {
  function isJSXAttributeKey (line 70) | function isJSXAttributeKey(node) {
  function isWhiteSpaces (line 82) | function isWhiteSpaces(value) {
  function isReturningJSX (line 95) | function isReturningJSX(context, ASTnode, strict, ignoreNull) {
  function isReturningOnlyNull (line 150) | function isReturningOnlyNull(ASTnode, context) {

FILE: lib/util/linkComponents.js
  constant DEFAULT_LINK_COMPONENTS (line 12) | const DEFAULT_LINK_COMPONENTS = ['a'];
  constant DEFAULT_LINK_ATTRIBUTE (line 13) | const DEFAULT_LINK_ATTRIBUTE = 'href';
  constant DEFAULT_FORM_COMPONENTS (line 17) | const DEFAULT_FORM_COMPONENTS = ['form'];
  constant DEFAULT_FORM_ATTRIBUTE (line 18) | const DEFAULT_FORM_ATTRIBUTE = 'action';
  function getFormComponents (line 20) | function getFormComponents(context) {
  function getLinkComponents (line 33) | function getLinkComponents(context) {

FILE: lib/util/log.js
  function log (line 7) | function log(message) {

FILE: lib/util/makeNoMethodSetStateRule.js
  function mapTitle (line 19) | function mapTitle(methodName) {
  function shouldBeNoop (line 41) | function shouldBeNoop(context, methodName) {
  method create (line 70) | create(context) {

FILE: lib/util/pragma.js
  constant JSX_ANNOTATION_REGEX (line 10) | const JSX_ANNOTATION_REGEX = /@jsx\s+([^\s]+)/;
  constant JS_IDENTIFIER_REGEX (line 12) | const JS_IDENTIFIER_REGEX = /^[_$a-zA-Z][_$a-zA-Z0-9]*$/;
  function getCreateClassFromContext (line 18) | function getCreateClassFromContext(context) {
  function getFragmentFromContext (line 34) | function getFragmentFromContext(context) {
  function getFromContext (line 50) | function getFromContext(context) {

FILE: lib/util/propTypes.js
  function isFunctionType (line 28) | function isFunctionType(node) {
  function isSuperTypeParameterPropsDeclaration (line 42) | function isSuperTypeParameterPropsDeclaration(node) {
  function iterateProperties (line 61) | function iterateProperties(context, properties, fn, handleSpreadFn) {
  function isInsideClassBody (line 83) | function isInsideClassBody(node) {
  function startWithCapitalizedLetter (line 94) | function startWithCapitalizedLetter(node) {
  function typeScope (line 133) | function typeScope() {
  function getInTypeScope (line 142) | function getInTypeScope(key) {
  function setInTypeScope (line 152) | function setInTypeScope(key, value) {
  function hasCustomValidator (line 162) | function hasCustomValidator(validator) {
  method GenericTypeAnnotation (line 169) | GenericTypeAnnotation(annotation, parentName, seen) {
  method ObjectTypeAnnotation (line 176) | ObjectTypeAnnotation(annotation, parentName, seen) {
  method UnionTypeAnnotation (line 220) | UnionTypeAnnotation(annotation, parentName, seen) {
  method ArrayTypeAnnotation (line 233) | ArrayTypeAnnotation(annotation, parentName, seen) {
  function resolveTypeAnnotation (line 259) | function resolveTypeAnnotation(node) {
  function buildTypeAnnotationDeclarationTypes (line 279) | function buildTypeAnnotationDeclarationTypes(annotation, parentName, see...
  function declarePropTypesForObjectTypeAnnotation (line 305) | function declarePropTypesForObjectTypeAnnotation(propTypes, declaredProp...
  function declarePropTypesForIntersectionTypeAnnotation (line 343) | function declarePropTypesForIntersectionTypeAnnotation(propTypes, declar...
  function resolveValueForIdentifierNode (line 377) | function resolveValueForIdentifierNode(node, rootNode, callback) {
  function buildReactDeclarationTypes (line 403) | function buildReactDeclarationTypes(value, parentName, rootNode) {
  function isValidReactGenericTypeAnnotation (line 527) | function isValidReactGenericTypeAnnotation(annotation) {
  function getLeftMostTypeName (line 552) | function getLeftMostTypeName(node) {
  function getRightMostTypeName (line 557) | function getRightMostTypeName(node) {
  function filterInterfaceOrTypeAlias (line 567) | function filterInterfaceOrTypeAlias(node) {
  function filterInterfaceOrAliasByName (line 579) | function filterInterfaceOrAliasByName(node, typeName) {
  class DeclarePropTypesForTSTypeAnnotation (line 590) | class DeclarePropTypesForTSTypeAnnotation {
    method constructor (line 591) | constructor(propTypes, declaredPropTypes, rootNode) {
    method visitTSNode (line 607) | visitTSNode(node) {
    method searchDeclarationByName (line 640) | searchDeclarationByName(node) {
    method traverseDeclaredInterfaceOrTypeAlias (line 736) | traverseDeclaredInterfaceOrTypeAlias(node) {
    method convertIntersectionTypeToPropTypes (line 755) | convertIntersectionTypeToPropTypes(node) {
    method convertReturnTypeToPropTypes (line 764) | convertReturnTypeToPropTypes(node, rootNode) {
    method endAndStructDeclaredPropTypes (line 855) | endAndStructDeclaredPropTypes() {
  function markPropTypesAsDeclared (line 898) | function markPropTypesAsDeclared(node, propTypes, rootNode) {
  function markAnnotatedFunctionArgumentsAsDeclared (line 1043) | function markAnnotatedFunctionArgumentsAsDeclared(node, rootNode) {
  function resolveSuperParameterPropsType (line 1131) | function resolveSuperParameterPropsType(node) {
  function isAnnotatedClassPropsDeclaration (line 1160) | function isAnnotatedClassPropsDeclaration(node) {
  method ClassExpression (line 1176) | ClassExpression(node) {
  method ClassDeclaration (line 1183) | ClassDeclaration(node) {
  method 'ClassProperty, PropertyDefinition' (line 1189) | 'ClassProperty, PropertyDefinition'(node) {
  method ObjectExpression (line 1197) | ObjectExpression(node) {
  method FunctionExpression (line 1207) | FunctionExpression(node) {
  method ImportDeclaration (line 1213) | ImportDeclaration(node) {
  method MemberExpression (line 1239) | MemberExpression(node) {
  method MethodDefinition (line 1253) | MethodDefinition(node) {
  method TypeAlias (line 1270) | TypeAlias(node) {
  method TypeParameterDeclaration (line 1274) | TypeParameterDeclaration(node) {
  method Program (line 1282) | Program() {
  method BlockStatement (line 1286) | BlockStatement() {
  method 'BlockStatement:exit' (line 1290) | 'BlockStatement:exit'() {
  method 'Program:exit' (line 1294) | 'Program:exit'() {

FILE: lib/util/propTypesSort.js
  function getValueName (line 21) | function getValueName(node) {
  function isRequiredProp (line 33) | function isRequiredProp(node) {
  function isCallbackPropName (line 43) | function isCallbackPropName(propName) {
  function isShapeProp (line 53) | function isShapeProp(node) {
  function getShapeProperties (line 68) | function getShapeProperties(node) {
  function sorter (line 86) | function sorter(a, b, context, ignoreCase, requiredFirst, callbacksLast,...
  function fixPropTypesSort (line 139) | function fixPropTypesSort(

FILE: lib/util/propWrapper.js
  function searchPropWrapperFunctions (line 10) | function searchPropWrapperFunctions(name, propWrapperFunctions) {
  function getPropWrapperFunctions (line 20) | function getPropWrapperFunctions(context) {
  function isPropWrapperFunction (line 24) | function isPropWrapperFunction(context, name) {
  function getExactPropWrapperFunctions (line 32) | function getExactPropWrapperFunctions(context) {
  function isExactPropWrapperFunction (line 38) | function isExactPropWrapperFunction(context, name) {
  function formatPropWrapperFunctions (line 43) | function formatPropWrapperFunctions(propWrapperFunctions) {

FILE: lib/util/props.js
  function isPropTypesDeclaration (line 14) | function isPropTypesDeclaration(node) {
  function isContextTypesDeclaration (line 29) | function isContextTypesDeclaration(node) {
  function isContextTypeDeclaration (line 44) | function isContextTypeDeclaration(node) {
  function isChildContextTypesDeclaration (line 53) | function isChildContextTypesDeclaration(node) {
  function isDefaultPropsDeclaration (line 62) | function isDefaultPropsDeclaration(node) {
  function isDisplayNameDeclaration (line 72) | function isDisplayNameDeclaration(node) {
  function isRequiredPropType (line 91) | function isRequiredPropType(propTypeExpression) {
  function getTypeArguments (line 101) | function getTypeArguments(node) {
  function getSuperTypeArguments (line 113) | function getSuperTypeArguments(node) {

FILE: lib/util/usedPropTypes.js
  constant LIFE_CYCLE_METHODS (line 21) | const LIFE_CYCLE_METHODS = ['componentWillReceiveProps', 'shouldComponen...
  constant ASYNC_SAFE_LIFE_CYCLE_METHODS (line 22) | const ASYNC_SAFE_LIFE_CYCLE_METHODS = ['getDerivedStateFromProps', 'getS...
  function createPropVariables (line 24) | function createPropVariables() {
  function isCommonVariableNameForProps (line 70) | function isCommonVariableNameForProps(name) {
  function mustBeValidated (line 79) | function mustBeValidated(component) {
  function inLifeCycleMethod (line 90) | function inLifeCycleMethod(context, node, checkAsyncSafeLifeCycles) {
  function isNodeALifeCycleMethod (line 114) | function isNodeALifeCycleMethod(node, checkAsyncSafeLifeCycles) {
  function isInLifeCycleMethod (line 144) | function isInLifeCycleMethod(node, checkAsyncSafeLifeCycles) {
  function isSetStateUpdater (line 164) | function isSetStateUpdater(node) {
  function isPropArgumentInSetStateUpdater (line 175) | function isPropArgumentInSetStateUpdater(context, node, name) {
  function isInClassComponent (line 205) | function isInClassComponent(context, node) {
  function isThisDotProps (line 214) | function isThisDotProps(node) {
  function hasSpreadOperator (line 227) | function hasSpreadOperator(context, node) {
  function isPropTypesUsageByMemberExpression (line 240) | function isPropTypesUsageByMemberExpression(context, node, utils, checkA...
  function getPropertyName (line 273) | function getPropertyName(context, node, utils, checkAsyncSafeLifeCycles) {
  function markPropTypesAsUsed (line 317) | function markPropTypesAsUsed(node, parentNames) {
  function markDestructuredFunctionArgumentsAsUsed (line 433) | function markDestructuredFunctionArgumentsAsUsed(node) {
  function handleSetStateUpdater (line 446) | function handleSetStateUpdater(node) {
  function handleFunctionLikeExpressions (line 458) | function handleFunctionLikeExpressions(node) {
  function handleCustomValidators (line 464) | function handleCustomValidators(component) {
  method VariableDeclarator (line 480) | VariableDeclarator(node) {
  method JSXSpreadAttribute (line 543) | JSXSpreadAttribute(node) {
  method 'MemberExpression, OptionalMemberExpression' (line 550) | 'MemberExpression, OptionalMemberExpression'(node) {
  method ObjectPattern (line 562) | ObjectPattern(node) {
  method 'Program:exit' (line 570) | 'Program:exit'() {

FILE: lib/util/variable.js
  function findVariable (line 16) | function findVariable(variables, name) {
  function getVariable (line 26) | function getVariable(variables, name) {
  function getVariableFromContext (line 38) | function getVariableFromContext(context, node, name) {
  function findVariableByName (line 67) | function findVariableByName(context, node, name) {
  function getLatestVariableDefinition (line 90) | function getLatestVariableDefinition(variable) {

FILE: lib/util/version.js
  constant ULTIMATE_LATEST_SEMVER (line 15) | const ULTIMATE_LATEST_SEMVER = '999.999.999';
  function resetWarningFlag (line 19) | function resetWarningFlag() {
  function resetDetectedVersion (line 25) | function resetDetectedVersion() {
  function resolveBasedir (line 29) | function resolveBasedir(contextOrFilename) {
  function convertConfVerToSemver (line 49) | function convertConfVerToSemver(confVer) {
  function resetDefaultVersion (line 56) | function resetDefaultVersion() {
  function readDefaultReactVersionFromContext (line 60) | function readDefaultReactVersionFromContext(context) {
  function detectReactVersion (line 80) | function detectReactVersion(context) {
  function getReactVersionFromContext (line 109) | function getReactVersionFromContext(context) {
  function detectFlowVersion (line 135) | function detectFlowVersion(context) {
  function getFlowVersionFromContext (line 152) | function getFlowVersionFromContext(context) {
  function test (line 176) | function test(semverRange, confVer) {
  function testReactVersion (line 180) | function testReactVersion(context, semverRange) {
  function testFlowVersion (line 184) | function testFlowVersion(context, semverRange) {

FILE: tests/helpers/parsers.js
  function minEcmaVersion (line 13) | function minEcmaVersion(features, parserOptions) {
  function addComment (line 82) | function addComment(testObject, parser) {

FILE: tests/helpers/ruleTester.js
  function convertToFlat (line 8) | function convertToFlat(item, plugins) {
  method constructor (line 57) | constructor(config) {
  method run (line 98) | run(ruleName, rule, tests) {

FILE: tests/lib/rules/jsx-closing-bracket-location.js
  constant MESSAGE_AFTER_PROPS (line 25) | const MESSAGE_AFTER_PROPS = 'placed after the last prop';
  constant MESSAGE_AFTER_TAG (line 26) | const MESSAGE_AFTER_TAG = 'placed after the opening tag';
  constant MESSAGE_PROPS_ALIGNED (line 28) | const MESSAGE_PROPS_ALIGNED = 'aligned with the last prop';
  constant MESSAGE_TAG_ALIGNED (line 29) | const MESSAGE_TAG_ALIGNED = 'aligned with the opening tag';
  constant MESSAGE_LINE_ALIGNED (line 30) | const MESSAGE_LINE_ALIGNED = 'aligned with the line containing the openi...
  function details (line 32) | function details(expectedColumn, expectedNextLine) {

FILE: tests/lib/rules/jsx-curly-newline.js
  constant LEFT_MISSING_ERROR (line 28) | const LEFT_MISSING_ERROR = { messageId: 'expectedAfter', type: 'Punctuat...
  constant LEFT_UNEXPECTED_ERROR (line 29) | const LEFT_UNEXPECTED_ERROR = { messageId: 'unexpectedAfter', type: 'Pun...
  constant RIGHT_MISSING_ERROR (line 30) | const RIGHT_MISSING_ERROR = { messageId: 'expectedBefore', type: 'Punctu...
  constant RIGHT_UNEXPECTED_ERROR (line 31) | const RIGHT_UNEXPECTED_ERROR = { messageId: 'unexpectedBefore', type: 'P...
  constant CONSISTENT (line 34) | const CONSISTENT = ['consistent'];
  constant NEVER (line 35) | const NEVER = ['never'];
  constant MULTILINE_REQUIRE (line 36) | const MULTILINE_REQUIRE = [{ singleline: 'consistent', multiline: 'requi...

FILE: tests/lib/rules/jsx-tag-spacing.js
  function closingSlashOptions (line 31) | function closingSlashOptions(option) {
  function beforeSelfClosingOptions (line 42) | function beforeSelfClosingOptions(option) {
  function afterOpeningOptions (line 53) | function afterOpeningOptions(option) {
  function beforeClosingOptions (line 64) | function beforeClosingOptions(option) {

FILE: tests/lib/rules/jsx-wrap-multilines.js
  constant OPTIONS_ALL_NEW_LINES (line 29) | const OPTIONS_ALL_NEW_LINES = {
  constant OPTIONS_ALL_NEVER (line 39) | const OPTIONS_ALL_NEVER = {
  constant RETURN_SINGLE_LINE (line 49) | const RETURN_SINGLE_LINE = `
  constant RETURN_PAREN (line 57) | const RETURN_PAREN = `
  constant RETURN_PAREN_FRAGMENT (line 67) | const RETURN_PAREN_FRAGMENT = `
  constant RETURN_NO_PAREN (line 77) | const RETURN_NO_PAREN = `
  constant RETURN_NO_PAREN_FRAGMENT (line 87) | const RETURN_NO_PAREN_FRAGMENT = `
  constant RETURN_PAREN_NEW_LINE (line 97) | const RETURN_PAREN_NEW_LINE = `
  constant RETURN_PAREN_NEW_LINE_OPENING (line 109) | const RETURN_PAREN_NEW_LINE_OPENING = `
  constant RETURN_PAREN_NEW_LINE_OPENING_FIXED (line 121) | const RETURN_PAREN_NEW_LINE_OPENING_FIXED = `
  constant RETURN_PAREN_NEW_LINE_CLOSING (line 134) | const RETURN_PAREN_NEW_LINE_CLOSING = `
  constant RETURN_PAREN_NEW_LINE_CLOSING_FIXED (line 146) | const RETURN_PAREN_NEW_LINE_CLOSING_FIXED = `
  constant RETURN_PAREN_NEW_LINE_FRAGMENT (line 159) | const RETURN_PAREN_NEW_LINE_FRAGMENT = `
  constant RETURN_SINGLE_LINE_FRAGMENT (line 171) | const RETURN_SINGLE_LINE_FRAGMENT = `
  constant DECLARATION_TERNARY_SINGLE_LINE (line 179) | const DECLARATION_TERNARY_SINGLE_LINE = 'var hello = foo ? <p>Hello</p> ...
  constant DECLARATION_TERNARY_SINGLE_LINE_FRAGMENT (line 181) | const DECLARATION_TERNARY_SINGLE_LINE_FRAGMENT = 'var hello = foo ? <>He...
  constant DECLARATION_TERNARY_PAREN (line 183) | const DECLARATION_TERNARY_PAREN = `
  constant DECLARATION_TERNARY_PAREN_FRAGMENT (line 191) | const DECLARATION_TERNARY_PAREN_FRAGMENT = `
  constant DECLARATION_TERNARY_NO_PAREN (line 199) | const DECLARATION_TERNARY_NO_PAREN = `
  constant DECLARATION_TERNARY_NO_PAREN_FRAGMENT (line 207) | const DECLARATION_TERNARY_NO_PAREN_FRAGMENT = `
  constant DECLARATION_TERNARY_PAREN_NEW_LINE (line 215) | const DECLARATION_TERNARY_PAREN_NEW_LINE = `
  constant ASSIGNMENT_TERNARY_SINGLE_LINE (line 227) | const ASSIGNMENT_TERNARY_SINGLE_LINE = 'var hello; hello = foo ? <p>Hell...
  constant ASSIGNMENT_TERNARY_PAREN (line 229) | const ASSIGNMENT_TERNARY_PAREN = `
  constant ASSIGNMENT_TERNARY_PAREN_FRAGMENT (line 238) | const ASSIGNMENT_TERNARY_PAREN_FRAGMENT = `
  constant ASSIGNMENT_TERNARY_NO_PAREN (line 247) | const ASSIGNMENT_TERNARY_NO_PAREN = `
  constant ASSIGNMENT_TERNARY_NO_PAREN_FRAGMENT (line 256) | const ASSIGNMENT_TERNARY_NO_PAREN_FRAGMENT = `
  constant ASSIGNMENT_TERNARY_PAREN_NEW_LINE (line 265) | const ASSIGNMENT_TERNARY_PAREN_NEW_LINE = `
  constant DECLARATION_SINGLE_LINE (line 278) | const DECLARATION_SINGLE_LINE = 'var hello = <p>Hello</p>;';
  constant DECLARATION_PAREN (line 280) | const DECLARATION_PAREN = `
  constant DECLARATION_PAREN_FRAGMENT (line 286) | const DECLARATION_PAREN_FRAGMENT = `
  constant DECLARATION_NO_PAREN (line 292) | const DECLARATION_NO_PAREN = `
  constant DECLARATION_NO_PAREN_FRAGMENT (line 298) | const DECLARATION_NO_PAREN_FRAGMENT = `
  constant DECLARATION_PAREN_NEW_LINE (line 304) | const DECLARATION_PAREN_NEW_LINE = `
  constant ASSIGNMENT_SINGLE_LINE (line 312) | const ASSIGNMENT_SINGLE_LINE = 'var hello; hello = <p>Hello</p>;';
  constant ASSIGNMENT_PAREN (line 314) | const ASSIGNMENT_PAREN = `
  constant ASSIGNMENT_PAREN_FRAGMENT (line 321) | const ASSIGNMENT_PAREN_FRAGMENT = `
  constant ASSIGNMENT_NO_PAREN (line 328) | const ASSIGNMENT_NO_PAREN = `
  constant ASSIGNMENT_NO_PAREN_FRAGMENT (line 335) | const ASSIGNMENT_NO_PAREN_FRAGMENT = `
  constant ASSIGNMENT_PAREN_NEW_LINE (line 342) | const ASSIGNMENT_PAREN_NEW_LINE = `
  constant ARROW_SINGLE_LINE (line 351) | const ARROW_SINGLE_LINE = 'var hello = () => <p>Hello</p>;';
  constant ARROW_PAREN (line 353) | const ARROW_PAREN = `
  constant ARROW_PAREN_FRAGMENT (line 359) | const ARROW_PAREN_FRAGMENT = `
  constant ARROW_NO_PAREN (line 365) | const ARROW_NO_PAREN = `
  constant ARROW_NO_PAREN_FRAGMENT (line 371) | const ARROW_NO_PAREN_FRAGMENT = `
  constant ARROW_PAREN_NEW_LINE (line 377) | const ARROW_PAREN_NEW_LINE = `
  constant CONDITION_SINGLE_LINE (line 385) | const CONDITION_SINGLE_LINE = 'foo ? <p>Hello</p> : null;';
  constant CONDITION_PAREN (line 387) | const CONDITION_PAREN = `
  constant CONDITION_PAREN_FRAGMENT (line 395) | const CONDITION_PAREN_FRAGMENT = `
  constant CONDITION_NO_PAREN (line 403) | const CONDITION_NO_PAREN = `
  constant CONDITION_NO_PAREN_FRAGMENT (line 411) | const CONDITION_NO_PAREN_FRAGMENT = `
  constant CONDITION_PAREN_NEW_LINE (line 419) | const CONDITION_PAREN_NEW_LINE = `
  constant LOGICAL_SINGLE_LINE (line 429) | const LOGICAL_SINGLE_LINE = 'foo && <p>Hello</p>;';
  constant LOGICAL_PAREN (line 431) | const LOGICAL_PAREN = `
  constant LOGICAL_PAREN_FRAGMENT (line 441) | const LOGICAL_PAREN_FRAGMENT = `
  constant LOGICAL_NO_PAREN (line 451) | const LOGICAL_NO_PAREN = `
  constant LOGICAL_NO_PAREN_FRAGMENT (line 461) | const LOGICAL_NO_PAREN_FRAGMENT = `
  constant LOGICAL_PAREN_NEW_LINE_AUTOFIX (line 471) | const LOGICAL_PAREN_NEW_LINE_AUTOFIX = `
  constant LOGICAL_PAREN_NEW_LINE_AUTOFIX_FRAGMENT (line 481) | const LOGICAL_PAREN_NEW_LINE_AUTOFIX_FRAGMENT = `
  constant LOGICAL_PAREN_NEW_LINE (line 491) | const LOGICAL_PAREN_NEW_LINE = `
  constant ATTR_SINGLE_LINE (line 501) | const ATTR_SINGLE_LINE = '<div prop={<p>Hello</p>}></div>';
  constant ATTR_PAREN (line 503) | const ATTR_PAREN = `
  constant ATTR_PAREN_FRAGMENT (line 513) | const ATTR_PAREN_FRAGMENT = `
  constant ATTR_NO_PAREN (line 523) | const ATTR_NO_PAREN = `
  constant ATTR_NO_PAREN_FRAGMENT (line 533) | const ATTR_NO_PAREN_FRAGMENT = `
  constant ATTR_PAREN_NEW_LINE (line 543) | const ATTR_PAREN_NEW_LINE = `
  constant ATTR_PAREN_NEW_LINE_AUTOFIX (line 553) | const ATTR_PAREN_NEW_LINE_AUTOFIX = `
  constant ATTR_PAREN_NEW_LINE_AUTOFIX_FRAGMENT (line 563) | const ATTR_PAREN_NEW_LINE_AUTOFIX_FRAGMENT = `
  constant SFC_NO_PARENS_NO_NEWLINE (line 573) | const SFC_NO_PARENS_NO_NEWLINE = `
  constant SFC_NO_PARENS_AUTOFIX (line 579) | const SFC_NO_PARENS_AUTOFIX = `
  constant ARROW_WITH_EXPORT (line 586) | const ARROW_WITH_EXPORT = `
  constant ARROW_WITH_EXPORT_AUTOFIX (line 595) | const ARROW_WITH_EXPORT_AUTOFIX = `
  constant ARROW_WITH_LOGICAL (line 605) | const ARROW_WITH_LOGICAL = `
  constant ARROW_WITH_LOGICAL_AUTOFIX (line 617) | const ARROW_WITH_LOGICAL_AUTOFIX = `
  function addNewLineSymbols (line 629) | function addNewLineSymbols(code) {

FILE: tests/lib/rules/no-deprecated.js
  function errorMessage (line 27) | function errorMessage(oldMethod, version, newMethod, refs, extraProps) {

FILE: tests/lib/rules/no-object-type-as-default-prop.js
  constant MESSAGE_ID (line 29) | const MESSAGE_ID = 'forbiddenTypeDefaultParam';

FILE: tests/lib/rules/no-unstable-nested-components.js
  constant ERROR_MESSAGE (line 25) | const ERROR_MESSAGE = 'Do not define components during render. React wil...
  constant ERROR_MESSAGE_WITHOUT_NAME (line 26) | const ERROR_MESSAGE_WITHOUT_NAME = 'Do not define components during rend...
  constant ERROR_MESSAGE_COMPONENT_AS_PROPS (line 27) | const ERROR_MESSAGE_COMPONENT_AS_PROPS = `${ERROR_MESSAGE} If you want t...

FILE: tests/lib/rules/no-unused-state.js
  function getErrorMessages (line 23) | function getErrorMessages(unusedFields) {

FILE: tests/lib/rules/prefer-exact-props.js
  constant PROP_TYPES_MESSAGE (line 30) | const PROP_TYPES_MESSAGE = 'Component propTypes should be exact by using...
  constant FLOW_MESSAGE (line 31) | const FLOW_MESSAGE = 'Component flow props should be set with exact obje...

FILE: tests/lib/rules/static-property-placement.js
  constant STATIC_PUBLIC_FIELD (line 11) | const STATIC_PUBLIC_FIELD = 'static public field';
  constant STATIC_GETTER (line 12) | const STATIC_GETTER = 'static getter';
  constant PROPERTY_ASSIGNMENT (line 13) | const PROPERTY_ASSIGNMENT = 'property assignment';

FILE: tests/util/Components.js
  function testComponentsDetect (line 24) | function testComponentsDetect(test, instructionsOrDone, orDone) {

FILE: tests/util/ast.js
  constant DEFAULT_CONFIG (line 12) | const DEFAULT_CONFIG = {

FILE: tests/util/jsx.js
  constant DEFAULT_CONFIG (line 10) | const DEFAULT_CONFIG = {
  method getSourceCode (line 24) | getSourceCode() { return { getScope: mockContext.getScope }; }
  method getScope (line 25) | getScope() {

FILE: tests/util/pragma.js
  constant DEFAULT_CONFIG (line 9) | const DEFAULT_CONFIG = {
  constant DEFAULT_SETTINGS (line 17) | const DEFAULT_SETTINGS = {

FILE: types/rules/jsx-no-literals.d.ts
  type RawElementConfig (line 1) | type RawElementConfig = {
  type RawOverrideConfig (line 9) | type RawOverrideConfig = {
  type RawElementOverrides (line 14) | interface RawElementOverrides {
  type RawConfig (line 18) | type RawConfig = RawElementConfig & RawElementOverrides;
  type ElementConfigType (line 20) | interface ElementConfigType {
  type ElementConfigProperties (line 24) | interface ElementConfigProperties {
  type OverrideConfigProperties (line 32) | interface OverrideConfigProperties {
  type ElementConfig (line 39) | type ElementConfig = {
  type OverrideConfig (line 43) | type OverrideConfig = OverrideConfigProperties & ElementConfigProperties;
  type ElementOverrides (line 45) | interface ElementOverrides {
  type Config (line 49) | type Config = ElementConfig & ElementOverrides;
  type ResolvedConfig (line 51) | type ResolvedConfig = Config | OverrideConfig;
Condensed preview — 425 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,717K chars).
[
  {
    "path": ".editorconfig",
    "chars": 208,
    "preview": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ni"
  },
  {
    "path": ".eslint-doc-generatorrc.js",
    "chars": 302,
    "preview": "/** @type {import('eslint-doc-generator').GenerateOptions} */\nconst config = {\n  configEmoji: [\n    ['jsx-runtime', '🏃']"
  },
  {
    "path": ".eslintrc",
    "chars": 2227,
    "preview": "{\n\t\"root\": true,\n\t\"extends\": [\"airbnb-base\", \"plugin:eslint-plugin/recommended\"],\n\t\"plugins\": [\"eslint-plugin\"],\n\t\"env\":"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 613,
    "preview": "# These are supported funding model platforms\n\ngithub: [jsx-eslint, ljharb]\npatreon: # Replace with a single Patreon use"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 2357,
    "preview": "name: Bug Report\ndescription: File a bug report\ntitle: \"[Bug]: \"\nlabels: [\"bug\", \"triage\"]\nassignees: []\nbody:\n  - type:"
  },
  {
    "path": ".github/workflows/node-18+.yml",
    "chars": 3175,
    "preview": "name: 'Tests: node.js (18+)'\n\non: [pull_request, push]\n\njobs:\n  matrix:\n    runs-on: ubuntu-latest\n    outputs:\n      la"
  },
  {
    "path": ".github/workflows/node-minors.yml",
    "chars": 3373,
    "preview": "name: 'Tests: node.js (4 - 18)'\n\non: [pull_request, push]\n\njobs:\n  matrix:\n    runs-on: ubuntu-latest\n    outputs:\n     "
  },
  {
    "path": ".github/workflows/node-pretest.yml",
    "chars": 715,
    "preview": "name: 'Tests: pretest/posttest'\n\non: [pull_request, push]\n\njobs:\n  pretest:\n    runs-on: ubuntu-latest\n\n    steps:\n     "
  },
  {
    "path": ".github/workflows/npm-publish.yml",
    "chars": 4247,
    "preview": "name: Publish Package to npm\non:\n  workflow_dispatch:\n    inputs:\n      tag:\n        description: \"Tag to publish\"\n     "
  },
  {
    "path": ".github/workflows/rebase.yml",
    "chars": 175,
    "preview": "name: Automatic Rebase\n\non: [pull_request_target]\n\njobs:\n  _:\n    uses: ljharb/actions/.github/workflows/rebase.yml@main"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 2131,
    "preview": "name: Release\n\non:\n  push:\n    tags:\n      - \"v*.*.*\"\n\njobs:\n  release:\n    if: github.event.repository.fork == false\n\n "
  },
  {
    "path": ".github/workflows/require-allow-edits.yml",
    "chars": 185,
    "preview": "name: Require “Allow Edits”\n\non: [pull_request_target]\n\njobs:\n  _:\n    name: \"Require “Allow Edits”\"\n\n    runs-on: ubunt"
  },
  {
    "path": ".github/workflows/smoke-test.yml",
    "chars": 781,
    "preview": "name: Smoke test\n\non:\n  schedule:\n    - cron: '0 0 * * SUN'\n  workflow_dispatch:\n\njobs:\n  smoke-test:\n    if: ${{ github"
  },
  {
    "path": ".github/workflows/type-check.yml",
    "chars": 2254,
    "preview": "name: \"Types: check published types\"\n\non: [pull_request, push]\n\npermissions:\n  contents: read\n\njobs:\n  test:\n    name: T"
  },
  {
    "path": ".gitignore",
    "chars": 418,
    "preview": "# gitignore\n\nlib-cov\n*.seed\n*.log\n*.csv\n*.dat\n*.out\n*.pid\n*.gz\n*.sublime-project\n*.sublime-workspace\npids\nlogs\nreports\nc"
  },
  {
    "path": ".markdownlint.json",
    "chars": 132,
    "preview": "{\n  \"line-length\": false,\n  \"no-inline-html\": false,\n  \"no-hard-tabs\": { \"spaces_per_tab\": 2 },\n  \"ul-style\": { \"style\":"
  },
  {
    "path": ".markdownlintignore",
    "chars": 34,
    "preview": "CHANGELOG.md\nLICENSE\nnode_modules\n"
  },
  {
    "path": ".npmrc",
    "chars": 19,
    "preview": "package-lock=false\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 251938,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nThis project adheres to [Semantic Ver"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 491,
    "preview": "# Contributing to `eslint-plugin-react`\n\n## `eslint` Rules\n\n### Markup\n\nFiles documenting individual rules live in docs/"
  },
  {
    "path": "LICENSE",
    "chars": 1085,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2014 Yannick Croissant\n\nPermission is hereby granted, free of charge, to any person"
  },
  {
    "path": "README.md",
    "chars": 39391,
    "preview": "# `eslint-plugin-react` <sup>[![Version Badge][npm-version-svg]][package-url]</sup>\n\n===================\n\n[![github acti"
  },
  {
    "path": "SECURITY.md",
    "chars": 491,
    "preview": "# Security Policy\n\n## Supported Versions\n\nThis is the list of versions of `eslint-plugin-react` which are currently bein"
  },
  {
    "path": "build.tsconfig.json",
    "chars": 197,
    "preview": "{\n  \"extends\": \"./tsconfig\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"compilerOptions\": {\n    \"declaration\": true,\n    \"decla"
  },
  {
    "path": "configs/all.js",
    "chars": 317,
    "preview": "'use strict';\n\nconst plugin = require('..');\n\nconst legacyConfig = plugin.configs.all;\n\nmodule.exports = {\n  plugins: { "
  },
  {
    "path": "configs/jsx-runtime.js",
    "chars": 328,
    "preview": "'use strict';\n\nconst plugin = require('..');\n\nconst legacyConfig = plugin.configs['jsx-runtime'];\n\nmodule.exports = {\n  "
  },
  {
    "path": "configs/recommended.js",
    "chars": 325,
    "preview": "'use strict';\n\nconst plugin = require('..');\n\nconst legacyConfig = plugin.configs.recommended;\n\nmodule.exports = {\n  plu"
  },
  {
    "path": "docs/rules/async-server-action.md",
    "chars": 984,
    "preview": "# react/async-server-action\n\n📝 Require functions with the `use server` directive to be async.\n\n💡 This rule is manually f"
  },
  {
    "path": "docs/rules/boolean-prop-naming.md",
    "chars": 3121,
    "preview": "# react/boolean-prop-naming\n\n📝 Enforces consistent naming for boolean props.\n\n<!-- end auto-generated rule header -->\n\nA"
  },
  {
    "path": "docs/rules/button-has-type.md",
    "chars": 2321,
    "preview": "# react/button-has-type\n\n📝 Disallow usage of `button` elements without an explicit `type` attribute.\n\n<!-- end auto-gene"
  },
  {
    "path": "docs/rules/checked-requires-onchange-or-readonly.md",
    "chars": 1515,
    "preview": "# react/checked-requires-onchange-or-readonly\n\n📝 Enforce using `onChange` or `readonly` attribute when `checked` is used"
  },
  {
    "path": "docs/rules/default-props-match-prop-types.md",
    "chars": 4081,
    "preview": "# react/default-props-match-prop-types\n\n📝 Enforce all defaultProps have a corresponding non-required PropType.\n\n<!-- end"
  },
  {
    "path": "docs/rules/destructuring-assignment.md",
    "chars": 2814,
    "preview": "# react/destructuring-assignment\n\n📝 Enforce consistent usage of destructuring assignment of props, state, and context.\n\n"
  },
  {
    "path": "docs/rules/display-name.md",
    "chars": 3595,
    "preview": "# react/display-name\n\n📝 Disallow missing displayName in a React component definition.\n\n💼 This rule is enabled in the ☑️ "
  },
  {
    "path": "docs/rules/forbid-component-props.md",
    "chars": 2933,
    "preview": "# react/forbid-component-props\n\n📝 Disallow certain props on components.\n\n<!-- end auto-generated rule header -->\n\nBy def"
  },
  {
    "path": "docs/rules/forbid-dom-props.md",
    "chars": 2476,
    "preview": "# react/forbid-dom-props\n\n📝 Disallow certain props on DOM Nodes.\n\n<!-- end auto-generated rule header -->\n\nThis rule pre"
  },
  {
    "path": "docs/rules/forbid-elements.md",
    "chars": 1722,
    "preview": "# react/forbid-elements\n\n📝 Disallow certain elements.\n\n<!-- end auto-generated rule header -->\n\nYou may want to forbid u"
  },
  {
    "path": "docs/rules/forbid-foreign-prop-types.md",
    "chars": 1728,
    "preview": "# react/forbid-foreign-prop-types\n\n📝 Disallow using another component's propTypes.\n\n<!-- end auto-generated rule header "
  },
  {
    "path": "docs/rules/forbid-prop-types.md",
    "chars": 1901,
    "preview": "# react/forbid-prop-types\n\n📝 Disallow certain propTypes.\n\n<!-- end auto-generated rule header -->\n\nBy default this rule "
  },
  {
    "path": "docs/rules/forward-ref-uses-ref.md",
    "chars": 1194,
    "preview": "# react/forward-ref-uses-ref\n\n📝 Require all forwardRef components include a ref parameter.\n\n💡 This rule is manually fixa"
  },
  {
    "path": "docs/rules/function-component-definition.md",
    "chars": 6871,
    "preview": "# react/function-component-definition\n\n📝 Enforce a specific function type for function components.\n\n🔧 This rule is autom"
  },
  {
    "path": "docs/rules/hook-use-state.md",
    "chars": 2023,
    "preview": "# react/hook-use-state\n\n📝 Ensure destructuring and symmetric naming of useState hook value and setter variables.\n\n💡 This"
  },
  {
    "path": "docs/rules/iframe-missing-sandbox.md",
    "chars": 1324,
    "preview": "# react/iframe-missing-sandbox\n\n📝 Enforce sandbox attribute on iframe elements.\n\n<!-- end auto-generated rule header -->"
  },
  {
    "path": "docs/rules/jsx-boolean-value.md",
    "chars": 2727,
    "preview": "# react/jsx-boolean-value\n\n📝 Enforce boolean attributes notation in JSX.\n\n🔧 This rule is automatically fixable by the [`"
  },
  {
    "path": "docs/rules/jsx-child-element-spacing.md",
    "chars": 1007,
    "preview": "# react/jsx-child-element-spacing\n\n📝 Enforce or disallow spaces inside of curly braces in JSX attributes and expressions"
  },
  {
    "path": "docs/rules/jsx-closing-bracket-location.md",
    "chars": 4446,
    "preview": "# react/jsx-closing-bracket-location\n\n📝 Enforce closing bracket location in JSX.\n\n🔧 This rule is automatically fixable b"
  },
  {
    "path": "docs/rules/jsx-closing-tag-location.md",
    "chars": 2752,
    "preview": "# react/jsx-closing-tag-location\n\n📝 Enforce closing tag location for multiline JSX.\n\n🔧 This rule is automatically fixabl"
  },
  {
    "path": "docs/rules/jsx-curly-brace-presence.md",
    "chars": 6306,
    "preview": "# react/jsx-curly-brace-presence\n\n📝 Disallow unnecessary JSX expressions when literals alone are sufficient or enforce J"
  },
  {
    "path": "docs/rules/jsx-curly-newline.md",
    "chars": 2639,
    "preview": "# react/jsx-curly-newline\n\n📝 Enforce consistent linebreaks in curly braces in JSX attributes and expressions.\n\n🔧 This ru"
  },
  {
    "path": "docs/rules/jsx-curly-spacing.md",
    "chars": 6951,
    "preview": "# react/jsx-curly-spacing\n\n📝 Enforce or disallow spaces inside of curly braces in JSX attributes and expressions.\n\n🔧 Thi"
  },
  {
    "path": "docs/rules/jsx-equals-spacing.md",
    "chars": 1681,
    "preview": "# react/jsx-equals-spacing\n\n📝 Enforce or disallow spaces around equal signs in JSX attributes.\n\n🔧 This rule is automatic"
  },
  {
    "path": "docs/rules/jsx-filename-extension.md",
    "chars": 1513,
    "preview": "# react/jsx-filename-extension\n\n📝 Disallow file extensions that may contain JSX.\n\n<!-- end auto-generated rule header --"
  },
  {
    "path": "docs/rules/jsx-first-prop-new-line.md",
    "chars": 2588,
    "preview": "# react/jsx-first-prop-new-line\n\n📝 Enforce proper position of the first property in JSX.\n\n🔧 This rule is automatically f"
  },
  {
    "path": "docs/rules/jsx-fragments.md",
    "chars": 1703,
    "preview": "# react/jsx-fragments\n\n📝 Enforce shorthand or standard form for React fragments.\n\n🔧 This rule is automatically fixable b"
  },
  {
    "path": "docs/rules/jsx-handler-names.md",
    "chars": 1614,
    "preview": "# react/jsx-handler-names\n\n📝 Enforce event handler naming conventions in JSX.\n\n<!-- end auto-generated rule header -->\n\n"
  },
  {
    "path": "docs/rules/jsx-indent-props.md",
    "chars": 2515,
    "preview": "# react/jsx-indent-props\n\n📝 Enforce props indentation in JSX.\n\n🔧 This rule is automatically fixable by the [`--fix` CLI "
  },
  {
    "path": "docs/rules/jsx-indent.md",
    "chars": 2079,
    "preview": "# react/jsx-indent\n\n📝 Enforce JSX indentation.\n\n🔧 This rule is automatically fixable by the [`--fix` CLI option](https:/"
  },
  {
    "path": "docs/rules/jsx-key.md",
    "chars": 2455,
    "preview": "# react/jsx-key\n\n📝 Disallow missing `key` props in iterators/collection literals.\n\n💼 This rule is enabled in the ☑️ `rec"
  },
  {
    "path": "docs/rules/jsx-max-depth.md",
    "chars": 1093,
    "preview": "# react/jsx-max-depth\n\n📝 Enforce JSX maximum depth.\n\n<!-- end auto-generated rule header -->\n\nThis option validates a sp"
  },
  {
    "path": "docs/rules/jsx-max-props-per-line.md",
    "chars": 2514,
    "preview": "# react/jsx-max-props-per-line\n\n📝 Enforce maximum of props on a single line in JSX.\n\n🔧 This rule is automatically fixabl"
  },
  {
    "path": "docs/rules/jsx-newline.md",
    "chars": 3324,
    "preview": "# react/jsx-newline\n\n📝 Require or prevent a new line after jsx elements and expressions.\n\n🔧 This rule is automatically f"
  },
  {
    "path": "docs/rules/jsx-no-bind.md",
    "chars": 7020,
    "preview": "# react/jsx-no-bind\n\n📝 Disallow `.bind()` or arrow functions in JSX props.\n\n<!-- end auto-generated rule header -->\n\nUsi"
  },
  {
    "path": "docs/rules/jsx-no-comment-textnodes.md",
    "chars": 1500,
    "preview": "# react/jsx-no-comment-textnodes\n\n📝 Disallow comments from being inserted as text nodes.\n\n💼 This rule is enabled in the "
  },
  {
    "path": "docs/rules/jsx-no-constructed-context-values.md",
    "chars": 1919,
    "preview": "# react/jsx-no-constructed-context-values\n\n📝 Disallows JSX context provider values from taking values that will cause ne"
  },
  {
    "path": "docs/rules/jsx-no-duplicate-props.md",
    "chars": 828,
    "preview": "# react/jsx-no-duplicate-props\n\n📝 Disallow duplicate properties in JSX.\n\n💼 This rule is enabled in the ☑️ `recommended` "
  },
  {
    "path": "docs/rules/jsx-no-leaked-render.md",
    "chars": 7937,
    "preview": "# react/jsx-no-leaked-render\n\n📝 Disallow problematic leaked values from being rendered.\n\n🔧 This rule is automatically fi"
  },
  {
    "path": "docs/rules/jsx-no-literals.md",
    "chars": 5924,
    "preview": "# react/jsx-no-literals\n\n📝 Disallow usage of string literals in JSX.\n\n<!-- end auto-generated rule header -->\n\nThere are"
  },
  {
    "path": "docs/rules/jsx-no-script-url.md",
    "chars": 2447,
    "preview": "# react/jsx-no-script-url\n\n📝 Disallow usage of `javascript:` URLs.\n\n<!-- end auto-generated rule header -->\n\n**In React "
  },
  {
    "path": "docs/rules/jsx-no-target-blank.md",
    "chars": 6435,
    "preview": "# react/jsx-no-target-blank\n\n📝 Disallow `target=\"_blank\"` attribute without `rel=\"noreferrer\"`.\n\n💼 This rule is enabled "
  },
  {
    "path": "docs/rules/jsx-no-undef.md",
    "chars": 1254,
    "preview": "# react/jsx-no-undef\n\n📝 Disallow undeclared variables in JSX.\n\n💼 This rule is enabled in the ☑️ `recommended` [config](h"
  },
  {
    "path": "docs/rules/jsx-no-useless-fragment.md",
    "chars": 1471,
    "preview": "# react/jsx-no-useless-fragment\n\n📝 Disallow unnecessary fragments.\n\n🔧 This rule is automatically fixable by the [`--fix`"
  },
  {
    "path": "docs/rules/jsx-one-expression-per-line.md",
    "chars": 1828,
    "preview": "# react/jsx-one-expression-per-line\n\n📝 Require one JSX element per line.\n\n🔧 This rule is automatically fixable by the [`"
  },
  {
    "path": "docs/rules/jsx-pascal-case.md",
    "chars": 2297,
    "preview": "# react/jsx-pascal-case\n\n📝 Enforce PascalCase for user-defined JSX components.\n\n<!-- end auto-generated rule header -->\n"
  },
  {
    "path": "docs/rules/jsx-props-no-multi-spaces.md",
    "chars": 925,
    "preview": "# react/jsx-props-no-multi-spaces\n\n📝 Disallow multiple spaces between inline JSX props.\n\n🔧 This rule is automatically fi"
  },
  {
    "path": "docs/rules/jsx-props-no-spread-multi.md",
    "chars": 786,
    "preview": "# react/jsx-props-no-spread-multi\n\n📝 Disallow JSX prop spreading the same identifier multiple times.\n\n<!-- end auto-gene"
  },
  {
    "path": "docs/rules/jsx-props-no-spreading.md",
    "chars": 3089,
    "preview": "# react/jsx-props-no-spreading\n\n📝 Disallow JSX prop spreading.\n\n<!-- end auto-generated rule header -->\n\nEnforces that t"
  },
  {
    "path": "docs/rules/jsx-sort-default-props.md",
    "chars": 3752,
    "preview": "# react/jsx-sort-default-props\n\n📝 Enforce defaultProps declarations alphabetical sorting.\n\n❌ This rule is deprecated. It"
  },
  {
    "path": "docs/rules/jsx-sort-props.md",
    "chars": 5245,
    "preview": "# react/jsx-sort-props\n\n📝 Enforce props alphabetical sorting.\n\n🔧 This rule is automatically fixable by the [`--fix` CLI "
  },
  {
    "path": "docs/rules/jsx-space-before-closing.md",
    "chars": 1738,
    "preview": "# react/jsx-space-before-closing\n\n📝 Enforce spacing before closing bracket in JSX.\n\n❌ This rule is deprecated. It was re"
  },
  {
    "path": "docs/rules/jsx-tag-spacing.md",
    "chars": 7024,
    "preview": "# react/jsx-tag-spacing\n\n📝 Enforce whitespace in and around the JSX opening and closing brackets.\n\n🔧 This rule is automa"
  },
  {
    "path": "docs/rules/jsx-uses-react.md",
    "chars": 1778,
    "preview": "# react/jsx-uses-react\n\n📝 Disallow React to be incorrectly marked as unused.\n\n💼🚫 This rule is enabled in the ☑️ `recomme"
  },
  {
    "path": "docs/rules/jsx-uses-vars.md",
    "chars": 936,
    "preview": "# react/jsx-uses-vars\n\n📝 Disallow variables used in JSX to be incorrectly marked as unused.\n\n💼 This rule is enabled in t"
  },
  {
    "path": "docs/rules/jsx-wrap-multilines.md",
    "chars": 11022,
    "preview": "# react/jsx-wrap-multilines\n\n📝 Disallow missing parentheses around multiline JSX.\n\n🔧 This rule is automatically fixable "
  },
  {
    "path": "docs/rules/no-access-state-in-setstate.md",
    "chars": 1214,
    "preview": "# react/no-access-state-in-setstate\n\n📝 Disallow when this.state is accessed within setState.\n\n<!-- end auto-generated ru"
  },
  {
    "path": "docs/rules/no-adjacent-inline-elements.md",
    "chars": 743,
    "preview": "# react/no-adjacent-inline-elements\n\n📝 Disallow adjacent inline elements not separated by whitespace.\n\n<!-- end auto-gen"
  },
  {
    "path": "docs/rules/no-array-index-key.md",
    "chars": 3249,
    "preview": "# react/no-array-index-key\n\n📝 Disallow usage of Array index in keys.\n\n<!-- end auto-generated rule header -->\n\nWarn if a"
  },
  {
    "path": "docs/rules/no-arrow-function-lifecycle.md",
    "chars": 1199,
    "preview": "# react/no-arrow-function-lifecycle\n\n📝 Lifecycle methods should be methods on the prototype, not class fields.\n\n🔧 This r"
  },
  {
    "path": "docs/rules/no-children-prop.md",
    "chars": 1605,
    "preview": "# react/no-children-prop\n\n📝 Disallow passing of children as props.\n\n💼 This rule is enabled in the ☑️ `recommended` [conf"
  },
  {
    "path": "docs/rules/no-danger-with-children.md",
    "chars": 1343,
    "preview": "# react/no-danger-with-children\n\n📝 Disallow when a DOM element is using both children and dangerouslySetInnerHTML.\n\n💼 Th"
  },
  {
    "path": "docs/rules/no-danger.md",
    "chars": 1197,
    "preview": "# react/no-danger\n\n📝 Disallow usage of dangerous JSX properties.\n\n<!-- end auto-generated rule header -->\n\nDangerous pro"
  },
  {
    "path": "docs/rules/no-deprecated.md",
    "chars": 1946,
    "preview": "# react/no-deprecated\n\n📝 Disallow usage of deprecated methods.\n\n💼 This rule is enabled in the ☑️ `recommended` [config]("
  },
  {
    "path": "docs/rules/no-did-mount-set-state.md",
    "chars": 2047,
    "preview": "# react/no-did-mount-set-state\n\n📝 Disallow usage of setState in componentDidMount.\n\n<!-- end auto-generated rule header "
  },
  {
    "path": "docs/rules/no-did-update-set-state.md",
    "chars": 1953,
    "preview": "# react/no-did-update-set-state\n\n📝 Disallow usage of setState in componentDidUpdate.\n\n<!-- end auto-generated rule heade"
  },
  {
    "path": "docs/rules/no-direct-mutation-state.md",
    "chars": 1457,
    "preview": "# react/no-direct-mutation-state\n\n📝 Disallow direct mutation of this.state.\n\n💼 This rule is enabled in the ☑️ `recommend"
  },
  {
    "path": "docs/rules/no-find-dom-node.md",
    "chars": 948,
    "preview": "# react/no-find-dom-node\n\n📝 Disallow usage of findDOMNode.\n\n💼 This rule is enabled in the ☑️ `recommended` [config](http"
  },
  {
    "path": "docs/rules/no-invalid-html-attribute.md",
    "chars": 929,
    "preview": "# react/no-invalid-html-attribute\n\n📝 Disallow usage of invalid attributes.\n\n💡 This rule is manually fixable by [editor s"
  },
  {
    "path": "docs/rules/no-is-mounted.md",
    "chars": 962,
    "preview": "# react/no-is-mounted\n\n📝 Disallow usage of isMounted.\n\n💼 This rule is enabled in the ☑️ `recommended` [config](https://g"
  },
  {
    "path": "docs/rules/no-multi-comp.md",
    "chars": 1514,
    "preview": "# react/no-multi-comp\n\n📝 Disallow multiple component definition per file.\n\n<!-- end auto-generated rule header -->\n\nDecl"
  },
  {
    "path": "docs/rules/no-namespace.md",
    "chars": 541,
    "preview": "# react/no-namespace\n\n📝 Enforce that namespaces are not used in React elements.\n\n<!-- end auto-generated rule header -->"
  },
  {
    "path": "docs/rules/no-object-type-as-default-prop.md",
    "chars": 2685,
    "preview": "# react/no-object-type-as-default-prop\n\n📝 Disallow usage of referential-type variables as default param in functional co"
  },
  {
    "path": "docs/rules/no-redundant-should-component-update.md",
    "chars": 1232,
    "preview": "# react/no-redundant-should-component-update\n\n📝 Disallow usage of shouldComponentUpdate when extending React.PureCompone"
  },
  {
    "path": "docs/rules/no-render-return-value.md",
    "chars": 1220,
    "preview": "# react/no-render-return-value\n\n📝 Disallow usage of the return value of ReactDOM.render.\n\n💼 This rule is enabled in the "
  },
  {
    "path": "docs/rules/no-set-state.md",
    "chars": 1022,
    "preview": "# react/no-set-state\n\n📝 Disallow usage of setState.\n\n<!-- end auto-generated rule header -->\n\nWhen using an architecture"
  },
  {
    "path": "docs/rules/no-string-refs.md",
    "chars": 1752,
    "preview": "# react/no-string-refs\n\n📝 Disallow using string references.\n\n💼 This rule is enabled in the ☑️ `recommended` [config](htt"
  },
  {
    "path": "docs/rules/no-this-in-sfc.md",
    "chars": 2545,
    "preview": "# react/no-this-in-sfc\n\n📝 Disallow `this` from being used in stateless functional components.\n\n<!-- end auto-generated r"
  },
  {
    "path": "docs/rules/no-typos.md",
    "chars": 2728,
    "preview": "# react/no-typos\n\n📝 Disallow common typos.\n\n<!-- end auto-generated rule header -->\n\nEnsure no casing typos were made de"
  },
  {
    "path": "docs/rules/no-unescaped-entities.md",
    "chars": 2602,
    "preview": "# react/no-unescaped-entities\n\n📝 Disallow unescaped HTML entities from appearing in markup.\n\n💼 This rule is enabled in t"
  },
  {
    "path": "docs/rules/no-unknown-property.md",
    "chars": 2816,
    "preview": "# react/no-unknown-property\n\n📝 Disallow usage of unknown DOM property.\n\n💼 This rule is enabled in the ☑️ `recommended` ["
  },
  {
    "path": "docs/rules/no-unsafe.md",
    "chars": 2768,
    "preview": "# react/no-unsafe\n\n📝 Disallow usage of unsafe lifecycle methods.\n\n🚫 This rule is _disabled_ in the ☑️ `recommended` [con"
  },
  {
    "path": "docs/rules/no-unstable-nested-components.md",
    "chars": 4202,
    "preview": "# react/no-unstable-nested-components\n\n📝 Disallow creating unstable components inside components.\n\n<!-- end auto-generat"
  },
  {
    "path": "docs/rules/no-unused-class-component-methods.md",
    "chars": 682,
    "preview": "# react/no-unused-class-component-methods\n\n📝 Disallow declaring unused methods of component class.\n\n<!-- end auto-genera"
  },
  {
    "path": "docs/rules/no-unused-prop-types.md",
    "chars": 3457,
    "preview": "# react/no-unused-prop-types\n\n📝 Disallow definitions of unused propTypes.\n\n<!-- end auto-generated rule header -->\n\nWarn"
  },
  {
    "path": "docs/rules/no-unused-state.md",
    "chars": 946,
    "preview": "# react/no-unused-state\n\n📝 Disallow definitions of unused state.\n\n<!-- end auto-generated rule header -->\n\nWarns you if "
  },
  {
    "path": "docs/rules/no-will-update-set-state.md",
    "chars": 1972,
    "preview": "# react/no-will-update-set-state\n\n📝 Disallow usage of setState in componentWillUpdate.\n\n<!-- end auto-generated rule hea"
  },
  {
    "path": "docs/rules/prefer-es6-class.md",
    "chars": 1217,
    "preview": "# react/prefer-es6-class\n\n📝 Enforce ES5 or ES6 class for React Components.\n\n<!-- end auto-generated rule header -->\n\nRea"
  },
  {
    "path": "docs/rules/prefer-exact-props.md",
    "chars": 2987,
    "preview": "# react/prefer-exact-props\n\n📝 Prefer exact proptype definitions.\n\n<!-- end auto-generated rule header -->\n\nRecommends op"
  },
  {
    "path": "docs/rules/prefer-read-only-props.md",
    "chars": 1792,
    "preview": "# react/prefer-read-only-props\n\n📝 Enforce that props are read-only.\n\n🔧 This rule is automatically fixable by the [`--fix"
  },
  {
    "path": "docs/rules/prefer-stateless-function.md",
    "chars": 2481,
    "preview": "# react/prefer-stateless-function\n\n📝 Enforce stateless components to be written as a pure function.\n\n<!-- end auto-gener"
  },
  {
    "path": "docs/rules/prop-types.md",
    "chars": 4790,
    "preview": "# react/prop-types\n\n📝 Disallow missing props validation in a React component definition.\n\n💼 This rule is enabled in the "
  },
  {
    "path": "docs/rules/react-in-jsx-scope.md",
    "chars": 1667,
    "preview": "# react/react-in-jsx-scope\n\n📝 Disallow missing React when using JSX.\n\n💼🚫 This rule is enabled in the ☑️ `recommended` [c"
  },
  {
    "path": "docs/rules/require-default-props.md",
    "chars": 9502,
    "preview": "# react/require-default-props\n\n📝 Enforce a defaultProps definition for every prop that is not a required prop.\n\n<!-- end"
  },
  {
    "path": "docs/rules/require-optimization.md",
    "chars": 1422,
    "preview": "# react/require-optimization\n\n📝 Enforce React components to have a shouldComponentUpdate method.\n\n<!-- end auto-generate"
  },
  {
    "path": "docs/rules/require-render-return.md",
    "chars": 877,
    "preview": "# react/require-render-return\n\n📝 Enforce ES5 or ES6 class for returning value in render function.\n\n💼 This rule is enable"
  },
  {
    "path": "docs/rules/self-closing-comp.md",
    "chars": 2297,
    "preview": "# react/self-closing-comp\n\n📝 Disallow extra closing tags for components without children.\n\n🔧 This rule is automatically "
  },
  {
    "path": "docs/rules/sort-comp.md",
    "chars": 7204,
    "preview": "# react/sort-comp\n\n📝 Enforce component methods order.\n\n<!-- end auto-generated rule header -->\n\n🔧 This rule is automatic"
  },
  {
    "path": "docs/rules/sort-default-props.md",
    "chars": 3673,
    "preview": "# react/sort-default-props\n\n📝 Enforce defaultProps declarations alphabetical sorting.\n\n<!-- end auto-generated rule head"
  },
  {
    "path": "docs/rules/sort-prop-types.md",
    "chars": 3730,
    "preview": "# react/sort-prop-types\n\n📝 Enforce propTypes declarations alphabetical sorting.\n\n🔧 This rule is automatically fixable by"
  },
  {
    "path": "docs/rules/state-in-constructor.md",
    "chars": 1379,
    "preview": "# react/state-in-constructor\n\n📝 Enforce class component state initialization style.\n\n<!-- end auto-generated rule header"
  },
  {
    "path": "docs/rules/static-property-placement.md",
    "chars": 5007,
    "preview": "# react/static-property-placement\n\n📝 Enforces where React component static properties should be positioned.\n\n<!-- end au"
  },
  {
    "path": "docs/rules/style-prop-object.md",
    "chars": 1591,
    "preview": "# react/style-prop-object\n\n📝 Enforce style prop value is an object.\n\n<!-- end auto-generated rule header -->\n\nRequire th"
  },
  {
    "path": "docs/rules/void-dom-elements-no-children.md",
    "chars": 1170,
    "preview": "# react/void-dom-elements-no-children\n\n📝 Disallow void DOM elements (e.g. `<img />`, `<br />`) from receiving children.\n"
  },
  {
    "path": "index.js",
    "chars": 3768,
    "preview": "'use strict';\n\nconst fromEntries = require('object.fromentries');\nconst entries = require('object.entries');\n\nconst allR"
  },
  {
    "path": "lib/rules/async-server-action.js",
    "chars": 2175,
    "preview": "/**\n * @fileoverview Require functions with the `use server` directive to be async\n * @author Jorge Zreik\n */\n\n'use stri"
  },
  {
    "path": "lib/rules/boolean-prop-naming.js",
    "chars": 13284,
    "preview": "/**\n * @fileoverview Enforces consistent naming for boolean props\n * @author Ev Haus\n */\n\n'use strict';\n\nconst flatMap ="
  },
  {
    "path": "lib/rules/button-has-type.js",
    "chars": 4528,
    "preview": "/**\n * @fileoverview Forbid \"button\" element without an explicit \"type\" attribute\n * @author Filipp Riabchun\n */\n\n'use s"
  },
  {
    "path": "lib/rules/checked-requires-onchange-or-readonly.js",
    "chars": 3547,
    "preview": "/**\n * @fileoverview Enforce the use of the 'onChange' or 'readonly' attribute when 'checked' is used'\n * @author Jaesoe"
  },
  {
    "path": "lib/rules/default-props-match-prop-types.js",
    "chars": 3468,
    "preview": "/**\n * @fileOverview Enforce all defaultProps are defined in propTypes\n * @author Vitor Balocco\n * @author Roy Sutton\n *"
  },
  {
    "path": "lib/rules/destructuring-assignment.js",
    "chars": 9888,
    "preview": "/**\n * @fileoverview Enforce consistent usage of destructuring assignment of props, state, and context.\n */\n\n'use strict"
  },
  {
    "path": "lib/rules/display-name.js",
    "chars": 12805,
    "preview": "/**\n * @fileoverview Prevent missing displayName in a React component definition\n * @author Yannick Croissant\n */\n\n'use "
  },
  {
    "path": "lib/rules/forbid-component-props.js",
    "chars": 7769,
    "preview": "/**\n * @fileoverview Forbid certain props on components\n * @author Joe Lencioni\n */\n\n'use strict';\n\nconst minimatch = re"
  },
  {
    "path": "lib/rules/forbid-dom-props.js",
    "chars": 4147,
    "preview": "/**\n * @fileoverview Forbid certain props on DOM Nodes\n * @author David Vázquez\n */\n\n'use strict';\n\nconst docsUrl = requ"
  },
  {
    "path": "lib/rules/forbid-elements.js",
    "chars": 3200,
    "preview": "/**\n * @fileoverview Forbid certain elements\n * @author Kenneth Chung\n */\n\n'use strict';\n\nconst has = require('hasown');"
  },
  {
    "path": "lib/rules/forbid-foreign-prop-types.js",
    "chars": 3714,
    "preview": "/**\n * @fileoverview Forbid using another component's propTypes\n * @author Ian Christian Myers\n */\n\n'use strict';\n\nconst"
  },
  {
    "path": "lib/rules/forbid-prop-types.js",
    "chars": 8859,
    "preview": "/**\n * @fileoverview Forbid certain propTypes\n */\n\n'use strict';\n\nconst variableUtil = require('../util/variable');\ncons"
  },
  {
    "path": "lib/rules/forward-ref-uses-ref.js",
    "chars": 3133,
    "preview": "/**\n * @fileoverview Require all forwardRef components include a ref parameter\n */\n\n'use strict';\n\nconst isParenthesized"
  },
  {
    "path": "lib/rules/function-component-definition.js",
    "chars": 8413,
    "preview": "/**\n * @fileoverview Standardize the way function component get defined\n * @author Stefan Wullems\n */\n\n'use strict';\n\nco"
  },
  {
    "path": "lib/rules/hook-use-state.js",
    "chars": 7365,
    "preview": "/**\n * @fileoverview Ensure symmetric naming of useState hook value and setter variables\n * @author Duncan Beevers\n */\n\n"
  },
  {
    "path": "lib/rules/iframe-missing-sandbox.js",
    "chars": 4022,
    "preview": "/**\n * @fileoverview TBD\n */\n\n'use strict';\n\nconst docsUrl = require('../util/docsUrl');\nconst isCreateElement = require"
  },
  {
    "path": "lib/rules/index.js",
    "chars": 6396,
    "preview": "'use strict';\n\n/* eslint global-require: 0 */\n\n/** @satisfies {Record<string, import('eslint').Rule.RuleModule>} */\ncons"
  },
  {
    "path": "lib/rules/jsx-boolean-value.js",
    "chars": 4515,
    "preview": "/**\n * @fileoverview Enforce boolean attributes notation in JSX\n * @author Yannick Croissant\n */\n\n'use strict';\n\nconst d"
  },
  {
    "path": "lib/rules/jsx-child-element-spacing.js",
    "chars": 2915,
    "preview": "'use strict';\n\nconst docsUrl = require('../util/docsUrl');\nconst report = require('../util/report');\n\n// This list is ta"
  },
  {
    "path": "lib/rules/jsx-closing-bracket-location.js",
    "chars": 11006,
    "preview": "/**\n * @fileoverview Validate closing bracket location in JSX\n * @author Yannick Croissant\n */\n\n'use strict';\n\nconst has"
  },
  {
    "path": "lib/rules/jsx-closing-tag-location.js",
    "chars": 3766,
    "preview": "/**\n * @fileoverview Validate closing tag location in JSX\n * @author Ross Solomon\n */\n\n'use strict';\n\nconst repeat = req"
  },
  {
    "path": "lib/rules/jsx-curly-brace-presence.js",
    "chars": 13890,
    "preview": "/**\n * @fileoverview Enforce curly braces or disallow unnecessary curly brace in JSX\n * @author Jacky Ho\n * @author Simo"
  },
  {
    "path": "lib/rules/jsx-curly-newline.js",
    "chars": 6128,
    "preview": "/**\n * @fileoverview enforce consistent line breaks inside jsx curly\n */\n\n'use strict';\n\nconst docsUrl = require('../uti"
  },
  {
    "path": "lib/rules/jsx-curly-spacing.js",
    "chars": 14795,
    "preview": "/**\n * @fileoverview Enforce or disallow spaces inside of curly braces in JSX attributes.\n * @author Jamund Ferguson\n * "
  },
  {
    "path": "lib/rules/jsx-equals-spacing.js",
    "chars": 3621,
    "preview": "/**\n * @fileoverview Disallow or enforce spaces around equal signs in JSX attributes.\n * @author ryym\n */\n\n'use strict';"
  },
  {
    "path": "lib/rules/jsx-filename-extension.js",
    "chars": 3240,
    "preview": "/**\n * @fileoverview Restrict file extensions that may contain JSX\n * @author Joe Lencioni\n */\n\n'use strict';\n\nconst pat"
  },
  {
    "path": "lib/rules/jsx-first-prop-new-line.js",
    "chars": 2734,
    "preview": "/**\n * @fileoverview Ensure proper position of the first property in JSX\n * @author Joachim Seminck\n */\n\n'use strict';\n\n"
  },
  {
    "path": "lib/rules/jsx-fragments.js",
    "chars": 7043,
    "preview": "/**\n * @fileoverview Enforce shorthand or standard form for React fragments.\n * @author Alex Zherdev\n */\n\n'use strict';\n"
  },
  {
    "path": "lib/rules/jsx-handler-names.js",
    "chars": 6682,
    "preview": "/**\n * @fileoverview Enforce event handler naming conventions in JSX\n * @author Jake Marsh\n */\n\n'use strict';\n\nconst min"
  },
  {
    "path": "lib/rules/jsx-indent-props.js",
    "chars": 6579,
    "preview": "/**\n * @fileoverview Validate props indentation in JSX\n * @author Yannick Croissant\n\n * This rule has been ported and mo"
  },
  {
    "path": "lib/rules/jsx-indent.js",
    "chars": 14681,
    "preview": "/**\n * @fileoverview Validate JSX indentation\n * @author Yannick Croissant\n\n * This rule has been ported and modified fr"
  },
  {
    "path": "lib/rules/jsx-key.js",
    "chars": 10624,
    "preview": "/**\n * @fileoverview Report missing `key` props in iterators/collection literals.\n * @author Ben Mosher\n */\n\n'use strict"
  },
  {
    "path": "lib/rules/jsx-max-depth.js",
    "chars": 4133,
    "preview": "/**\n * @fileoverview Validate JSX maximum depth\n * @author Chris<wfsr@foxmail.com>\n */\n\n'use strict';\n\nconst has = requi"
  },
  {
    "path": "lib/rules/jsx-max-props-per-line.js",
    "chars": 4162,
    "preview": "/**\n * @fileoverview Limit maximum of props on a single line in JSX\n * @author Yannick Croissant\n */\n\n'use strict';\n\ncon"
  },
  {
    "path": "lib/rules/jsx-newline.js",
    "chars": 5044,
    "preview": "/**\n * @fileoverview Require or prevent a new line after jsx elements and expressions.\n * @author Johnny Zabala\n * @auth"
  },
  {
    "path": "lib/rules/jsx-no-bind.js",
    "chars": 6172,
    "preview": "/**\n * @fileoverview Prevents usage of Function.prototype.bind and arrow functions\n *               in React component p"
  },
  {
    "path": "lib/rules/jsx-no-comment-textnodes.js",
    "chars": 1847,
    "preview": "/**\n * @fileoverview Comments inside children section of tag should be placed inside braces.\n * @author Ben Vinegar\n */\n"
  },
  {
    "path": "lib/rules/jsx-no-constructed-context-values.js",
    "chars": 8778,
    "preview": "/**\n * @fileoverview Prevents jsx context provider values from taking values that\n *               will cause needless r"
  },
  {
    "path": "lib/rules/jsx-no-duplicate-props.js",
    "chars": 1695,
    "preview": "/**\n * @fileoverview Enforce no duplicate props\n * @author Markus Ånöstam\n */\n\n'use strict';\n\nconst has = require('hasow"
  },
  {
    "path": "lib/rules/jsx-no-leaked-render.js",
    "chars": 8192,
    "preview": "/**\n * @fileoverview Prevent problematic leaked values from being rendered\n * @author Mario Beltrán\n */\n\n'use strict';\n\n"
  },
  {
    "path": "lib/rules/jsx-no-literals.js",
    "chars": 18353,
    "preview": "/**\n * @fileoverview Prevent using string literals in React component definition\n * @author Caleb Morris\n * @author Davi"
  },
  {
    "path": "lib/rules/jsx-no-script-url.js",
    "chars": 4156,
    "preview": "/**\n * @fileoverview Prevent usage of `javascript:` URLs\n * @author Sergei Startsev\n */\n\n'use strict';\n\nconst includes ="
  },
  {
    "path": "lib/rules/jsx-no-target-blank.js",
    "chars": 11018,
    "preview": "/**\n * @fileoverview Forbid target='_blank' attribute\n * @author Kevin Miller\n */\n\n'use strict';\n\nconst includes = requi"
  },
  {
    "path": "lib/rules/jsx-no-undef.js",
    "chars": 3157,
    "preview": "/**\n * @fileoverview Disallow undeclared variables in JSX\n * @author Yannick Croissant\n */\n\n'use strict';\n\nconst docsUrl"
  },
  {
    "path": "lib/rules/jsx-no-useless-fragment.js",
    "chars": 7016,
    "preview": "/**\n * @fileoverview Disallow useless fragments\n */\n\n'use strict';\n\nconst arrayIncludes = require('array-includes');\n\nco"
  },
  {
    "path": "lib/rules/jsx-one-expression-per-line.js",
    "chars": 7949,
    "preview": "/**\n * @fileoverview Limit to one expression per line in JSX\n * @author Mark Ivan Allen <Vydia.com>\n */\n\n'use strict';\n\n"
  },
  {
    "path": "lib/rules/jsx-pascal-case.js",
    "chars": 4594,
    "preview": "/**\n * @fileoverview Enforce PascalCase for user-defined JSX components\n * @author Jake Marsh\n */\n\n'use strict';\n\nconst "
  },
  {
    "path": "lib/rules/jsx-props-no-multi-spaces.js",
    "chars": 4561,
    "preview": "/**\n * @fileoverview Disallow multiple spaces between inline JSX props\n * @author Adrian Moennich\n */\n\n'use strict';\n\nco"
  },
  {
    "path": "lib/rules/jsx-props-no-spread-multi.js",
    "chars": 1527,
    "preview": "/**\n * @fileoverview Prevent JSX prop spreading the same expression multiple times\n * @author Simon Schick\n */\n\n'use str"
  },
  {
    "path": "lib/rules/jsx-props-no-spreading.js",
    "chars": 4174,
    "preview": "/**\n * @fileoverview Prevent JSX prop spreading\n * @author Ashish Gambhir\n */\n\n'use strict';\n\nconst docsUrl = require('."
  },
  {
    "path": "lib/rules/jsx-sort-default-props.js",
    "chars": 5635,
    "preview": "/**\n * @fileoverview Enforce default props alphabetical sorting\n * @author Vladimir Kattsov\n * @deprecated\n */\n\n'use str"
  },
  {
    "path": "lib/rules/jsx-sort-props.js",
    "chars": 20780,
    "preview": "/**\n * @fileoverview Enforce props alphabetical sorting\n * @author Ilya Volodin, Yannick Croissant\n */\n\n'use strict';\n\nc"
  },
  {
    "path": "lib/rules/jsx-space-before-closing.js",
    "chars": 3049,
    "preview": "/**\n * @fileoverview Validate spacing before closing bracket in JSX.\n * @author ryym\n * @deprecated\n */\n\n'use strict';\n\n"
  },
  {
    "path": "lib/rules/jsx-tag-spacing.js",
    "chars": 10677,
    "preview": "/**\n * @fileoverview Validates whitespace in and around the JSX opening and closing brackets\n * @author Diogo Franco (Ko"
  },
  {
    "path": "lib/rules/jsx-uses-react.js",
    "chars": 1572,
    "preview": "/**\n * @fileoverview Prevent React to be marked as unused\n * @author Glen Mailer\n */\n\n'use strict';\n\nconst pragmaUtil = "
  },
  {
    "path": "lib/rules/jsx-uses-vars.js",
    "chars": 1655,
    "preview": "/**\n * @fileoverview Prevent variables used in JSX to be marked as unused\n * @author Yannick Croissant\n */\n\n'use strict'"
  },
  {
    "path": "lib/rules/jsx-wrap-multilines.js",
    "chars": 8442,
    "preview": "/**\n * @fileoverview Prevent missing parentheses around multilines JSX\n * @author Yannick Croissant\n */\n\n'use strict';\n\n"
  },
  {
    "path": "lib/rules/no-access-state-in-setstate.js",
    "chars": 6789,
    "preview": "/**\n * @fileoverview Prevent usage of this.state within setState\n * @author Rolf Erik Lekang, Jørgen Aaberg\n */\n\n'use st"
  },
  {
    "path": "lib/rules/no-adjacent-inline-elements.js",
    "chars": 3139,
    "preview": "/**\n * @fileoverview Prevent adjacent inline elements not separated by whitespace.\n * @author Sean Hayes\n */\n\n'use stric"
  },
  {
    "path": "lib/rules/no-array-index-key.js",
    "chars": 7509,
    "preview": "/**\n * @fileoverview Prevent usage of Array index in keys\n * @author Joe Lencioni\n */\n\n'use strict';\n\nconst has = requir"
  },
  {
    "path": "lib/rules/no-arrow-function-lifecycle.js",
    "chars": 5163,
    "preview": "/**\n * @fileoverview Lifecycle methods should be methods on the prototype, not class fields\n * @author Tan Nguyen\n */\n\n'"
  },
  {
    "path": "lib/rules/no-children-prop.js",
    "chars": 3968,
    "preview": "/**\n * @fileoverview Prevent passing of children as props\n * @author Benjamin Stepp\n */\n\n'use strict';\n\nconst docsUrl = "
  },
  {
    "path": "lib/rules/no-danger-with-children.js",
    "chars": 5187,
    "preview": "/**\n * @fileoverview Report when a DOM element is using both children and dangerouslySetInnerHTML\n * @author David Peter"
  },
  {
    "path": "lib/rules/no-danger.js",
    "chars": 2695,
    "preview": "/**\n * @fileoverview Prevent usage of dangerous JSX props\n * @author Scott Andrews\n */\n\n'use strict';\n\nconst has = requi"
  },
  {
    "path": "lib/rules/no-deprecated.js",
    "chars": 9961,
    "preview": "/**\n * @fileoverview Prevent usage of deprecated methods\n * @author Yannick Croissant\n * @author Scott Feeney\n * @author"
  },
  {
    "path": "lib/rules/no-did-mount-set-state.js",
    "chars": 308,
    "preview": "/**\n * @fileoverview Prevent usage of setState in componentDidMount\n * @author Yannick Croissant\n */\n\n'use strict';\n\ncon"
  },
  {
    "path": "lib/rules/no-did-update-set-state.js",
    "chars": 310,
    "preview": "/**\n * @fileoverview Prevent usage of setState in componentDidUpdate\n * @author Yannick Croissant\n */\n\n'use strict';\n\nco"
  },
  {
    "path": "lib/rules/no-direct-mutation-state.js",
    "chars": 4591,
    "preview": "/**\n * @fileoverview Prevent direct mutation of this.state\n * @author David Petersen\n * @author Nicolas Fernandez <@bura"
  }
]

// ... and 225 more files (download for full content)

About this extraction

This page contains the full source code of the jsx-eslint/eslint-plugin-react GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 425 files (3.4 MB), approximately 906.5k tokens, and a symbol index with 850 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!