Skip to content

Commit 94e45d4

Browse files
authored
Add support for defineOptions to vue/component-definition-name-casing rule (#2159)
1 parent 2518545 commit 94e45d4

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
lines changed

Diff for: lib/rules/component-definition-name-casing.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@ module.exports = {
7777
}
7878
}
7979

80-
return Object.assign(
81-
{},
80+
return utils.compositingVisitors(
8281
utils.executeOnCallVueComponent(context, (node) => {
8382
if (node.arguments.length === 2) {
8483
const argument = node.arguments[0]
@@ -94,6 +93,17 @@ module.exports = {
9493
if (!node) return
9594
if (!canConvert(node.value)) return
9695
convertName(node.value)
96+
}),
97+
utils.defineScriptSetupVisitor(context, {
98+
onDefineOptionsEnter(node) {
99+
if (node.arguments.length === 0) return
100+
const define = node.arguments[0]
101+
if (define.type !== 'ObjectExpression') return
102+
const nameNode = utils.findProperty(define, 'name')
103+
if (!nameNode) return
104+
if (!canConvert(nameNode.value)) return
105+
convertName(nameNode.value)
106+
}
97107
})
98108
)
99109
}

Diff for: tests/lib/rules/component-definition-name-casing.js

+48
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,26 @@ ruleTester.run('component-definition-name-casing', rule, {
145145
filename: 'test.js',
146146
code: `fn1(component.data)`,
147147
parserOptions
148+
},
149+
{
150+
filename: 'test.vue',
151+
code: `<script setup> defineOptions({}) </script>`,
152+
parser: require.resolve('vue-eslint-parser'),
153+
parserOptions
154+
},
155+
{
156+
filename: 'test.vue',
157+
code: `<script setup> defineOptions({name: 'FooBar'}) </script>`,
158+
options: ['PascalCase'],
159+
parser: require.resolve('vue-eslint-parser'),
160+
parserOptions
161+
},
162+
{
163+
filename: 'test.vue',
164+
code: `<script setup> defineOptions({name: 'foo-bar'}) </script>`,
165+
options: ['kebab-case'],
166+
parser: require.resolve('vue-eslint-parser'),
167+
parserOptions
148168
}
149169
],
150170

@@ -393,6 +413,34 @@ ruleTester.run('component-definition-name-casing', rule, {
393413
line: 1
394414
}
395415
]
416+
},
417+
{
418+
filename: 'test.vue',
419+
code: `<script setup> defineOptions({name: 'foo-bar'}) </script>`,
420+
output: `<script setup> defineOptions({name: 'FooBar'}) </script>`,
421+
options: ['PascalCase'],
422+
parser: require.resolve('vue-eslint-parser'),
423+
parserOptions,
424+
errors: [
425+
{
426+
message: 'Property name "foo-bar" is not PascalCase.',
427+
line: 1
428+
}
429+
]
430+
},
431+
{
432+
filename: 'test.vue',
433+
code: `<script setup> defineOptions({name: 'FooBar'}) </script>`,
434+
output: `<script setup> defineOptions({name: 'foo-bar'}) </script>`,
435+
options: ['kebab-case'],
436+
parser: require.resolve('vue-eslint-parser'),
437+
parserOptions,
438+
errors: [
439+
{
440+
message: 'Property name "FooBar" is not kebab-case.',
441+
line: 1
442+
}
443+
]
396444
}
397445
]
398446
})

0 commit comments

Comments
 (0)