Skip to content

Commit 70b88a2

Browse files
authored
Add support for defineOptions to vue/match-component-file-name rule (#2161)
1 parent 6ce5c80 commit 70b88a2

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

Diff for: lib/rules/match-component-file-name.js

+13-2
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,7 @@ module.exports = {
119119
}
120120
}
121121

122-
return Object.assign(
123-
{},
122+
return utils.compositingVisitors(
124123
utils.executeOnCallVueComponent(context, (node) => {
125124
if (node.arguments.length === 2) {
126125
const argument = node.arguments[0]
@@ -139,6 +138,18 @@ module.exports = {
139138
if (!canVerify(node.value)) return
140139
verifyName(node.value)
141140
}),
141+
utils.defineScriptSetupVisitor(context, {
142+
onDefineOptionsEnter(node) {
143+
componentCount++
144+
if (node.arguments.length === 0) return
145+
const define = node.arguments[0]
146+
if (define.type !== 'ObjectExpression') return
147+
const nameNode = utils.findProperty(define, 'name')
148+
if (!nameNode) return
149+
if (!canVerify(nameNode.value)) return
150+
verifyName(nameNode.value)
151+
}
152+
}),
142153
{
143154
'Program:exit'() {
144155
if (componentCount > 1) return

Diff for: tests/lib/rules/match-component-file-name.js

+26
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,13 @@ ruleTester.run('match-component-file-name', rule, {
539539
filename: 'test.jsx',
540540
code: `fn1(component.data)`,
541541
parserOptions
542+
},
543+
{
544+
filename: 'MyComponent.vue',
545+
code: `<script setup> defineOptions({name: 'MyComponent'}) </script>`,
546+
options: [{ extensions: ['vue'] }],
547+
parser: require.resolve('vue-eslint-parser'),
548+
parserOptions
542549
}
543550
],
544551

@@ -1081,6 +1088,25 @@ ruleTester.run('match-component-file-name', rule, {
10811088
]
10821089
}
10831090
]
1091+
},
1092+
{
1093+
filename: 'MyComponent.vue',
1094+
code: `<script setup> defineOptions({name: 'CoolComponent'}) </script>`,
1095+
options: [{ extensions: ['vue'] }],
1096+
parser: require.resolve('vue-eslint-parser'),
1097+
parserOptions,
1098+
errors: [
1099+
{
1100+
message:
1101+
'Component name `CoolComponent` should match file name `MyComponent`.',
1102+
suggestions: [
1103+
{
1104+
desc: 'Rename component to match file name.',
1105+
output: `<script setup> defineOptions({name: 'MyComponent'}) </script>`
1106+
}
1107+
]
1108+
}
1109+
]
10841110
}
10851111
]
10861112
})

0 commit comments

Comments
 (0)