Skip to content

Commit

Permalink
fix(no-deprecated-slot-attribute): handle v-for with dynamic slot (#2529
Browse files Browse the repository at this point in the history
)
  • Loading branch information
privatenumber authored Sep 2, 2024
1 parent ddc0525 commit b08273c
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 5 deletions.
19 changes: 14 additions & 5 deletions lib/rules/syntaxes/slot-attribute.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,8 @@ module.exports = {
// parse error or empty expression
return false
}
const slotName = sourceCode.getText(slotAttr.value.expression).trim()
// If non-Latin characters are included it can not be converted.
// It does not check the space only because `a>b?c:d` should be rejected.
return !/[^a-z]/i.test(slotName)

return slotAttr.value.expression.type === 'Identifier'
}

/**
Expand Down Expand Up @@ -102,7 +100,18 @@ module.exports = {
yield fixer.remove(scopeAttr)
}

yield fixer.insertTextBefore(element, `<template ${replaceText}>\n`)
const vFor = startTag.attributes.find(
(attr) => attr.directive && attr.key.name.name === 'for'
)
const vForText = vFor ? `${sourceCode.getText(vFor)} ` : ''
if (vFor) {
yield fixer.remove(vFor)
}

yield fixer.insertTextBefore(
element,
`<template ${vForText}${replaceText}>\n`
)
yield fixer.insertTextAfter(element, `\n</template>`)
}
}
Expand Down
25 changes: 25 additions & 0 deletions tests/lib/rules/no-deprecated-slot-attribute.js
Original file line number Diff line number Diff line change
Expand Up @@ -643,6 +643,31 @@ tester.run('no-deprecated-slot-attribute', rule, {
}
],
errors: ['`slot` attributes are deprecated.']
},
{
code: `
<template>
<my-component>
<slot
v-for="slot in Object.keys($slots)"
:slot="slot"
:name="slot"
></slot>
</my-component>
</template>`,
output: `
<template>
<my-component>
<template v-for="slot in Object.keys($slots)" v-slot:[slot]>
<slot
:name="slot"
></slot>
</template>
</my-component>
</template>`,
errors: ['`slot` attributes are deprecated.']
}
]
})

0 comments on commit b08273c

Please sign in to comment.