Skip to content

Commit 68300e9

Browse files
authored
Added support for defineOptions to vue/no-reserved-component-names rule (#2158)
1 parent a9bd24c commit 68300e9

File tree

2 files changed

+46
-3
lines changed

2 files changed

+46
-3
lines changed

Diff for: lib/rules/no-reserved-component-names.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,7 @@ module.exports = {
147147
})
148148
}
149149

150-
return Object.assign(
151-
{},
150+
return utils.compositingVisitors(
152151
utils.executeOnCallVueComponent(context, (node) => {
153152
if (node.arguments.length === 2) {
154153
const argument = node.arguments[0]
@@ -171,6 +170,17 @@ module.exports = {
171170
if (!node) return
172171
if (!canVerify(node.value)) return
173172
reportIfInvalid(node.value)
173+
}),
174+
utils.defineScriptSetupVisitor(context, {
175+
onDefineOptionsEnter(node) {
176+
if (node.arguments.length === 0) return
177+
const define = node.arguments[0]
178+
if (define.type !== 'ObjectExpression') return
179+
const nameNode = utils.findProperty(define, 'name')
180+
if (!nameNode) return
181+
if (!canVerify(nameNode.value)) return
182+
reportIfInvalid(nameNode.value)
183+
}
174184
})
175185
)
176186
}

Diff for: tests/lib/rules/no-reserved-component-names.js

+34-1
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,25 @@ ruleTester.run('no-reserved-component-names', rule, {
555555
`,
556556
parserOptions,
557557
options: [{ disallowVueBuiltInComponents: true }]
558-
}))
558+
})),
559+
{
560+
filename: 'test.vue',
561+
code: `<script setup> defineOptions({}) </script>`,
562+
parser: require.resolve('vue-eslint-parser'),
563+
parserOptions
564+
},
565+
{
566+
filename: 'test.vue',
567+
code: `<script setup> defineOptions({ ...name }) </script>`,
568+
parser: require.resolve('vue-eslint-parser'),
569+
parserOptions
570+
},
571+
{
572+
filename: 'test.vue',
573+
code: `<script setup> defineOptions({ name: 'Foo' }) </script>`,
574+
parser: require.resolve('vue-eslint-parser'),
575+
parserOptions
576+
}
559577
],
560578

561579
invalid: [
@@ -657,6 +675,21 @@ ruleTester.run('no-reserved-component-names', rule, {
657675
}
658676
]
659677
})),
678+
...invalidElements.map((name) => ({
679+
filename: `${name}.vue`,
680+
code: `<script setup> defineOptions({name: '${name}'}) </script>`,
681+
parser: require.resolve('vue-eslint-parser'),
682+
parserOptions,
683+
errors: [
684+
{
685+
messageId: RESERVED_NAMES_IN_HTML.has(name)
686+
? 'reservedInHtml'
687+
: 'reserved',
688+
data: { name },
689+
line: 1
690+
}
691+
]
692+
})),
660693
...vue2BuiltInComponents.map((name) => ({
661694
filename: `${name}.vue`,
662695
code: `

0 commit comments

Comments
 (0)