From e6d3850341e8b7cfbfa7ada343169ef33f9d67aa Mon Sep 17 00:00:00 2001 From: Alexander Pepper Date: Wed, 5 Jan 2022 14:13:11 +0100 Subject: [PATCH] [New] `jsx-no-target-blank`: Improve fixer with option `allowReferrer` --- CHANGELOG.md | 2 ++ lib/rules/jsx-no-target-blank.js | 5 +++-- tests/lib/rules/jsx-no-target-blank.js | 8 +++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06199c2b15..3ae1b1dc9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange ### 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) ### Fixed * [`prop-types`], `propTypes`: add support for exported type inference ([#3163][] @vedadeepta) @@ -17,6 +18,7 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange * [Docs] HTTP => HTTPS ([#3133][] @Schweinepriester) [#3174]: https://github.com/yannickcr/eslint-plugin-react/pull/3174 +[#3167]: https://github.com/yannickcr/eslint-plugin-react/pull/3167 [#3163]: https://github.com/yannickcr/eslint-plugin-react/pull/3163 [#3160]: https://github.com/yannickcr/eslint-plugin-react/pull/3160 [#3133]: https://github.com/yannickcr/eslint-plugin-react/pull/3133 diff --git a/lib/rules/jsx-no-target-blank.js b/lib/rules/jsx-no-target-blank.js index dbece120c5..1f6edc9e07 100644 --- a/lib/rules/jsx-no-target-blank.js +++ b/lib/rules/jsx-no-target-blank.js @@ -175,6 +175,7 @@ module.exports = { || (enforceDynamicLinks === 'always' && hasDynamicLink(node, linkAttribute)); if (hasDangerousLink && !hasSecureRel(node, allowReferrer, warnOnSpreadAttributes, spreadAttributeIndex)) { const messageId = allowReferrer ? 'noTargetBlankWithoutNoopener' : 'noTargetBlankWithoutNoreferrer'; + const relValue = allowReferrer ? 'noopener' : 'noreferrer'; report(context, messages[messageId], messageId, { node, fix(fixer) { @@ -188,11 +189,11 @@ module.exports = { } if (!relAttribute) { - return fixer.insertTextAfter(nodeWithAttrs.attributes.slice(-1)[0], ' rel="noreferrer"'); + return fixer.insertTextAfter(nodeWithAttrs.attributes.slice(-1)[0], ` rel="${relValue}"`); } if (!relAttribute.value) { - return fixer.insertTextAfter(relAttribute, '="noreferrer"'); + return fixer.insertTextAfter(relAttribute, `="${relValue}"`); } if (relAttribute.value.type === 'Literal') { diff --git a/tests/lib/rules/jsx-no-target-blank.js b/tests/lib/rules/jsx-no-target-blank.js index c0ad1518d7..27a63cb09d 100644 --- a/tests/lib/rules/jsx-no-target-blank.js +++ b/tests/lib/rules/jsx-no-target-blank.js @@ -247,9 +247,15 @@ ruleTester.run('jsx-no-target-blank', rule, { output: '', errors: defaultErrors, }, + { + code: '', + output: '', + options: [{ allowReferrer: true }], + errors: [{ messageId: 'noTargetBlankWithoutNoopener' }], + }, { code: '', - output: '', + output: '', options: [{ allowReferrer: true }], errors: [{ messageId: 'noTargetBlankWithoutNoopener' }], },