UNPKG

ec0lint-plugin-react

Version:

React specific linting rules for ec0lint

837 lines (700 loc) 214 kB
# 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