Skip to content

Commit

Permalink
better fixer for literals and more performat
Browse files Browse the repository at this point in the history
  • Loading branch information
Nokel81 committed Dec 23, 2020
1 parent dae46b3 commit de33e0b
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 11 deletions.
13 changes: 8 additions & 5 deletions lib/rules/jsx-no-target-blank.js
Expand Up @@ -127,18 +127,21 @@ module.exports = {
}

if (relAttribute.value.expression.type === 'Literal') {
const valueType = typeof relAttribute.value.expression.value;
if (
['boolean', 'number', 'symbol', 'bigint', 'undefined'].includes(valueType)
typeof relAttribute.value.expression.value === 'undefined'
|| typeof relAttribute.value.expression.value === 'boolean'
|| typeof relAttribute.value.expression.value === 'number'
|| typeof relAttribute.value.expression.value === 'symbol'
|| typeof relAttribute.value.expression.value === 'bigint'
|| relAttribute.value.expression.value === null
) {
return fixer.replaceText(relAttribute.value.expression, '"noreferrer"');
return fixer.replaceText(relAttribute.value.expression.parent, '"noreferrer"');
}

if (valueType === 'string') {
if (typeof relAttribute.value.expression.value === 'string') {
const parts = relAttribute.value.expression.value
.split('noreferrer')
.filter((part) => part);
.filter(Boolean);
return fixer.replaceText(relAttribute.value.expression, `"${parts.join(' ')} noreferrer"`);
}
}
Expand Down
12 changes: 6 additions & 6 deletions tests/lib/rules/jsx-no-target-blank.js
Expand Up @@ -104,15 +104,15 @@ ruleTester.run('jsx-no-target-blank', rule, {
errors: defaultErrors
}, {
code: '<a target="_blank" rel={0} href="http://example.com"></a>',
output: '<a target="_blank" rel={"noreferrer"} href="http://example.com"></a>',
output: '<a target="_blank" rel="noreferrer" href="http://example.com"></a>',
errors: defaultErrors
}, {
code: '<a target="_blank" rel={false} href="http://example.com"></a>',
output: '<a target="_blank" rel={"noreferrer"} href="http://example.com"></a>',
output: '<a target="_blank" rel="noreferrer" href="http://example.com"></a>',
errors: defaultErrors
}, {
code: '<a target="_blank" rel={null} href="http://example.com"></a>',
output: '<a target="_blank" rel={"noreferrer"} href="http://example.com"></a>',
output: '<a target="_blank" rel="noreferrer" href="http://example.com"></a>',
errors: defaultErrors
}, {
code: '<a target="_blank" rel="noopenernoreferrer" href="http://example.com"></a>',
Expand All @@ -132,15 +132,15 @@ ruleTester.run('jsx-no-target-blank', rule, {
errors: defaultErrors
}, {
code: '<a target="_blank" href="//example.com" rel={true}></a>',
output: '<a target="_blank" href="//example.com" rel={"noreferrer"}></a>',
output: '<a target="_blank" href="//example.com" rel="noreferrer"></a>',
errors: defaultErrors
}, {
code: '<a target="_blank" href="//example.com" rel={3}></a>',
output: '<a target="_blank" href="//example.com" rel={"noreferrer"}></a>',
output: '<a target="_blank" href="//example.com" rel="noreferrer"></a>',
errors: defaultErrors
}, {
code: '<a target="_blank" href="//example.com" rel={null}></a>',
output: '<a target="_blank" href="//example.com" rel={"noreferrer"}></a>',
output: '<a target="_blank" href="//example.com" rel="noreferrer"></a>',
errors: defaultErrors
}, {
code: '<a target="_blank" href="//example.com" rel={getRel()}></a>',
Expand Down

0 comments on commit de33e0b

Please sign in to comment.