Skip to content

Commit

Permalink
Added support for defineOptions to `vue/no-reserved-component-names…
Browse files Browse the repository at this point in the history
…` rule (#2158)
  • Loading branch information
ota-meshi committed May 12, 2023
1 parent a9bd24c commit 68300e9
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 3 deletions.
14 changes: 12 additions & 2 deletions lib/rules/no-reserved-component-names.js
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,7 @@ module.exports = {
})
}

return Object.assign(
{},
return utils.compositingVisitors(
utils.executeOnCallVueComponent(context, (node) => {
if (node.arguments.length === 2) {
const argument = node.arguments[0]
Expand All @@ -171,6 +170,17 @@ module.exports = {
if (!node) return
if (!canVerify(node.value)) return
reportIfInvalid(node.value)
}),
utils.defineScriptSetupVisitor(context, {
onDefineOptionsEnter(node) {
if (node.arguments.length === 0) return
const define = node.arguments[0]
if (define.type !== 'ObjectExpression') return
const nameNode = utils.findProperty(define, 'name')
if (!nameNode) return
if (!canVerify(nameNode.value)) return
reportIfInvalid(nameNode.value)
}
})
)
}
Expand Down
35 changes: 34 additions & 1 deletion tests/lib/rules/no-reserved-component-names.js
Original file line number Diff line number Diff line change
Expand Up @@ -555,7 +555,25 @@ ruleTester.run('no-reserved-component-names', rule, {
`,
parserOptions,
options: [{ disallowVueBuiltInComponents: true }]
}))
})),
{
filename: 'test.vue',
code: `<script setup> defineOptions({}) </script>`,
parser: require.resolve('vue-eslint-parser'),
parserOptions
},
{
filename: 'test.vue',
code: `<script setup> defineOptions({ ...name }) </script>`,
parser: require.resolve('vue-eslint-parser'),
parserOptions
},
{
filename: 'test.vue',
code: `<script setup> defineOptions({ name: 'Foo' }) </script>`,
parser: require.resolve('vue-eslint-parser'),
parserOptions
}
],

invalid: [
Expand Down Expand Up @@ -657,6 +675,21 @@ ruleTester.run('no-reserved-component-names', rule, {
}
]
})),
...invalidElements.map((name) => ({
filename: `${name}.vue`,
code: `<script setup> defineOptions({name: '${name}'}) </script>`,
parser: require.resolve('vue-eslint-parser'),
parserOptions,
errors: [
{
messageId: RESERVED_NAMES_IN_HTML.has(name)
? 'reservedInHtml'
: 'reserved',
data: { name },
line: 1
}
]
})),
...vue2BuiltInComponents.map((name) => ({
filename: `${name}.vue`,
code: `
Expand Down

0 comments on commit 68300e9

Please sign in to comment.