Skip to content

Commit

Permalink
[Fix] checked-requires-onchange-or-readonly: correct options that w…
Browse files Browse the repository at this point in the history
…ere behaving opposite
  • Loading branch information
jaesoekjjang authored and ljharb committed Mar 15, 2024
1 parent 69de42e commit e4ecbcf
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 10 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange
* [`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)

[#3715]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3715
[#3713]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3713
[#3707]: https://github.com/jsx-eslint/eslint-plugin-react/issues/3707
[#3705]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3705
Expand Down
8 changes: 4 additions & 4 deletions lib/rules/checked-requires-onchange-or-readonly.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ const messages = {
const targetPropSet = new Set(['checked', 'onChange', 'readOnly', 'defaultChecked']);

const defaultOptions = {
ignoreMissingProperties: true,
ignoreExclusiveCheckedAttribute: true,
ignoreMissingProperties: false,
ignoreExclusiveCheckedAttribute: false,
};

/**
Expand Down Expand Up @@ -93,12 +93,12 @@ module.exports = {
return;
}

if (options.ignoreExclusiveCheckedAttribute && propSet.has('defaultChecked')) {
if (!options.ignoreExclusiveCheckedAttribute && propSet.has('defaultChecked')) {
reportExclusiveCheckedAttribute(node);
}

if (
options.ignoreMissingProperties
!options.ignoreMissingProperties
&& !(propSet.has('onChange') || propSet.has('readOnly'))
) {
reportMissingProperty(node);
Expand Down
24 changes: 18 additions & 6 deletions tests/lib/rules/checked-requires-onchange-or-readonly.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,23 @@ ruleTester.run('checked-requires-onchange-or-readonly', rule, {
"React.createElement('input', { checked: foo, onChange: noop, readOnly: true })",
{
code: '<input type="checkbox" checked />',
options: [{ ignoreMissingProperties: false }],
options: [{ ignoreMissingProperties: true }],
},
{
code: '<input type="checkbox" checked={true} />',
options: [{ ignoreMissingProperties: false }],
options: [{ ignoreMissingProperties: true }],
},
{
code: '<input type="checkbox" onChange={noop} checked defaultChecked />',
options: [{ ignoreExclusiveCheckedAttribute: false }],
options: [{ ignoreExclusiveCheckedAttribute: true }],
},
{
code: '<input type="checkbox" onChange={noop} checked={true} defaultChecked />',
options: [{ ignoreExclusiveCheckedAttribute: false }],
options: [{ ignoreExclusiveCheckedAttribute: true }],
},
{
code: '<input type="checkbox" onChange={noop} checked defaultChecked />',
options: [{ ignoreMissingProperties: true, ignoreExclusiveCheckedAttribute: true }],
},
'<span/>',
"React.createElement('span')",
Expand Down Expand Up @@ -99,13 +103,21 @@ ruleTester.run('checked-requires-onchange-or-readonly', rule, {
},
{
code: '<input type="checkbox" checked defaultChecked />',
options: [{ ignoreMissingProperties: false }],
options: [{ ignoreMissingProperties: true }],
errors: [{ messageId: 'exclusiveCheckedAttribute' }],
},
{
code: '<input type="checkbox" checked defaultChecked />',
options: [{ ignoreExclusiveCheckedAttribute: false }],
options: [{ ignoreExclusiveCheckedAttribute: true }],
errors: [{ messageId: 'missingProperty' }],
},
{
code: '<input type="checkbox" checked defaultChecked />',
options: [{ ignoreMissingProperties: false, ignoreExclusiveCheckedAttribute: false }],
errors: [
{ messageId: 'exclusiveCheckedAttribute' },
{ messageId: 'missingProperty' },
],
},
]),
});

0 comments on commit e4ecbcf

Please sign in to comment.