Skip to content

Commit 41e0192

Browse files
authored
fix(require-default-prop): report props destructure (#2728)
1 parent 554596c commit 41e0192

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

lib/rules/require-default-prop.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ module.exports = {
200200

201201
processProps(props, (prop) => {
202202
if (prop.type === 'type') {
203-
if (!hasWithDefaults) {
204-
// If don't use withDefaults(), exclude it from the report.
203+
if (!hasWithDefaults && !isUsingPropsDestructure) {
204+
// If don't use withDefaults() and props destructure, exclude it from the report.
205205
return true
206206
}
207207
if (defaultsByWithDefaults[prop.propName]) {

tests/lib/rules/require-default-prop.js

+45
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,31 @@ ruleTester.run('require-default-prop', rule, {
388388
parser: require('vue-eslint-parser'),
389389
...languageOptions
390390
}
391+
},
392+
{
393+
filename: 'test.vue',
394+
code: `
395+
<script setup>
396+
const {bar=42} = defineProps({foo: {type: Number, required: true}, bar: {type: Number, required: false}})
397+
</script>
398+
`,
399+
languageOptions: {
400+
parser: require('vue-eslint-parser'),
401+
...languageOptions
402+
}
403+
},
404+
{
405+
filename: 'test.vue',
406+
code: `
407+
<script setup lang="ts">
408+
const {foo = 42, bar} = defineProps<{foo?: number; bar: number}>()
409+
</script>
410+
`,
411+
languageOptions: {
412+
parser: require('vue-eslint-parser'),
413+
...languageOptions,
414+
parserOptions: { parser: require.resolve('@typescript-eslint/parser') }
415+
}
391416
}
392417
],
393418

@@ -700,6 +725,26 @@ ruleTester.run('require-default-prop', rule, {
700725
line: 3
701726
}
702727
]
728+
},
729+
{
730+
// https://github.com/vuejs/eslint-plugin-vue/issues/2725
731+
filename: 'type-with-props-destructure.vue',
732+
code: `
733+
<script setup lang="ts">
734+
const {foo, bar} = defineProps<{foo?: number; bar: number}>()
735+
</script>
736+
`,
737+
languageOptions: {
738+
parser: require('vue-eslint-parser'),
739+
...languageOptions,
740+
parserOptions: { parser: require.resolve('@typescript-eslint/parser') }
741+
},
742+
errors: [
743+
{
744+
message: "Prop 'foo' requires default value to be set.",
745+
line: 3
746+
}
747+
]
703748
}
704749
]
705750
})

0 commit comments

Comments
 (0)