diff --git a/lib/rules/jsx-no-target-blank.js b/lib/rules/jsx-no-target-blank.js index 51df0ece1a..41b3de4ef9 100644 --- a/lib/rules/jsx-no-target-blank.js +++ b/lib/rules/jsx-no-target-blank.js @@ -43,8 +43,17 @@ function hasDynamicLink(element, linkAttribute) { function hasSecureRel(element, allowReferrer) { return element.attributes.find((attr) => { if (attr.type === 'JSXAttribute' && attr.name.name === 'rel') { - const tags = attr.value && attr.value.type === 'Literal' && attr.value.value.toLowerCase().split(' '); - return tags && (tags.indexOf('noopener') >= 0 && (allowReferrer || tags.indexOf('noreferrer') >= 0)); + const value = attr.value && + (( + attr.value.type === 'Literal' && + attr.value.value + ) || ( + attr.value.type === 'JSXExpressionContainer' && + attr.value.expression && + attr.value.expression.value + )); + const tags = value && value.toLowerCase && value.toLowerCase().split(' '); + return tags && tags.indexOf('noopener') >= 0 && (allowReferrer || tags.indexOf('noreferrer') >= 0); } return false; }); diff --git a/tests/lib/rules/jsx-no-target-blank.js b/tests/lib/rules/jsx-no-target-blank.js index aefd526cfc..cd5b7df311 100644 --- a/tests/lib/rules/jsx-no-target-blank.js +++ b/tests/lib/rules/jsx-no-target-blank.js @@ -36,6 +36,10 @@ ruleTester.run('jsx-no-target-blank', rule, { {code: ''}, {code: ''}, {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, + {code: ''}, {code: ''}, {code: 's'}, {code: ''}, @@ -43,10 +47,12 @@ ruleTester.run('jsx-no-target-blank', rule, { {code: ''}, {code: ''}, {code: ''}, + {code: ''}, {code: ''}, {code: ''}, {code: ''}, {code: ''}, + {code: ''}, { code: '', options: [{enforceDynamicLinks: 'never'}] @@ -98,6 +104,12 @@ ruleTester.run('jsx-no-target-blank', rule, { }, { code: '', errors: defaultErrors + }, { + code: '', + errors: defaultErrors + }, { + code: '', + errors: defaultErrors }, { code: '', errors: defaultErrors