diff --git a/lib/rules/component-definition-name-casing.js b/lib/rules/component-definition-name-casing.js index e227d4b99..c3a5cbc3d 100644 --- a/lib/rules/component-definition-name-casing.js +++ b/lib/rules/component-definition-name-casing.js @@ -77,8 +77,7 @@ module.exports = { } } - return Object.assign( - {}, + return utils.compositingVisitors( utils.executeOnCallVueComponent(context, (node) => { if (node.arguments.length === 2) { const argument = node.arguments[0] @@ -94,6 +93,17 @@ module.exports = { if (!node) return if (!canConvert(node.value)) return convertName(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 (!canConvert(nameNode.value)) return + convertName(nameNode.value) + } }) ) } diff --git a/tests/lib/rules/component-definition-name-casing.js b/tests/lib/rules/component-definition-name-casing.js index ef9cbde8b..2349f5d30 100644 --- a/tests/lib/rules/component-definition-name-casing.js +++ b/tests/lib/rules/component-definition-name-casing.js @@ -145,6 +145,26 @@ ruleTester.run('component-definition-name-casing', rule, { filename: 'test.js', code: `fn1(component.data)`, parserOptions + }, + { + filename: 'test.vue', + code: ``, + parser: require.resolve('vue-eslint-parser'), + parserOptions + }, + { + filename: 'test.vue', + code: ``, + options: ['PascalCase'], + parser: require.resolve('vue-eslint-parser'), + parserOptions + }, + { + filename: 'test.vue', + code: ``, + options: ['kebab-case'], + parser: require.resolve('vue-eslint-parser'), + parserOptions } ], @@ -393,6 +413,34 @@ ruleTester.run('component-definition-name-casing', rule, { line: 1 } ] + }, + { + filename: 'test.vue', + code: ``, + output: ``, + options: ['PascalCase'], + parser: require.resolve('vue-eslint-parser'), + parserOptions, + errors: [ + { + message: 'Property name "foo-bar" is not PascalCase.', + line: 1 + } + ] + }, + { + filename: 'test.vue', + code: ``, + output: ``, + options: ['kebab-case'], + parser: require.resolve('vue-eslint-parser'), + parserOptions, + errors: [ + { + message: 'Property name "FooBar" is not kebab-case.', + line: 1 + } + ] } ] })