diff --git a/lib/rules/no-reserved-component-names.js b/lib/rules/no-reserved-component-names.js
index dafc70e0d..835fb7325 100644
--- a/lib/rules/no-reserved-component-names.js
+++ b/lib/rules/no-reserved-component-names.js
@@ -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]
@@ -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)
+ }
})
)
}
diff --git a/tests/lib/rules/no-reserved-component-names.js b/tests/lib/rules/no-reserved-component-names.js
index ead9cce65..d9114810b 100644
--- a/tests/lib/rules/no-reserved-component-names.js
+++ b/tests/lib/rules/no-reserved-component-names.js
@@ -555,7 +555,25 @@ ruleTester.run('no-reserved-component-names', rule, {
`,
parserOptions,
options: [{ disallowVueBuiltInComponents: true }]
- }))
+ })),
+ {
+ filename: 'test.vue',
+ code: ``,
+ parser: require.resolve('vue-eslint-parser'),
+ parserOptions
+ },
+ {
+ filename: 'test.vue',
+ code: ``,
+ parser: require.resolve('vue-eslint-parser'),
+ parserOptions
+ },
+ {
+ filename: 'test.vue',
+ code: ``,
+ parser: require.resolve('vue-eslint-parser'),
+ parserOptions
+ }
],
invalid: [
@@ -657,6 +675,21 @@ ruleTester.run('no-reserved-component-names', rule, {
}
]
})),
+ ...invalidElements.map((name) => ({
+ filename: `${name}.vue`,
+ code: ``,
+ 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: `