Skip to content

Commit 06c11f2

Browse files
st-slothmysticatea
st-sloth
authored andcommitted
Fix: no-boolean-default with 'default-false' on boolean props with unset default (#821)
1 parent 1447bab commit 06c11f2

File tree

2 files changed

+154
-4
lines changed

2 files changed

+154
-4
lines changed

Diff for: lib/rules/no-boolean-default.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,13 @@ module.exports = {
7878
break
7979

8080
case 'default-false':
81-
if (defaultNode.value.value !== false) {
81+
if (
82+
defaultNode &&
83+
defaultNode.value.value !== false
84+
) {
8285
context.report({
8386
node: defaultNode,
84-
message: 'Boolean prop should be defaulted to false.'
87+
message: 'Boolean prop should only be defaulted to false.'
8588
})
8689
}
8790
break

Diff for: tests/lib/rules/no-boolean-default.js

+149-2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,53 @@ ruleTester.run('no-boolean-default', rule, {
3535
}
3636
`
3737
},
38+
{
39+
filename: 'test.vue',
40+
code: `
41+
export default {
42+
props: {
43+
enabled: Boolean
44+
}
45+
}
46+
`,
47+
options: ['no-default']
48+
},
49+
{
50+
filename: 'test.vue',
51+
code: `
52+
export default {
53+
props: {
54+
enabled: Boolean
55+
}
56+
}
57+
`,
58+
options: ['default-false']
59+
},
60+
{
61+
filename: 'test.vue',
62+
code: `
63+
const props = {};
64+
export default {
65+
props: {
66+
...props,
67+
enabled: Boolean
68+
}
69+
}
70+
`
71+
},
72+
{
73+
filename: 'test.vue',
74+
code: `
75+
const props = {};
76+
export default {
77+
props: {
78+
...props,
79+
enabled: Boolean
80+
}
81+
}
82+
`,
83+
options: ['no-default']
84+
},
3885
{
3986
filename: 'test.vue',
4087
code: `
@@ -45,6 +92,21 @@ ruleTester.run('no-boolean-default', rule, {
4592
enabled: Boolean
4693
}
4794
}
95+
`,
96+
options: ['default-false']
97+
},
98+
{
99+
filename: 'test.vue',
100+
code: `
101+
const data = {};
102+
export default {
103+
props: {
104+
enabled: {
105+
type: Boolean,
106+
...data
107+
}
108+
}
109+
}
48110
`
49111
},
50112
{
@@ -62,6 +124,21 @@ ruleTester.run('no-boolean-default', rule, {
62124
`,
63125
options: ['no-default']
64126
},
127+
{
128+
filename: 'test.vue',
129+
code: `
130+
const data = {};
131+
export default {
132+
props: {
133+
enabled: {
134+
type: Boolean,
135+
...data
136+
}
137+
}
138+
}
139+
`,
140+
options: ['default-false']
141+
},
65142
{
66143
filename: 'test.vue',
67144
code: `
@@ -89,6 +166,30 @@ ruleTester.run('no-boolean-default', rule, {
89166
}
90167
`
91168
},
169+
{
170+
filename: 'test.vue',
171+
code: `
172+
const data = {};
173+
export default {
174+
props: {
175+
enabled: data
176+
}
177+
}
178+
`,
179+
options: ['no-default']
180+
},
181+
{
182+
filename: 'test.vue',
183+
code: `
184+
const data = {};
185+
export default {
186+
props: {
187+
enabled: data
188+
}
189+
}
190+
`,
191+
options: ['default-false']
192+
},
92193
{
93194
filename: 'test.vue',
94195
code: `
@@ -101,6 +202,34 @@ ruleTester.run('no-boolean-default', rule, {
101202
}
102203
}
103204
`
205+
},
206+
{
207+
filename: 'test.vue',
208+
code: `
209+
const data = {};
210+
export default {
211+
props: {
212+
enabled: {
213+
...data
214+
}
215+
}
216+
}
217+
`,
218+
options: ['no-default']
219+
},
220+
{
221+
filename: 'test.vue',
222+
code: `
223+
const data = {};
224+
export default {
225+
props: {
226+
enabled: {
227+
...data
228+
}
229+
}
230+
}
231+
`,
232+
options: ['default-false']
104233
}
105234
],
106235

@@ -119,7 +248,7 @@ ruleTester.run('no-boolean-default', rule, {
119248
`,
120249
options: ['default-false'],
121250
errors: [{
122-
message: 'Boolean prop should be defaulted to false.',
251+
message: 'Boolean prop should only be defaulted to false.',
123252
line: 6
124253
}]
125254
},
@@ -137,7 +266,7 @@ ruleTester.run('no-boolean-default', rule, {
137266
`,
138267
options: ['default-false'],
139268
errors: [{
140-
message: 'Boolean prop should be defaulted to false.',
269+
message: 'Boolean prop should only be defaulted to false.',
141270
line: 6
142271
}]
143272
},
@@ -158,6 +287,24 @@ ruleTester.run('no-boolean-default', rule, {
158287
message: 'Boolean prop should not set a default (Vue defaults it to false).',
159288
line: 6
160289
}]
290+
},
291+
{
292+
filename: 'test.vue',
293+
code: `
294+
export default {
295+
props: {
296+
enabled: {
297+
type: Boolean,
298+
default: true,
299+
}
300+
}
301+
}
302+
`,
303+
options: ['no-default'],
304+
errors: [{
305+
message: 'Boolean prop should not set a default (Vue defaults it to false).',
306+
line: 6
307+
}]
161308
}
162309
]
163310
})

0 commit comments

Comments
 (0)