Skip to content

Commit 5750d7a

Browse files
ota-meshiMichaela Robosova
and
Michaela Robosova
authored
Add vue/no-unused-properties rule (from #871) (#1145)
* New: add vue/no-unused-properties rule (#631) * Update * Updated to trace function calls. Co-authored-by: Michaela Robosova <[email protected]>
1 parent 0a5aeaf commit 5750d7a

File tree

6 files changed

+1920
-0
lines changed

6 files changed

+1920
-0
lines changed

Diff for: docs/rules/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ For example:
295295
| [vue/no-template-target-blank](./no-template-target-blank.md) | disallow target="_blank" attribute without rel="noopener noreferrer" | |
296296
| [vue/no-unregistered-components](./no-unregistered-components.md) | disallow using components that are not registered inside templates | |
297297
| [vue/no-unsupported-features](./no-unsupported-features.md) | disallow unsupported Vue.js syntax on the specified version | :wrench: |
298+
| [vue/no-unused-properties](./no-unused-properties.md) | disallow unused properties | |
298299
| [vue/object-curly-spacing](./object-curly-spacing.md) | enforce consistent spacing inside braces | :wrench: |
299300
| [vue/padding-line-between-blocks](./padding-line-between-blocks.md) | require or disallow padding lines between blocks | :wrench: |
300301
| [vue/prefer-template](./prefer-template.md) | require template literals instead of string concatenation | :wrench: |

Diff for: docs/rules/no-unused-properties.md

+164
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
---
2+
pageClass: rule-details
3+
sidebarDepth: 0
4+
title: vue/no-unused-properties
5+
description: disallow unused properties
6+
---
7+
# vue/no-unused-properties
8+
> disallow unused properties
9+
10+
## :book: Rule Details
11+
12+
This rule is aimed at eliminating unused properties.
13+
14+
::: warning Note
15+
This rule cannot be checked for use in other components (e.g. `mixins`, Property access via `$refs`) and use in places where the scope cannot be determined.
16+
:::
17+
18+
<eslint-code-block :rules="{'vue/no-unused-properties': ['error']}">
19+
20+
```vue
21+
<!-- ✓ GOOD -->
22+
<template>
23+
<div>{{ count }}</div>
24+
</template>
25+
<script>
26+
export default {
27+
props: ['count']
28+
}
29+
</script>
30+
```
31+
32+
</eslint-code-block>
33+
34+
<eslint-code-block :rules="{'vue/no-unused-properties': ['error']}">
35+
36+
```vue
37+
<!-- ✗ BAD (`count` property not used) -->
38+
<template>
39+
<div>{{ cnt }}</div>
40+
</template>
41+
<script>
42+
export default {
43+
props: ['count']
44+
}
45+
</script>
46+
```
47+
48+
</eslint-code-block>
49+
50+
## :wrench: Options
51+
52+
```json
53+
{
54+
"vue/no-unused-properties": ["error", {
55+
"groups": ["props"]
56+
}]
57+
}
58+
```
59+
60+
- `"groups"` (`string[]`) Array of groups to search for properties. Default is `["props"]`. The value of the array is some of the following strings:
61+
- `"props"`
62+
- `"data"`
63+
- `"computed"`
64+
- `"methods"`
65+
- `"setup"`
66+
67+
### `"groups": ["props", "data"]`
68+
69+
<eslint-code-block :rules="{'vue/no-unused-properties': ['error', {groups: ['props', 'data']}]}">
70+
71+
```vue
72+
<!-- ✓ GOOD -->
73+
<script>
74+
export default {
75+
data() {
76+
return {
77+
count: null
78+
}
79+
},
80+
created() {
81+
this.count = 2
82+
}
83+
}
84+
</script>
85+
```
86+
87+
</eslint-code-block>
88+
89+
<eslint-code-block :rules="{'vue/no-unused-properties': ['error', {groups: ['props', 'data']}]}">
90+
91+
```vue
92+
<!-- ✓ BAD (`count` data not used) -->
93+
<script>
94+
export default {
95+
data() {
96+
return {
97+
count: null
98+
}
99+
},
100+
created() {
101+
this.cnt = 2
102+
}
103+
}
104+
</script>
105+
```
106+
107+
</eslint-code-block>
108+
109+
### `"groups": ["props", "computed"]`
110+
111+
<eslint-code-block :rules="{'vue/no-unused-properties': ['error', {groups: ['props', 'computed']}]}">
112+
113+
```vue
114+
<!-- ✓ GOOD -->
115+
<template>
116+
<p>{{ reversedMessage }}</p>
117+
</template>
118+
<script>
119+
export default {
120+
data() {
121+
return {
122+
message: 'Hello'
123+
}
124+
},
125+
computed: {
126+
reversedMessage() {
127+
return this.message.split('').reverse().join('')
128+
}
129+
}
130+
}
131+
</script>
132+
```
133+
134+
</eslint-code-block>
135+
136+
<eslint-code-block :rules="{'vue/no-unused-properties': ['error', {groups: ['props', 'computed']}]}">
137+
138+
```vue
139+
<!-- ✓ BAD (`reversedMessage` computed property not used) -->
140+
<template>
141+
<p>{{ message }}</p>
142+
</template>
143+
<script>
144+
export default {
145+
data() {
146+
return {
147+
message: 'Hello'
148+
}
149+
},
150+
computed: {
151+
reversedMessage() {
152+
return this.message.split('').reverse().join('')
153+
}
154+
}
155+
}
156+
</script>
157+
```
158+
159+
</eslint-code-block>
160+
161+
## :mag: Implementation
162+
163+
- [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/no-unused-properties.js)
164+
- [Test source](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/no-unused-properties.js)

Diff for: lib/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ module.exports = {
8484
'no-unregistered-components': require('./rules/no-unregistered-components'),
8585
'no-unsupported-features': require('./rules/no-unsupported-features'),
8686
'no-unused-components': require('./rules/no-unused-components'),
87+
'no-unused-properties': require('./rules/no-unused-properties'),
8788
'no-unused-vars': require('./rules/no-unused-vars'),
8889
'no-use-v-if-with-v-for': require('./rules/no-use-v-if-with-v-for'),
8990
'no-v-html': require('./rules/no-v-html'),

0 commit comments

Comments
 (0)