Skip to content

Commit bbe82da

Browse files
committed
Fix autofix to use canonical order (noopener noreferrer)
Match ember-template-lint behavior: strip existing noopener/noreferrer tokens and re-add in canonical order, instead of appending missing ones.
1 parent f8bf7cd commit bbe82da

2 files changed

Lines changed: 9 additions & 11 deletions

File tree

lib/rules/template-link-rel-noopener.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,14 @@ module.exports = {
4242
messageId: 'missingRel',
4343
fix(fixer) {
4444
if (relAttr && relAttr.value?.type === 'GlimmerTextNode') {
45-
// rel attribute exists with a text value — append missing values
46-
const oldValue = relAttr.value.chars;
47-
const parts = oldValue.trim().split(/\s+/).filter(Boolean);
48-
if (!hasNoopener) {
49-
parts.push('noopener');
50-
}
51-
if (!hasNoreferrer) {
52-
parts.push('noreferrer');
53-
}
54-
const newValue = parts.join(' ');
45+
// Strip existing noopener/noreferrer tokens, then re-add in canonical order
46+
// (matches ember-template-lint behavior)
47+
const oldValue = relAttr.value.chars.trim().replace(/\s+/g, ' ');
48+
const filtered = oldValue
49+
.split(' ')
50+
.filter((t) => t !== 'noopener' && t !== 'noreferrer')
51+
.join(' ');
52+
const newValue = `${filtered} noopener noreferrer`.trim();
5553
return fixer.replaceTextRange(
5654
[relAttr.value.range[0], relAttr.value.range[1]],
5755
`"${newValue}"`

tests/lib/rules/template-link-rel-noopener.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ ruleTester.run('template-link-rel-noopener', rule, {
3131
// rel="noreferrer" only — missing noopener
3232
{
3333
code: '<template><a href="/" target="_blank" rel="noreferrer">Link</a></template>',
34-
output: '<template><a href="/" target="_blank" rel="noreferrer noopener">Link</a></template>',
34+
output: '<template><a href="/" target="_blank" rel="noopener noreferrer">Link</a></template>',
3535
errors: [{ messageId: 'missingRel' }],
3636
},
3737
// rel="nofollow" — present but wrong values

0 commit comments

Comments
 (0)