Skip to content

Commit ffd7c01

Browse files
committed
⭐️New: Add vue/no-empty-pattern rule
1 parent f46c75b commit ffd7c01

File tree

5 files changed

+284
-0
lines changed

5 files changed

+284
-0
lines changed

Diff for: docs/rules/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ For example:
150150
| [vue/key-spacing](./key-spacing.md) | enforce consistent spacing between keys and values in object literal properties | :wrench: |
151151
| [vue/match-component-file-name](./match-component-file-name.md) | require component name property to match its file name | |
152152
| [vue/no-boolean-default](./no-boolean-default.md) | disallow boolean defaults | :wrench: |
153+
| [vue/no-empty-pattern](./no-empty-pattern.md) | disallow empty destructuring patterns | |
153154
| [vue/no-restricted-syntax](./no-restricted-syntax.md) | disallow specified syntax | |
154155
| [vue/object-curly-spacing](./object-curly-spacing.md) | enforce consistent spacing inside braces | :wrench: |
155156
| [vue/require-direct-export](./require-direct-export.md) | require the component to be directly exported | |

Diff for: docs/rules/no-empty-pattern.md

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
pageClass: rule-details
3+
sidebarDepth: 0
4+
title: vue/no-empty-pattern
5+
description: disallow empty destructuring patterns
6+
---
7+
# vue/no-empty-pattern
8+
> disallow empty destructuring patterns
9+
10+
This rule is the same rule as core [no-empty-pattern] rule but it applies to the expressions in `<template>`.
11+
12+
## :books: Further reading
13+
14+
- [no-empty-pattern]
15+
16+
[no-empty-pattern]: https://eslint.org/docs/rules/no-empty-pattern
17+
18+
## :mag: Implementation
19+
20+
- [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/no-empty-pattern.js)
21+
- [Test source](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/no-empty-pattern.js)

Diff for: lib/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ module.exports = {
3636
'no-confusing-v-for-v-if': require('./rules/no-confusing-v-for-v-if'),
3737
'no-dupe-keys': require('./rules/no-dupe-keys'),
3838
'no-duplicate-attributes': require('./rules/no-duplicate-attributes'),
39+
'no-empty-pattern': require('./rules/no-empty-pattern'),
3940
'no-multi-spaces': require('./rules/no-multi-spaces'),
4041
'no-parsing-error': require('./rules/no-parsing-error'),
4142
'no-reserved-keys': require('./rules/no-reserved-keys'),

Diff for: lib/rules/no-empty-pattern.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* @author Yosuke Ota
3+
*/
4+
'use strict'
5+
6+
const { wrapCoreRule } = require('../utils')
7+
8+
// eslint-disable-next-line
9+
module.exports = wrapCoreRule(require('eslint/lib/rules/no-empty-pattern'))

Diff for: tests/lib/rules/no-empty-pattern.js

+252
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
/**
2+
* @author Yosuke Ota
3+
*/
4+
'use strict'
5+
6+
const RuleTester = require('eslint').RuleTester
7+
const rule = require('../../../lib/rules/no-empty-pattern')
8+
9+
const tester = new RuleTester({
10+
parser: 'vue-eslint-parser',
11+
parserOptions: { ecmaVersion: 2018 }
12+
})
13+
14+
tester.run('no-empty-pattern', rule, {
15+
valid: [
16+
`<template>
17+
<div
18+
@attr="() => {
19+
var {a = {}} = foo;
20+
var {a = []} = foo;
21+
}"
22+
/>
23+
</template>`,
24+
`<template>
25+
<div
26+
@attr="function foo({a = {}}) {}"
27+
/>
28+
</template>`,
29+
`<template>
30+
<div
31+
@attr="function foo({a = []}) {}"
32+
/>
33+
</template>`,
34+
`<template>
35+
<div
36+
@attr="({a = {}}) => a"
37+
/>
38+
</template>`,
39+
`<template>
40+
<div
41+
@attr="({a = []}) => a"
42+
/>
43+
</template>`,
44+
`<template>
45+
<div
46+
slot-scope="{a = []}"
47+
/>
48+
</template>`
49+
],
50+
invalid: [
51+
{
52+
code: `
53+
<template>
54+
<div
55+
@attr="() => {
56+
var {} = foo;
57+
var [] = foo;
58+
var {a: {}} = foo;
59+
var {a: []} = foo;
60+
}"
61+
/>
62+
</template>`,
63+
errors: [
64+
{
65+
message: 'Unexpected empty object pattern.',
66+
line: 5
67+
},
68+
{
69+
message: 'Unexpected empty array pattern.',
70+
line: 6
71+
},
72+
{
73+
message: 'Unexpected empty object pattern.',
74+
line: 7
75+
},
76+
{
77+
message: 'Unexpected empty array pattern.',
78+
line: 8
79+
}
80+
]
81+
},
82+
{
83+
code: `
84+
<template>
85+
<div
86+
@attr="function foo({}) {}"
87+
/>
88+
</template>`,
89+
errors: [
90+
{
91+
message: 'Unexpected empty object pattern.',
92+
line: 4
93+
}
94+
]
95+
},
96+
{
97+
code: `
98+
<template>
99+
<div
100+
@attr="function foo([]) {}"
101+
/>
102+
</template>`,
103+
errors: [
104+
{
105+
message: 'Unexpected empty array pattern.',
106+
line: 4
107+
}
108+
]
109+
},
110+
{
111+
code: `
112+
<template>
113+
<div
114+
@attr="function foo({a: {}}) {}"
115+
/>
116+
</template>`,
117+
errors: [
118+
{
119+
message: 'Unexpected empty object pattern.',
120+
line: 4
121+
}
122+
]
123+
},
124+
{
125+
code: `
126+
<template>
127+
<div
128+
@attr="function foo({a: []}) {}"
129+
/>
130+
</template>`,
131+
errors: [
132+
{
133+
message: 'Unexpected empty array pattern.',
134+
line: 4
135+
}
136+
]
137+
},
138+
{
139+
code: `
140+
<template>
141+
<div
142+
@attr="({}) => foo()"
143+
/>
144+
</template>`,
145+
errors: [
146+
{
147+
message: 'Unexpected empty object pattern.',
148+
line: 4
149+
}
150+
]
151+
},
152+
{
153+
code: `
154+
<template>
155+
<div
156+
@attr="([]) => foo()"
157+
/>
158+
</template>`,
159+
errors: [
160+
{
161+
message: 'Unexpected empty array pattern.',
162+
line: 4
163+
}
164+
]
165+
},
166+
{
167+
code: `
168+
<template>
169+
<div
170+
@attr="({a: {}}) => a"
171+
/>
172+
</template>`,
173+
errors: [
174+
{
175+
message: 'Unexpected empty object pattern.',
176+
line: 4
177+
}
178+
]
179+
},
180+
{
181+
code: `
182+
<template>
183+
<div
184+
@attr="({a: []}) => a"
185+
/>
186+
</template>`,
187+
errors: [
188+
{
189+
message: 'Unexpected empty array pattern.',
190+
line: 4
191+
}
192+
]
193+
},
194+
{
195+
code: `
196+
<template>
197+
<div
198+
slot-scope="{}"
199+
/>
200+
</template>`,
201+
errors: [
202+
{
203+
message: 'Unexpected empty object pattern.',
204+
line: 4
205+
}
206+
]
207+
},
208+
{
209+
code: `
210+
<template>
211+
<div
212+
slot-scope="[]"
213+
/>
214+
</template>`,
215+
errors: [
216+
{
217+
message: 'Unexpected empty array pattern.',
218+
line: 4
219+
}
220+
]
221+
},
222+
{
223+
code: `
224+
<template>
225+
<div
226+
slot-scope="{a: {}}"
227+
/>
228+
</template>`,
229+
errors: [
230+
{
231+
message: 'Unexpected empty object pattern.',
232+
line: 4
233+
}
234+
]
235+
},
236+
{
237+
code: `
238+
<template>
239+
<div
240+
slot-scope="{a: []}"
241+
/>
242+
</template>`,
243+
errors: [
244+
{
245+
message: 'Unexpected empty array pattern.',
246+
line: 4
247+
}
248+
]
249+
}
250+
251+
]
252+
})

0 commit comments

Comments
 (0)