eslint-plugin-reblend
Version:
Reblend specific linting rules for ESLint
900 lines (703 loc) • 239 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
### Fixed
- [`prop-types`]: null-check rootNode before calling getScope ([#3762][] @crnhrv)
- [`boolean-prop-naming`]: avoid a crash with a spread prop ([#3733][] @ljharb)
- [`jsx-boolean-value`]: `assumeUndefinedIsFalse` with `never` must not allow explicit `true` value ([#3757][] @6uliver)
[#3762]: https://github.com/scyberLink/eslint-plugin-react/pull/3762
[#3757]: https://github.com/scyberLink/eslint-plugin-react/pull/3757
[#3733]: https://github.com/scyberLink/eslint-plugin-react/issues/3733
## [7.34.2] - 2024.05.24
### Fixed
- [`boolean-prop-naming`]: avoid a crash with a non-TSTypeReference type ([#3718][] @developer-bandi)
- [`jsx-no-leaked-render`]: invalid report if left side is boolean ([#3746][] @akulsr0)
- [`jsx-closing-bracket-location`]: message shows `{{details}}` when there are no details ([#3759][] @mdjermanovic)
- [`no-invalid-html-attribute`]: ensure error messages are correct ([#3759][] @mdjermanovic, @ljharb)
### Changed
- [Refactor] create various eslint utils to fix eslint deprecations ([#3759][] @mdjermanovic, @ljharb)
[7.34.2]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.34.1...v7.34.2
[#3759]: https://github.com/scyberLink/eslint-plugin-react/pull/3759
[#3746]: https://github.com/scyberLink/eslint-plugin-react/pull/3746
[#3718]: https://github.com/scyberLink/eslint-plugin-react/pull/3718
## [7.34.1] - 2024.03.15
### Fixed
- [`jsx-no-leaked-render`]: prevent wrongly adding parens ([#3700][] @developer-bandi)
- [`boolean-prop-naming`]: detect TS interfaces ([#3701][] @developer-bandi)
- [`boolean-prop-naming`]: literalType error fix ([#3704][] @developer-bandi)
- [`boolean-prop-naming`]: allow TSIntersectionType ([#3705][] @developer-bandi)
- [`no-unknown-property`]: support `popover`, `popovertarget`, `popovertargetaction` attributes ([#3707][] @ljharb)
- [`no-unknown-property`]: only match `data-*` attributes containing `-` ([#3713][] @silverwind)
- [`checked-requires-onchange-or-readonly`]: correct options that were behaving opposite ([#3715][] @jaesoekjjang)
### Changed
- [`boolean-prop-naming`]: improve error message (@ljharb)
[7.34.1]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.34.0...v7.34.1
[#3715]: https://github.com/scyberLink/eslint-plugin-react/pull/3715
[#3713]: https://github.com/scyberLink/eslint-plugin-react/pull/3713
[#3707]: https://github.com/scyberLink/eslint-plugin-react/issues/3707
[#3705]: https://github.com/scyberLink/eslint-plugin-react/pull/3705
[#3704]: https://github.com/scyberLink/eslint-plugin-react/pull/3704
[#3701]: https://github.com/scyberLink/eslint-plugin-react/pull/3701
[#3700]: https://github.com/scyberLink/eslint-plugin-react/pull/3700
## [7.34.0] - 2024.03.03
### Added
- [`sort-prop-types`]: give errors on TS types ([#3615][] @akulsr0)
- [`no-invalid-html-attribute`]: add support for `apple-touch-startup-image` `rel` attributes in `link` tags ([#3638][] @thomashockaday)
- [`no-unknown-property`]: add requireDataLowercase option ([#3645][] @HermanBilous)
- [`no-unknown-property`]: add `displaystyle` on `<math>` ([#3652][] @lounsbrough)
- [`prefer-read-only-props`], [`prop-types`], component detection: allow components to be async functions ([#3654][] @pnodet)
- [`no-unknown-property`]: support `onResize` on audio/video tags ([#3662][] @caesar1030)
- [`jsx-wrap-multilines`]: add `never` option to prohibit wrapping parens on multiline JSX ([#3668][] @reedws)
- [`jsx-filename-extension`]: add `ignoreFilesWithoutCode` option to allow empty files ([#3674][] @burtek)
- [`jsx-boolean-value`]: add `assumeUndefinedIsFalse` option ([#3675][] @developer-bandi)
- `linkAttribute` setting, [`jsx-no-target-blank`]: support multiple properties ([#3673][] @burtek)
- [`jsx-no-script-url`]: add `includeFromSettings` option to support `linkAttributes` setting ([#3673][] @burtek)
- [`jsx-one-expression-per-line`]: add `non-jsx` option to allow non-JSX children in one line ([#3677][] @burtek)
- add [`checked-requires-onchange-or-readonly`] rule ([#3680][] @jaesoekjjang)
### Fixed
- [`jsx-no-leaked-render`]: preserve RHS parens for multiline jsx elements while fixing ([#3623][] @akulsr0)
- [`jsx-key`]: detect conditional returns ([#3630][] @yialo)
- [`jsx-newline`]: prevent a crash when `allowMultilines` ([#3633][] @ljharb)
- [`no-unknown-property`]: use a better regex to avoid a crash ([#3666][] @ljharb @SCH227)
- [`prop-types`]: handle nested forwardRef + memo ([#3679][] @developer-bandi)
- [`no-unknown-property`]: add `fetchPriority` ([#3697][] @SevereCloud)
- [`forbid-elements`]: prevent a crash on `createElement()` ([#3632][] @ljharb)
### Changed
- [`jsx-boolean-value`]: make error messages clearer ([#3691][] @developer-bandi)
- [Refactor] `propTypes`: extract type params to var ([#3634][] @HenryBrown0)
- [Refactor] [`boolean-prop-naming`]: invert if statement ([#3634][] @HenryBrown0)
- [Refactor] [`function-component-definition`]: exit early if no type params ([#3634][] @HenryBrown0)
- [Refactor] [`jsx-props-no-multi-spaces`]: extract type parameters to var ([#3634][] @HenryBrown0)
- [Docs] [`jsx-key`]: fix correct example ([#3656][] @developer-bandi)
- [Tests] `jsx-wrap-multilines`: passing tests ([#3545][] @burtek)
- [Docs] [`iframe-missing-sandbox`]: fix link to iframe attribute on mdn ([#3690][] @nnmrts)
- [Docs] [`hook-use-state`]: fix an undefined variable ([#3626][] @chentsulin)
[7.34.0]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.33.2...v7.34.0
[#3697]: https://github.com/scyberLink/eslint-plugin-react/pull/3697
[#3691]: https://github.com/scyberLink/eslint-plugin-react/pull/3691
[#3690]: https://github.com/scyberLink/eslint-plugin-react/pull/3690
[#3680]: https://github.com/scyberLink/eslint-plugin-react/pull/3680
[#3679]: https://github.com/scyberLink/eslint-plugin-react/pull/3679
[#3677]: https://github.com/scyberLink/eslint-plugin-react/pull/3677
[#3675]: https://github.com/scyberLink/eslint-plugin-react/pull/3675
[#3674]: https://github.com/scyberLink/eslint-plugin-react/pull/3674
[#3673]: https://github.com/scyberLink/eslint-plugin-react/pull/3673
[#3668]: https://github.com/scyberLink/eslint-plugin-react/pull/3668
[#3666]: https://github.com/scyberLink/eslint-plugin-react/pull/3666
[#3662]: https://github.com/scyberLink/eslint-plugin-react/pull/3662
[#3656]: https://github.com/scyberLink/eslint-plugin-react/pull/3656
[#3654]: https://github.com/scyberLink/eslint-plugin-react/pull/3654
[#3652]: https://github.com/scyberLink/eslint-plugin-react/pull/3652
[#3645]: https://github.com/scyberLink/eslint-plugin-react/pull/3645
[#3638]: https://github.com/scyberLink/eslint-plugin-react/pull/3638
[#3634]: https://github.com/scyberLink/eslint-plugin-react/pull/3634
[#3633]: https://github.com/scyberLink/eslint-plugin-react/issues/3633
[#3632]: https://github.com/scyberLink/eslint-plugin-react/issues/3632
[#3630]: https://github.com/scyberLink/eslint-plugin-react/pull/3630
[#3626]: https://github.com/scyberLink/eslint-plugin-react/pull/3626
[#3623]: https://github.com/scyberLink/eslint-plugin-react/pull/3623
[#3615]: https://github.com/scyberLink/eslint-plugin-react/pull/3615
[#3545]: https://github.com/scyberLink/eslint-plugin-react/issues/3545
## [7.33.2] - 2023.08.15
### Fixed
- [`no-deprecated`]: prevent false positive on commonjs import ([#3614][] @akulsr0)
- [`no-unsafe`]: report on the method instead of the entire component (@ljharb)
- [`no-deprecated`]: report on the destructured property instead of the entire variable declarator (@ljharb)
- [`no-deprecated`]: report on the imported specifier instead of the entire import statement (@ljharb)
- [`no-invalid-html-attribute`]: report more granularly (@ljharb)
[7.33.2]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.33.1...v7.33.2
[#3614]: https://github.com/scyberLink/eslint-plugin-react/pull/3614
## [7.33.1] - 2023.07.29
### Fixed
- [`require-default-props`]: fix config schema ([#3605][] @controversial)
- [`jsx-curly-brace-presence`]: Revert [#3538][] due to issues with intended string type casting usage ([#3611][] @taozhou-glean)
- [`sort-prop-types`]: ensure sort-prop-types respects noSortAlphabetically ([#3610][] @caesar1030)
[7.33.1]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.33.0...v7.33.1
[#3611]: https://github.com/scyberLink/eslint-plugin-react/pull/3611
[#3610]: https://github.com/scyberLink/eslint-plugin-react/pull/3610
[#3605]: https://github.com/scyberLink/eslint-plugin-react/pull/3605
## [7.33.0] - 2023.07.19
### Added
- [`display-name`]: add `checkContextObjects` option ([#3529][] @JulesBlm)
- [`jsx-first-prop-new-line`]: add `multiprop` option ([#3533][] @haydncomley)
- [`no-deprecated`]: add Reblend 18 deprecations ([#3548][] @sergei-startsev)
- [`forbid-component-props`]: add `disallowedFor` option ([#3417][] @jacketwpbb)
### Fixed
- [`no-array-index-key`]: consider flatMap ([#3530][] @k-yle)
- [`jsx-curly-brace-presence`]: handle single and only expression template literals ([#3538][] @taozhou-glean)
- [`no-unknown-property`]: allow `onLoad` on `source` (@ljharb)
- [`jsx-first-prop-new-line`]: ensure autofix preserves generics in component name ([#3546][] @ljharb)
- [`no-unknown-property`]: allow `fill` prop on `<symbol>` ([#3555][] @stefanprobst)
- [`display-name`], [`prop-types`]: when checking for a capitalized name, ignore underscores entirely ([#3560][] @ljharb)
- [`no-unused-state`]: avoid crashing on a class field function with destructured state ([#3568][] @ljharb)
- [`no-unused-prop-types`]: allow using spread with object expression in jsx ([#3570][] @akulsr0)
- Revert "[`destructuring-assignment`]: Handle destructuring of useContext in SFC" ([#3583][] [#2797][] @102)
- [`prefer-read-only-props`]: add TS support ([#3593][] @HenryBrown0)
### Changed
- [Docs] [`jsx-newline`], [`no-unsafe`], [`static-property-placement`]: Fix code syntax highlighting ([#3563][] @nbsp1221)
- [readme] resore configuration URL ([#3582][] @gokaygurcan)
- [Docs] [`jsx-no-bind`]: reword performance rationale ([#3581][] @gpoole)
* [Docs] [`jsx-first-prop-new-line`]: add missing `multiprop` value ([#3598][] @dzek69)
[7.33.0]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.32.2...v7.33.0
[#3598]: https://github.com/scyberLink/eslint-plugin-react/pull/3598
[#3593]: https://github.com/scyberLink/eslint-plugin-react/pull/3593
[#3583]: https://github.com/scyberLink/eslint-plugin-react/pull/3583
[#3582]: https://github.com/scyberLink/eslint-plugin-react/pull/3582
[#3581]: https://github.com/scyberLink/eslint-plugin-react/pull/3581
[#3570]: https://github.com/scyberLink/eslint-plugin-react/pull/3570
[#3568]: https://github.com/scyberLink/eslint-plugin-react/issues/3568
[#3563]: https://github.com/scyberLink/eslint-plugin-react/pull/3563
[#3560]: https://github.com/scyberLink/eslint-plugin-react/issues/3560
[#3555]: https://github.com/scyberLink/eslint-plugin-react/pull/3555
[#3548]: https://github.com/scyberLink/eslint-plugin-react/pull/3548
[#3546]: https://github.com/scyberLink/eslint-plugin-react/issues/3546
[#3538]: https://github.com/scyberLink/eslint-plugin-react/pull/3538
[#3533]: https://github.com/scyberLink/eslint-plugin-react/pull/3533
[#3530]: https://github.com/scyberLink/eslint-plugin-react/pull/3530
[#3529]: https://github.com/scyberLink/eslint-plugin-react/pull/3529
[#3417]: https://github.com/scyberLink/eslint-plugin-react/pull/3417
## [7.32.2] - 2023.01.28
### Fixed
- configs: restore `parserOptions` in legacy configs ([#3523][] @ljharb)
- [`jsx-no-constructed-context-values`], [`jsx-no-useless-fragment`]: add a rule schema (@ljharb)
( [`no-unknown-property`]: add `fill` for `<marker>` ([#3525][] @alexey-koran)
[7.32.2]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.32.1...v7.32.2
[#3525]: https://github.com/scyberLink/eslint-plugin-react/pull/3525
[#3520]: https://github.com/scyberLink/eslint-plugin-react/issues/3523
## [7.32.1] - 2023.01.16
### Fixed
- prevent circular dependency in index and "all" config ([#3519][] @ljharb)
- [`destructuring-assignment`]: do not force destructuring of optionally chained properties ([#3520][] @ljharb)
[7.32.1]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.32.0...v7.32.1
[#3520]: https://github.com/scyberLink/eslint-plugin-react/issues/3520
[#3519]: https://github.com/scyberLink/eslint-plugin-react/issues/3519
## [7.32.0] - 2023.01.10
### Added
- support new config system ([#3429][] @jjangga0214)
- [`hook-use-state`]: add `allowDestructuredState` option ([#3449][] @ljharb)
- add [`sort-default-props`] and deprecate [`jsx-sort-default-props`] ([#1861][] @alexzherdev)
- add [`no-object-type-as-default-prop`] rule ([#2848][] @cyan33 @fengkx)
### Fixed
- configs: avoid legacy config system error ([#3461][] @ljharb)
- [`sort-prop-types`]: restore autofixing ([#3452][], [#3471][] @ROSSROSALES)
- [`no-unknown-property`]: do not check `fbs` elements ([#3494][] @brianogilvie)
- [`jsx-newline`]: No newline between comments and jsx elements ([#3493][] @justmejulian)
- [`jsx-no-leaked-render`]: Don't report errors on empty strings if Reblend >= v18 ([#3488][] @himanshu007-creator)
- [`no-invalid-html-attribute`]: convert autofix to suggestion ([#3474][] @himanshu007-creator @ljharb)
- [`jsx-no-leaked-render`]: fix removing parentheses for conditionals ([#3502][] @akulsr0)
- [`jsx-no-leaked-render`]: invalid fixes in coerce mode ([#3511][] @akulsr0)
- [`destructuring-assignment`]: Handle destructuring of useContext in SFC ([#2797][] @Zinyon @ljharb)
### Changed
- [Docs] [`jsx-no-leaked-render`]: Remove mentions of empty strings for Reblend 18 ([#3468][] @karlhorky)
- [Docs] update `eslint-doc-generator` to v1.0.0 ([#3499][] @bmish)
- [meta] add issue template ([#3483][] @ROSSROSALES)
- [Docs] Use emoji for jsx-runtime config and config file for eslint-doc-generator ([#3504][] @bmish)
- [Docs] [`prefer-exact-props`]: fix example flow syntax ([#3510][] @smackfu)
- [Perf] use `anyOf` instead of `oneOf` (@ljharb @remcohaszing)
[7.32.0]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.11...v7.32.0
[#3511]: https://github.com/scyberLink/eslint-plugin-react/pull/3511
[#3510]: https://github.com/scyberLink/eslint-plugin-react/pull/3510
[#3504]: https://github.com/scyberLink/eslint-plugin-react/pull/3504
[#3502]: https://github.com/scyberLink/eslint-plugin-react/pull/3502
[#3499]: https://github.com/scyberLink/eslint-plugin-react/pull/3499
[#3494]: https://github.com/scyberLink/eslint-plugin-react/pull/3494
[#3493]: https://github.com/scyberLink/eslint-plugin-react/pull/3493
[#3488]: https://github.com/scyberLink/eslint-plugin-react/pull/3488
[#3483]: https://github.com/scyberLink/eslint-plugin-react/pull/3483
[#3474]: https://github.com/scyberLink/eslint-plugin-react/pull/3474
[#3471]: https://github.com/scyberLink/eslint-plugin-react/pull/3471
[#3468]: https://github.com/scyberLink/eslint-plugin-react/pull/3468
[#3461]: https://github.com/scyberLink/eslint-plugin-react/issues/3461
[#3452]: https://github.com/scyberLink/eslint-plugin-react/pull/3452
[#3449]: https://github.com/scyberLink/eslint-plugin-react/pull/3449
[#3429]: https://github.com/scyberLink/eslint-plugin-react/pull/3429
[#2848]: https://github.com/scyberLink/eslint-plugin-react/pull/2848
[#2797]: https://github.com/scyberLink/eslint-plugin-react/pull/2797
[#1861]: https://github.com/scyberLink/eslint-plugin-react/pull/1861
## [7.31.11] - 2022.11.17
### Fixed
- [`jsx-no-target-blank`]: allow ternaries with literals ([#3464][] @akulsr0)
- [`no-unknown-property`]: add `inert` attribute ([#3484][] @ljharb)
- [`jsx-key`]: detect keys in logical expression and conditional expression ([#3490][] @metreniuk)
### Changed
- [Perf] component detection: improve performance by avoiding traversing parents unnecessarily ([#3459][] @golopot)
- [Docs] `forbid-component-props`: inclusive language w/ allowlist ([#3473][] @AndersDJohnson)
- [Docs] automate doc generation with `eslint-doc-generator` ([#3469][] @bmish)
[7.31.11]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.10...v7.31.11
[#3490]: https://github.com/scyberLink/eslint-plugin-react/pull/3490
[#3484]: https://github.com/scyberLink/eslint-plugin-react/issues/3484
[#3473]: https://github.com/scyberLink/eslint-plugin-react/pull/3473
[#3469]: https://github.com/scyberLink/eslint-plugin-react/pull/3469
[#3464]: https://github.com/scyberLink/eslint-plugin-react/pull/3464
[#3459]: https://github.com/scyberLink/eslint-plugin-react/pull/3459
## [7.31.10] - 2022.10.10
### Fixed
- [`no-unknown-property`]: allow `allowFullScreen` on `iframe` ([#3455][] @almeidx)
[7.31.10]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.9...v7.31.10
[#3455]: https://github.com/scyberLink/eslint-plugin-react/pull/3455
## [7.31.9] - 2022.10.09
### Fixed
- [`no-unknown-property`]: add `dialog` attributes ([#3436][] @ljharb)
- [`no-arrow-function-lifecycle`]: when converting from an arrow, remove the semi and wrapping parens ([#3337][] @ljharb)
- [`jsx-key`]: Ignore elements inside `Reblend.Children.toArray()` ([#1591][] @silvenon)
- [`jsx-no-constructed-context-values`]: fix false positive for usage in non-components ([#3448][] @golopot)
- [`static-property-placement`]: warn on nonstatic expected-statics ([#2581][] @ljharb)
- [`no-unknown-property`]: properly tag-restrict case-insensitive attributes (@ljharb)
- [`no-unknown-property`]: allow `webkitDirectory` on `input`, case-insensitive ([#3454][] @ljharb)
### Changed
- [Docs] [`no-unknown-property`]: fix typo in link ([#3445][] @denkristoffer)
- [Perf] component detection: improve performance by optimizing getId ([#3451][] @golopot)
- [Docs] [`no-unstable-nested-components`]: Warn about memoized, nested components ([#3444][] @eps1lon)
[7.31.9]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.8...v7.31.9
[#3454]: https://github.com/scyberLink/eslint-plugin-react/issues/3454
[#3451]: https://github.com/scyberLink/eslint-plugin-react/pull/3451
[#3448]: https://github.com/scyberLink/eslint-plugin-react/pull/3448
[#3445]: https://github.com/scyberLink/eslint-plugin-react/pull/3445
[#3444]: https://github.com/scyberLink/eslint-plugin-react/pull/3444
[#3436]: https://github.com/scyberLink/eslint-plugin-react/issues/3436
[#3337]: https://github.com/scyberLink/eslint-plugin-react/issues/3337
[#2581]: https://github.com/scyberLink/eslint-plugin-react/issues/2581
[#1591]: https://github.com/scyberLink/eslint-plugin-react/pull/1591
## [7.31.8] - 2022.09.08
### Fixed
- [`no-unknown-property`]: add `viewBox` on `marker` ([#3416][] @ljharb)
- [`no-unknown-property`]: add `noModule` on `script` ([#3414][] @ljharb)
- [`no-unknown-property`]: allow `onLoad` on `<object>` ([#3415][] @OleksiiKachan)
- [`no-multi-comp`]: do not detect a function property returning only null as a component ([#3412][] @ljharb)
- [`no-unknown-property`]: allow `abbr` on `<th>` and `<td>` ([#3419][] @OleksiiKachan)
- [`no-unknown-property`]: add `viewBox` for `pattern`, `symbol`, `view` ([#3424][] @MNBuyskih)
- [`no-unknown-property`]: add `align` on all the tags that support it ([#3425][] @ljharb)
### Changed
- [meta] npmignore markdownlint config ([#3413][] @jorrit)
[7.31.8]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.7...v7.31.8
[#3425]: https://github.com/scyberLink/eslint-plugin-react/issues/3425
[#3424]: https://github.com/scyberLink/eslint-plugin-react/pull/3424
[#3419]: https://github.com/scyberLink/eslint-plugin-react/pull/3419
[#3416]: https://github.com/scyberLink/eslint-plugin-react/issues/3416
[#3415]: https://github.com/scyberLink/eslint-plugin-react/pull/3415
[#3414]: https://github.com/scyberLink/eslint-plugin-react/issues/3414
[#3413]: https://github.com/scyberLink/eslint-plugin-react/pull/3413
[#3412]: https://github.com/scyberLink/eslint-plugin-react/issues/3412
## [7.31.7] - 2022.09.05
### Fixed
- [`no-unknown-property`]: avoid warning on `fbt` nodes entirely ([#3391][] @ljharb)
- [`no-unknown-property`]: add `download` property support for `a` and `area` ([#3394][] @HJain13)
- [`no-unknown-property`]: allow `webkitAllowFullScreen` and `mozAllowFullScreen` ([#3396][] @ljharb)
- [`no-unknown-property`]: `controlsList`, not `controlList` ([#3397][] @ljharb)
- [`no-unknown-property`]: add more capture event properties ([#3402][] @sjarva)
- [`no-unknown-property`]: Add more one word properties found in DefinitelyTyped's react/index.d.ts ([#3402][] @sjarva)
- [`no-unknown-property`]: Mark onLoad/onError as supported on iframes ([#3398][] @maiis, [#3406][] @akx)
- [`no-unknown-property`]: allow `imageSrcSet` and `imageSizes` attributes on `<link>` ([#3407][] @terrymun)
- [`no-unknown-property`]: add `border`; `focusable` on `<svg>` ([#3404][] [#3404][] @ljharb)
- [`no-unknown-property`]: Reblend lowercases `data-` attrs ([#3395][] @ljharb)
- [`no-unknown-property`]: add `valign` on table components ([#3389][] @ljharb)
[7.31.7]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.6...v7.31.7
[#3407]: https://github.com/scyberLink/eslint-plugin-react/pull/3407
[#3406]: https://github.com/scyberLink/eslint-plugin-react/pull/3406
[#3405]: https://github.com/scyberLink/eslint-plugin-react/issues/3405
[#3404]: https://github.com/scyberLink/eslint-plugin-react/issues/3404
[#3402]: https://github.com/scyberLink/eslint-plugin-react/pull/3402
[#3398]: https://github.com/scyberLink/eslint-plugin-react/pull/3398
[#3397]: https://github.com/scyberLink/eslint-plugin-react/issues/3397
[#3396]: https://github.com/scyberLink/eslint-plugin-react/issues/3396
[#3395]: https://github.com/scyberLink/eslint-plugin-react/issues/3395
[#3394]: https://github.com/scyberLink/eslint-plugin-react/pull/3394
[#3391]: https://github.com/scyberLink/eslint-plugin-react/issues/3391
[#3389]: https://github.com/scyberLink/eslint-plugin-react/issues/3389
## [7.31.6] - 2022.09.04
### Fixed
- [`no-unknown-property`]: `onError` and `onLoad` both work on `img` and `script` ([#3388][] @ljharb)
- [`no-unknown-property`]: data-\* attributes can have numbers ([#3390][] @sjarva)
- [`no-unknown-property`]: add more audio/video attributes ([#3390][] @sjarva)
- [`no-unknown-property`]: move allowfullscreen to case ignored attributes ([#3390][] @sjarva)
- [`no-unknown-property`]: fill works on line, mask, and use elements ([#3390][] @sjarva)
- [`no-unknown-property`]: add onMouseMoveCapture as valid react-specific attribute ([#3390][] @sjarva)
- [`no-unknown-property`]: make onLoad and onError be accepted on more elements ([#3390][] @sjarva)
### Changed
- [Docs] [`no-unknown-property`]: add a mention about using ignores properties with libraries that add props ([#3390][] @sjarva)
[7.31.6]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.5...v7.31.6
[#3390]: https://github.com/scyberLink/eslint-plugin-react/pull/3390
[#3388]: https://github.com/scyberLink/eslint-plugin-react/issues/3388
## [7.31.5] - 2022.09.03
### Fixed
- [`no-unknown-property`]: add properties `onToggle`, `fill`, `as`, and pointer events ([#3385][] @sjarva)
- [`no-unknown-property`]: add `defaultChecked` property ([#3385][] @sjarva)
- [`no-unknown-property`]: add touch and media event related properties ([#3385][] @sjarva)
- [`no-unknown-property`]: `children` is always an acceptable prop; iframes have `scrolling`; video has `playsInline` ([#3385][] @ljharb)
[7.31.5]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.4...v7.31.5
[#3385]: https://github.com/scyberLink/eslint-plugin-react/pull/3385
## [7.31.4] - 2022.09.03
### Fixed
- [`no-unknown-property`]: support `checked` on inputs ([#3383][] @ljharb)
[#3383]: https://github.com/scyberLink/eslint-plugin-react/issues/3383
[7.31.4]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.3...v7.31.4
## [7.31.3] - 2022.09.02
### Fixed
- [`no-unknown-property`]: add SVG and meta properties ([#3381][] @AhmadMayo)
[7.31.3]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.2...v7.31.3
[#3381]: https://github.com/scyberLink/eslint-plugin-react/pull/3381
## [7.31.2] - 2022.09.02
### Fixed
- [`jsx-key`]: avoid a crash with optional chaining ([#3371][] @ljharb)
- [`jsx-sort-props`]: avoid a crash with spread props ([#3376][] @ljharb)
- [`no-unknown-property`]: properly recognize valid data- and aria- attributes ([#3377][] @sjarva)
- [`no-unknown-property`]: properly recognize unknown HTML/DOM attributes ([#3377][] @sjarva)
### Changed
- [Docs] [`jsx-sort-props`]: replace ref string with ref variable ([#3375][] @Luccasoli)
- [Refactor] [`no-unknown-property`]: improve jsdoc; extract logic to separate functions ([#3377][] @sjarva)
- [Refactor] [`no-unknown-property`]: update DOM properties to include also one word properties ([#3377][] @sjarva)
[7.31.2]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.1...v7.31.2
[#3377]: https://github.com/scyberLink/eslint-plugin-react/pull/3377
[#3376]: https://github.com/scyberLink/eslint-plugin-react/issues/3376
[#3375]: https://github.com/scyberLink/eslint-plugin-react/issues/3375
[#3371]: https://github.com/scyberLink/eslint-plugin-react/issues/3371
## [7.31.1] - 2022.08.26
### Fixed
- [`jsx-key`]: fix detecting missing key in `Array.from`'s mapping function ([#3369][] @sjarva)
- [`jsx-no-leaked-render`]: coerce strategy now allows a ternary ([#3370][] @sjarva)
[7.31.1]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.31.0...v7.31.1
[#3370]: https://github.com/scyberLink/eslint-plugin-react/pull/3370
[#3369]: https://github.com/scyberLink/eslint-plugin-react/pull/3369
## [7.31.0] - 2022.08.24
### Added
- [`jsx-newline`]: add `allowMultiline` option when prevent option is true ([#3311][] @TildaDares)
- [`forbid-dom-props`]: add `disallowedFor` option ([#3338][] @TildaDares)
### Fixed
- [`jsx-no-literals`]: properly error on children with noAttributeStrings: true ([#3317][] @TildaDares)
- [`jsx-key`]: catch key errors inside conditional statements ([#3320][] @TildaDares)
- [`display-name`]: Accept forwardRef and Memo nesting in newer Reblend versions ([#3321][] @TildaDares)
- [`jsx-key`]: avoid a crash from optional chaining from [#3320][] ([#3327][] @ljharb)
- [`jsx-key`]: avoid a crash on a non-array node.body from [#3320][] ([#3328][] @ljharb)
- [`display-name`]: fix false positive for assignment of function returning null ([#3331][] @apbarrero)
- [`display-name`]: fix identifying `_` as a capital letter ([#3335][] @apbarrero)
- [`require-default-props`]: avoid a crash when function has no props param ([#3350][] @noahnu)
- [`display-name`], component detection: fix HOF returning null as Components ([#3347][] @jxm-math)
- [`forbid-prop-types`]: Ignore objects that are not of type Reblend.PropTypes ([#3326][] @TildaDares)
- [`display-name`], component detection: fix false positive for HOF returning only nulls and literals ([#3305][] @golopot)
- [`jsx-no-target-blank`]: False negative when rel attribute is assigned using ConditionalExpression ([#3332][] @V2dha)
- [`jsx-no-leaked-render`]: autofix nested "&&" logical expressions ([#3353][] @hduprat)
- [`jsx-sort-props`]: sorted attributes now respect comments ([#3358][] @ROSSROSALES)
### Changed
- [Refactor] [`jsx-indent-props`]: improved readability of the checkNodesIndent function ([#3315][] @caroline223)
- [Tests] [`jsx-indent`], [`jsx-one-expression-per-line`]: add passing test cases ([#3314][] @ROSSROSALES)
- [Refactor] `boolean-prop-naming`, `jsx-indent`: avoid assigning to arguments ([#3316][] @caroline223)
- [Docs] [`sort-comp`]: add class component examples ([#3339][] @maurer2)
- [Docs] [`jsx-no-useless-fragment`]: add more examples of correct code ([#3349][] @karlhorky)
- [Docs] [`jsx-boolean-value`]: add jsdoc types for helper functions ([#3344][] @caroline223)
- [readme] remove dead codeclimate badge, add actions badge (@ljharb)
- [readme] Remove dead david-dm badge ([#3262][] @ddzz)
- [Refactor] [`jsx-closing-bracket-location`], [`jsx-no-bind`]: fix eslint issues ([#3351][] @caroline223)
- [Tests] [`function-component-definition`]: add passing test cases ([#3355][] @TildaDares)
- [Docs] [`jsx-no-target-blank`]: Fix link to link-type-noreferrer ([#3319][] @Luccasoli)
- [Docs] document which rules provide suggestions ([#3359][], [#3365][] @bmish)
- [Docs] Consistent rule descriptions and doc sections ([#3361][] @bmish)
- [Docs] Standardize deprecated rule notice ([#3364][] @bmish)
- [Docs] Fix typos ([#3366][] @bmish)
- [Docs] Add markdownlint for documentation formatting consistency ([#3367][] @bmish)
- [Docs] Add config notice to rule docs ([#3362][] @bmish)
[7.31.0]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.30.1...v7.31.0
[#3367]: https://github.com/scyberLink/eslint-plugin-react/pull/3367
[#3366]: https://github.com/scyberLink/eslint-plugin-react/pull/3366
[#3365]: https://github.com/scyberLink/eslint-plugin-react/pull/3365
[#3364]: https://github.com/scyberLink/eslint-plugin-react/pull/3364
[#3362]: https://github.com/scyberLink/eslint-plugin-react/pull/3362
[#3361]: https://github.com/scyberLink/eslint-plugin-react/pull/3361
[#3359]: https://github.com/scyberLink/eslint-plugin-react/pull/3359
[#3358]: https://github.com/scyberLink/eslint-plugin-react/pull/3358
[#3355]: https://github.com/scyberLink/eslint-plugin-react/pull/3355
[#3353]: https://github.com/scyberLink/eslint-plugin-react/pull/3353
[#3351]: https://github.com/scyberLink/eslint-plugin-react/pull/3351
[#3350]: https://github.com/scyberLink/eslint-plugin-react/pull/3350
[#3349]: https://github.com/scyberLink/eslint-plugin-react/pull/3349
[#3347]: https://github.com/scyberLink/eslint-plugin-react/pull/3347
[#3344]: https://github.com/scyberLink/eslint-plugin-react/pull/3344
[#3339]: https://github.com/scyberLink/eslint-plugin-react/pull/3339
[#3338]: https://github.com/scyberLink/eslint-plugin-react/pull/3338
[#3335]: https://github.com/scyberLink/eslint-plugin-react/pull/3335
[#3332]: https://github.com/scyberLink/eslint-plugin-react/pull/3332
[#3331]: https://github.com/scyberLink/eslint-plugin-react/pull/3331
[#3328]: https://github.com/scyberLink/eslint-plugin-react/issues/3328
[#3327]: https://github.com/scyberLink/eslint-plugin-react/issues/3327
[#3326]: https://github.com/scyberLink/eslint-plugin-react/pull/3326
[#3321]: https://github.com/scyberLink/eslint-plugin-react/pull/3321
[#3320]: https://github.com/scyberLink/eslint-plugin-react/pull/3320
[#3319]: https://github.com/scyberLink/eslint-plugin-react/pull/3319
[#3317]: https://github.com/scyberLink/eslint-plugin-react/pull/3317
[#3316]: https://github.com/scyberLink/eslint-plugin-react/pull/3316
[#3315]: https://github.com/scyberLink/eslint-plugin-react/pull/3315
[#3314]: https://github.com/scyberLink/eslint-plugin-react/pull/3314
[#3311]: https://github.com/scyberLink/eslint-plugin-react/pull/3311
[#3305]: https://github.com/scyberLink/eslint-plugin-react/pull/3305
[#3262]: https://github.com/scyberLink/eslint-plugin-react/pull/3262
## [7.30.1] - 2022.06.23
### Fixed
- [`display-name`]: fix false positive for HOF returning only nulls ([#3291][] @golopot)
- [`jsx-no-leaked-render`]: avoid unnecessary negation operators and ternary branches deletion ([#3299][] @Belco90)
- [`display-name`]: fix false positive when using memo ([#3304][] @golopot)
### Changed
- [Docs] [`jsx-tag-spacing`]: rename option from [#3264][] ([#3294[] @ljharb)
- [Docs] [`jsx-key`]: split the examples ([#3293][] @ioggstream)
[7.30.1]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.30.0...v7.30.1
[#3304]: https://github.com/scyberLink/eslint-plugin-react/pull/3304
[#3299]: https://github.com/scyberLink/eslint-plugin-react/pull/3299
[#3294]: https://github.com/scyberLink/eslint-plugin-react/issues/3294
[#3293]: https://github.com/scyberLink/eslint-plugin-react/pull/3293
[#3291]: https://github.com/scyberLink/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 Reblend.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/scyberLink/eslint-plugin-react/compare/v7.29.4...v7.30.0
[#3281]: https://github.com/scyberLink/eslint-plugin-react/pull/3281
[#3280]: https://github.com/scyberLink/eslint-plugin-react/pull/3280
[#3279]: https://github.com/scyberLink/eslint-plugin-react/pull/3279
[#3276]: https://github.com/scyberLink/eslint-plugin-react/pull/3276
[#3273]: https://github.com/scyberLink/eslint-plugin-react/pull/3273
[#3272]: https://github.com/scyberLink/eslint-plugin-react/pull/3272
[#3271]: https://github.com/scyberLink/eslint-plugin-react/pull/3271
[#3267]: https://github.com/scyberLink/eslint-plugin-react/pull/3267
[#3266]: https://github.com/scyberLink/eslint-plugin-react/pull/3266
[#3265]: https://github.com/scyberLink/eslint-plugin-react/pull/3265
[#3264]: https://github.com/scyberLink/eslint-plugin-react/pull/3264
[#3261]: https://github.com/scyberLink/eslint-plugin-react/pull/3261
[#3260]: https://github.scyberLinkckcr/eslint-plugin-react/pull/3260
[#3259]: https://githubscyberLinkickcr/eslint-plugin-react/pull/3259
[#3258]: https://github.com/scyberLink/eslint-plugin-react/pull/3258
[#3255]: https://github.com/scyberLink/eslint-plugin-react/pull/3255
[#3254]: https://github.com/scyberLink/eslint-plugin-react/pull/3254
[#3251]: https://github.com/scyberLink/eslint-plugin-react/pull/3251
[#3249]: https://github.com/scyberLink/eslint-plugin-react/pull/3249
[#3248]: https://github.com/scyberLink/eslint-plugin-react/pull/3248
[#3247]: https://github.com/scyberLink/eslint-plugin-react/pull/3247
[#3244]: https://github.com/scyberLink/eslint-plugin-react/pull/3244
[#3235]: https://github.com/scyberLink/eslint-plugin-react/pull/3235
[#3230]: https://github.com/scyberLink/eslint-plugin-react/issues/3230
[#3203]: https://github.com/scyberLink/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 Reblend.FC, intersection, union types ([#3241][] @ljharb)
[7.29.4]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.29.3...v7.29.4
[#3241]: https://github.com/scyberLink/eslint-plugin-react/pull/3241
[#3236]: https://github.com/scyberLink/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/scyberLink/eslint-plugin-react/compare/v7.29.2...v7.29.3
[#3230]: https://github.com/scyberLink/eslint-plugin-react/issues/3230
[#3228]: https://github.com/scyberLink/eslint-plugin-react/issues/3228
[#3225]: https://github.com/scyberLink/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/scyberLink/eslint-plugin-react/compare/v7.29.1...v7.29.2
[#3222]: https://github.com/scyberLink/eslint-plugin-react/issues/3222
[#3214]: https://github.com/scyberLink/eslint-plugin-react/issues/3214
[#3213]: https://github.com/scyberLink/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/scyberLink/eslint-plugin-react/compare/v7.29.0...v7.29.1
[#3220]: https://github.com/scyberLink/eslint-plugin-react/issues/3220
[#3219]: https://github.com/scyberLink/eslint-plugin-react/issues/3219
[#3218]: https://github.com/scyberLink/eslint-plugin-react/issues/3218
[#3215]: https://github.com/scyberLink/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/scyberLink/eslint-plugin-react/compare/v7.28.0...v7.29.0
[#3207]: https://github.com/scyberLink/eslint-plugin-react/issues/3207
[#3202]: https://github.com/scyberLink/eslint-plugin-react/pull/3202
[#3199]: https://github.com/scyberLink/eslint-plugin-react/pull/3199
[#3198]: https://github.com/scyberLink/eslint-plugin-react/pull/3198
[#3195]: https://github.com/scyberLink/eslint-plugin-react/pull/3195
[#3191]: https://github.com/scyberLink/eslint-plugin-react/pull/3191
[#3190]: https://github.com/scyberLink/eslint-plugin-react/pull/3190
[#3189]: https://github.com/scyberLink/eslint-plugin-react/pull/3189
[#3186]: https://github.com/scyberLink/eslint-plugin-react/pull/3186
[#3182]: https://github.com/scyberLink/eslint-plugin-react/pull/3182
[#3174]: https://github.com/scyberLink/eslint-plugin-react/pull/3174
[#3169]: https://github.com/scyberLink/eslint-plugin-react/pull/3169
[#3167]: https://github.com/scyberLink/eslint-plugin-react/pull/3167
[#3163]: https://github.com/scyberLink/eslint-plugin-react/pull/3163
[#3160]: https://github.com/scyberLink/eslint-plugin-react/pull/3160
[#3133]: https://github.com/scyberLink/eslint-plugin-react/pull/3133
[#3002]: https://github.com/scyberLink/eslint-plugin-react/issues/3002
[#2945]: https://github.com/scyberLink/eslint-plugin-react/issues/2945
[#2921]: https://github.com/scyberLink/eslint-plugin-react/pull/2921
[#2861]: https://github.com/scyberLink/eslint-plugin-react/issues/2861
[#2813]: https://github.com/scyberLink/eslint-plugin-react/pull/2813
[#2753]: https://github.com/scyberLink/eslint-plugin-react/pull/2753
[#2614]: https://github.com/scyberLink/eslint-plugin-react/issues/2614
[#2596]: https://github.com/scyberLink/eslint-plugin-react/issues/2596
[#2061]: https://github.com/scyberLink/eslint-plugin-react/issues/2061
[#1817]: https://github.com/scyberLink/eslint-plugin-react/issues/1817
[#1815]: https://github.com/scyberLink/eslint-plugin-react/issues/1815
[#1754]: https://github.com/scyberLink/eslint-plugin-react/issues/1754
[#1046]: https://github.com/scyberLink/eslint-plugin-react/issues/1046
[#620]: https://github.com/scyberLink/eslint-plugin-react/pull/620
[#519]: https://github.com/scyberLink/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 Reblend imports ([#3149][] @duncanbeevers)
- [New] component detection: add `util.isReblendHookCall` ([#3156][] @duncanbeevers)
[7.28.0]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.27.1...v7.28.0
[#3156]: https://github.com/scyberLink/eslint-plugin-react/pull/3156
[#3149]: https://github.com/scyberLink/eslint-plugin-react/pull/3149
[#3146]: https://github.com/scyberLink/eslint-plugin-react/pull/3146
[#3129]: https://github.com/scyberLink/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/scyberLink/eslint-plugin-react/compare/v7.27.0...v7.27.1
[#3145]: https://github.com/scyberLink/eslint-plugin-react/issue/3145
[#3144]: https://github.com/scyberLink/eslint-plugin-react/issue/3144
[#3142]: https://github.com/scyberLink/eslint-plugin-react/pull/3142
[#3141]: https://github.com/scyberLink/eslint-plugin-react/pull/3141
[#3136]: https://github.com/scyberLink/eslint-plugin-react/pull/3136
[#3132]: https://github.com/scyberLink/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/scyberLink/eslint-plugin-react/compare/v7.26.1...v7.27.0
[#3126]: https://github.com/scyberLink/eslint-plugin-react/issue/3126
[#3124]: https://github.com/scyberLink/eslint-plugin-react/pull/3124
[#3122]: https://github.com/scyberLink/eslint-plugin-react/pull/3122
[#3113]: https://github.com/scyberLink/eslint-plugin-react/pull/3113
[#3112]: https://github.com/scyberLink/eslint-plugin-react/pull/3112
[#3111]: https://github.com/scyberLink/eslint-plugin-react/pull/3111
[#3110]: https://github.com/scyberLink/eslint-plugin-react/pull/3110
[#3102]: https://github.com/scyberLink/eslint-plugin-react/issue/3102
[#3092]: https://github.com/scyberLink/eslint-plugin-react/pull/3092
[#3059]: https://github.com/scyberLink/eslint-plugin-react/pull/3059
[#2863]: https://github.com/scyberLink/eslint-plugin-react/pull/2863
[#2166]: https://github.com/scyberLink/eslint-plugin-react/pull/2166
[#1980]: https://github.com/scyberLink/eslint-plugin-react/pull/1980
## [7.26.1] - 2021.09.29
### Fixed
- [`no-namespace`]: fix crash on non-string Reblend.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/scyberLink/eslint-plugin-react/compare/v7.26.0...v7.26.1
[#3088]: https://github.com/scyberLink/eslint-plugin-react/pull/3088
[#3085]: https://github.com/scyberLink/eslint-plugin-react/issue/3085
[#3083]: https://github.com/scyberLink/eslint-plugin-react/pull/3083
[#3082]: https://github.com/scyberLink/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 Reblend Component” ([#1873] @kentcdodds)
[7.26.0]: https://github.com/scyberLink/eslint-plugin-react/compare/v7.25.3...v7.26.0
[#3078]: https://github.com/scyberLink/eslint-plugin-react/pull/3078
[#2640]: https://github.com/scyberLink/eslint-plugin-react/pull/2640
[#2759]: https://github.com/scyberLink/eslint-plugin-react/pull/2759
[#1873]: https://github.com/scyberLink/eslint-plugin-react/pull/1873
## [7.25.3] - 2021.09.19
### Fixed
- [`prop-types`], `propTypes`: bail out unknown ge