Skip to content

Commit e37f809

Browse files
committed
Fix no-unused-vars rule to ignore previous properties if last property was used
1 parent 7752f5a commit e37f809

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed

docs/rules/no-unused-vars.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ This rule report variable definitions of v-for directives or scope attributes if
88

99
```html
1010
<template>
11-
<ol v-for="i in 5"><!-- "i" is defined but never used. -->
12-
<li>item</li>
13-
</ol>
11+
<ol v-for="i in 5"><!-- "i" is defined but never used. -->
12+
<li>item</li>
13+
</ol>
1414
</template>
1515
```
1616

1717
:+1: Examples of **correct** code for this rule:
1818

1919
```html
2020
<template>
21-
<ol v-for="i in 5">
22-
<li>{{i}}</li><!-- "i" is defined and used. -->
23-
</ol>
21+
<ol v-for="i in 5">
22+
<li>{{i}}</li><!-- "i" is defined and used. -->
23+
</ol>
2424
</template>
2525
```
2626

lib/rules/no-unused-vars.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ const utils = require('../utils')
1515
function create (context) {
1616
return utils.defineTemplateBodyVisitor(context, {
1717
VElement (node) {
18+
const lastVariable = node.variables.slice(-1)[0]
19+
if (!lastVariable || lastVariable.references.length) return
20+
1821
for (const variable of node.variables) {
1922
if (variable.references.length === 0) {
2023
context.report({

tests/lib/rules/no-unused-vars.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,42 @@ tester.run('no-unused-vars', rule, {
4040
},
4141
{
4242
code: '<template scope="props"><span v-if="props"></span></template>'
43+
},
44+
{
45+
code: '<template><div v-for="(item, key) in items" :key="key">{{item.name}}</div></template>'
46+
},
47+
{
48+
code: '<template><div v-for="(v, i, c) in foo">{{c}}</div></template>'
4349
}
4450
],
4551
invalid: [
4652
{
4753
code: '<template><ol v-for="i in 5"><li></li></ol></template>',
48-
errors: ['\'i\' is defined but never used.']
54+
errors: ["'i' is defined but never used."]
4955
},
5056
{
5157
code: '<template scope="props"></template>',
52-
errors: ['\'props\' is defined but never used.']
58+
errors: ["'props' is defined but never used."]
5359
},
5460
{
5561
code: '<template v-for="i in 5"><comp v-for="j in 10">{{i}}{{i}}</comp></template>',
56-
errors: ['\'j\' is defined but never used.']
62+
errors: ["'j' is defined but never used."]
5763
},
5864
{
5965
code: '<template><ol v-for="i in data"><li v-for="f in i"></li></ol></template>',
60-
errors: ['\'f\' is defined but never used.']
66+
errors: ["'f' is defined but never used."]
6167
},
6268
{
6369
code: '<template><div v-for="(v, i, c) in foo"></div></template>',
64-
errors: ['\'v\' is defined but never used.', '\'i\' is defined but never used.', '\'c\' is defined but never used.']
70+
errors: ["'v' is defined but never used.", "'i' is defined but never used.", "'c' is defined but never used."]
71+
},
72+
{
73+
code: '<template><div v-for="(v, i, c) in foo">{{i}}</div></template>',
74+
errors: ["'v' is defined but never used.", "'c' is defined but never used."]
75+
},
76+
{
77+
code: '<template><div v-for="(item, key) in items" :key="item.id">{{item.name}}</div></template>',
78+
errors: ["'key' is defined but never used."]
6579
}
6680
]
6781
})

0 commit comments

Comments
 (0)