Skip to content

Commit 624e8cd

Browse files
committed
Handle spread operator cases
1 parent e8ff837 commit 624e8cd

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

lib/rules/require-default-prop.js

+8-3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ module.exports = {
3434
function propIsRequired (prop) {
3535
const propRequiredNode = prop.value.properties
3636
.find(p =>
37+
p.type === 'Property' &&
3738
p.key.name === 'required' &&
3839
p.value.type === 'Literal' &&
3940
p.value.value === true
@@ -61,8 +62,11 @@ module.exports = {
6162
*/
6263
function findPropsWithoutDefaultValue (propsNode) {
6364
return propsNode.value.properties
65+
.filter(prop => prop.type === 'Property')
6466
.filter(prop => {
65-
if (prop.value.type !== 'ObjectExpression') return true
67+
if (prop.value.type !== 'ObjectExpression') {
68+
return true
69+
}
6670

6771
return !propIsRequired(prop) && !propHasDefault(prop)
6872
})
@@ -77,10 +81,11 @@ module.exports = {
7781
.find(p =>
7882
p.type === 'Property' &&
7983
p.key.type === 'Identifier' &&
80-
p.key.name === 'props'
84+
p.key.name === 'props' &&
85+
p.value.type === 'ObjectExpression'
8186
)
8287

83-
if (!propsNode || propsNode.value.type !== 'ObjectExpression') return
88+
if (!propsNode) return
8489

8590
const propsWithoutDefault = findPropsWithoutDefaultValue(propsNode)
8691

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

+25-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010

1111
const rule = require('../../../lib/rules/require-default-prop')
1212
const RuleTester = require('eslint').RuleTester
13-
const parserOptions = { ecmaVersion: 6, sourceType: 'module' }
13+
const parserOptions = {
14+
ecmaVersion: 6,
15+
ecmaFeatures: { experimentalObjectRestSpread: true },
16+
sourceType: 'module'
17+
}
1418

1519
// ------------------------------------------------------------------------------
1620
// Tests
@@ -44,6 +48,26 @@ ruleTester.run('require-default-prop', rule, {
4448
}
4549
`,
4650
parserOptions
51+
},
52+
{
53+
filename: 'test.vue',
54+
code: `
55+
export default {
56+
props: {
57+
...x,
58+
a: {
59+
...y,
60+
type: Number,
61+
required: true
62+
},
63+
b: {
64+
type: Number,
65+
default: 0
66+
}
67+
}
68+
}
69+
`,
70+
parserOptions
4771
}
4872
],
4973

0 commit comments

Comments
 (0)