ec0lint-plugin-react
Version:
React specific linting rules for ec0lint
837 lines (700 loc) • 214 kB
Markdown
# 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
* [`jsx-newline`]: add `allowMultiline` option when prevent option is true ([#3311][] @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)
### 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)
[#3339]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3339
[#3335]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3335
[#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
[#3321]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3321
[#3320]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3320
[#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
## [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-spa