From e4ecbcfc8f83099a9bd5da18f45b5a6e66ebfb4a Mon Sep 17 00:00:00 2001 From: jaesoekjjang Date: Fri, 15 Mar 2024 23:51:51 +0900 Subject: [PATCH] [Fix] `checked-requires-onchange-or-readonly`: correct options that were behaving opposite --- CHANGELOG.md | 2 ++ .../checked-requires-onchange-or-readonly.js | 8 +++---- .../checked-requires-onchange-or-readonly.js | 24 ++++++++++++++----- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a0d7424f6..394add2dee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/lib/rules/checked-requires-onchange-or-readonly.js b/lib/rules/checked-requires-onchange-or-readonly.js index 4c1cc15dd1..420611fee5 100644 --- a/lib/rules/checked-requires-onchange-or-readonly.js +++ b/lib/rules/checked-requires-onchange-or-readonly.js @@ -19,8 +19,8 @@ const messages = { const targetPropSet = new Set(['checked', 'onChange', 'readOnly', 'defaultChecked']); const defaultOptions = { - ignoreMissingProperties: true, - ignoreExclusiveCheckedAttribute: true, + ignoreMissingProperties: false, + ignoreExclusiveCheckedAttribute: false, }; /** @@ -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); diff --git a/tests/lib/rules/checked-requires-onchange-or-readonly.js b/tests/lib/rules/checked-requires-onchange-or-readonly.js index 7f9a14cac4..93e08ef60e 100644 --- a/tests/lib/rules/checked-requires-onchange-or-readonly.js +++ b/tests/lib/rules/checked-requires-onchange-or-readonly.js @@ -40,19 +40,23 @@ ruleTester.run('checked-requires-onchange-or-readonly', rule, { "React.createElement('input', { checked: foo, onChange: noop, readOnly: true })", { code: '', - options: [{ ignoreMissingProperties: false }], + options: [{ ignoreMissingProperties: true }], }, { code: '', - options: [{ ignoreMissingProperties: false }], + options: [{ ignoreMissingProperties: true }], }, { code: '', - options: [{ ignoreExclusiveCheckedAttribute: false }], + options: [{ ignoreExclusiveCheckedAttribute: true }], }, { code: '', - options: [{ ignoreExclusiveCheckedAttribute: false }], + options: [{ ignoreExclusiveCheckedAttribute: true }], + }, + { + code: '', + options: [{ ignoreMissingProperties: true, ignoreExclusiveCheckedAttribute: true }], }, '', "React.createElement('span')", @@ -99,13 +103,21 @@ ruleTester.run('checked-requires-onchange-or-readonly', rule, { }, { code: '', - options: [{ ignoreMissingProperties: false }], + options: [{ ignoreMissingProperties: true }], errors: [{ messageId: 'exclusiveCheckedAttribute' }], }, { code: '', - options: [{ ignoreExclusiveCheckedAttribute: false }], + options: [{ ignoreExclusiveCheckedAttribute: true }], errors: [{ messageId: 'missingProperty' }], }, + { + code: '', + options: [{ ignoreMissingProperties: false, ignoreExclusiveCheckedAttribute: false }], + errors: [ + { messageId: 'exclusiveCheckedAttribute' }, + { messageId: 'missingProperty' }, + ], + }, ]), });