Skip to content

Commit 9784643

Browse files
authored
Update vue/require-prop-types rule to support <script setup> (#1546)
1 parent f93892f commit 9784643

File tree

2 files changed

+78
-6
lines changed

2 files changed

+78
-6
lines changed

Diff for: lib/rules/require-prop-types.js

+18-6
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,24 @@ module.exports = {
9292
// Public
9393
// ----------------------------------------------------------------------
9494

95-
return utils.executeOnVue(context, (obj) => {
96-
const props = utils.getComponentProps(obj)
95+
return utils.compositingVisitors(
96+
utils.defineScriptSetupVisitor(context, {
97+
onDefinePropsEnter(_node, props) {
98+
for (const prop of props) {
99+
if (prop.type === 'type') {
100+
continue
101+
}
102+
checkProperty(prop)
103+
}
104+
}
105+
}),
106+
utils.executeOnVue(context, (obj) => {
107+
const props = utils.getComponentProps(obj)
97108

98-
for (const prop of props) {
99-
checkProperty(prop)
100-
}
101-
})
109+
for (const prop of props) {
110+
checkProperty(prop)
111+
}
112+
})
113+
)
102114
}
103115
}

Diff for: tests/lib/rules/require-prop-types.js

+60
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,32 @@ ruleTester.run('require-prop-types', rule, {
158158
`,
159159
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
160160
parser: require.resolve('@typescript-eslint/parser')
161+
},
162+
{
163+
filename: 'test.vue',
164+
code: `
165+
<script setup>
166+
defineProps({
167+
foo: String
168+
})
169+
</script>
170+
`,
171+
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
172+
parser: require.resolve('vue-eslint-parser')
173+
},
174+
{
175+
filename: 'test.vue',
176+
code: `
177+
<script setup lang="ts">
178+
defineProps<{foo:string}>()
179+
</script>
180+
`,
181+
parserOptions: {
182+
ecmaVersion: 6,
183+
sourceType: 'module',
184+
parser: require.resolve('@typescript-eslint/parser')
185+
},
186+
parser: require.resolve('vue-eslint-parser')
161187
}
162188
],
163189

@@ -305,6 +331,40 @@ ruleTester.run('require-prop-types', rule, {
305331
line: 4
306332
}
307333
]
334+
},
335+
{
336+
filename: 'test.vue',
337+
code: `
338+
<script setup>
339+
defineProps({
340+
foo: {}
341+
})
342+
</script>
343+
`,
344+
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
345+
parser: require.resolve('vue-eslint-parser'),
346+
errors: [
347+
{
348+
message: 'Prop "foo" should define at least its type.',
349+
line: 4
350+
}
351+
]
352+
},
353+
{
354+
filename: 'test.vue',
355+
code: `
356+
<script setup>
357+
defineProps(['foo'])
358+
</script>
359+
`,
360+
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
361+
parser: require.resolve('vue-eslint-parser'),
362+
errors: [
363+
{
364+
message: 'Prop "foo" should define at least its type.',
365+
line: 3
366+
}
367+
]
308368
}
309369
]
310370
})

0 commit comments

Comments
 (0)