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: `