From e37f809280e1950a3094d91f50d749a3ca67f1d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sajn=C3=B3g?= Date: Thu, 21 Dec 2017 22:55:25 +0100 Subject: [PATCH 1/3] Fix no-unused-vars rule to ignore previous properties if last property was used --- docs/rules/no-unused-vars.md | 12 ++++++------ lib/rules/no-unused-vars.js | 3 +++ tests/lib/rules/no-unused-vars.js | 24 +++++++++++++++++++----- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/docs/rules/no-unused-vars.md b/docs/rules/no-unused-vars.md index bd71a3c0c..9691ec410 100644 --- a/docs/rules/no-unused-vars.md +++ b/docs/rules/no-unused-vars.md @@ -8,9 +8,9 @@ This rule report variable definitions of v-for directives or scope attributes if ```html ``` @@ -18,9 +18,9 @@ This rule report variable definitions of v-for directives or scope attributes if ```html ``` diff --git a/lib/rules/no-unused-vars.js b/lib/rules/no-unused-vars.js index 061cd77aa..118369fed 100644 --- a/lib/rules/no-unused-vars.js +++ b/lib/rules/no-unused-vars.js @@ -15,6 +15,9 @@ const utils = require('../utils') function create (context) { return utils.defineTemplateBodyVisitor(context, { VElement (node) { + const lastVariable = node.variables.slice(-1)[0] + if (!lastVariable || lastVariable.references.length) return + for (const variable of node.variables) { if (variable.references.length === 0) { context.report({ diff --git a/tests/lib/rules/no-unused-vars.js b/tests/lib/rules/no-unused-vars.js index 92812ebcb..7df98267e 100644 --- a/tests/lib/rules/no-unused-vars.js +++ b/tests/lib/rules/no-unused-vars.js @@ -40,28 +40,42 @@ tester.run('no-unused-vars', rule, { }, { code: '' + }, + { + code: '' + }, + { + code: '' } ], invalid: [ { code: '', - errors: ['\'i\' is defined but never used.'] + errors: ["'i' is defined but never used."] }, { code: '', - errors: ['\'props\' is defined but never used.'] + errors: ["'props' is defined but never used."] }, { code: '', - errors: ['\'j\' is defined but never used.'] + errors: ["'j' is defined but never used."] }, { code: '', - errors: ['\'f\' is defined but never used.'] + errors: ["'f' is defined but never used."] }, { code: '', - errors: ['\'v\' is defined but never used.', '\'i\' is defined but never used.', '\'c\' is defined but never used.'] + errors: ["'v' is defined but never used.", "'i' is defined but never used.", "'c' is defined but never used."] + }, + { + code: '', + errors: ["'v' is defined but never used.", "'c' is defined but never used."] + }, + { + code: '', + errors: ["'key' is defined but never used."] } ] }) From 786261011ab942c909e828403478fe53fc9e7e7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sajn=C3=B3g?= Date: Sat, 23 Dec 2017 12:11:11 +0100 Subject: [PATCH 2/3] Don't report unused variables before the last used --- lib/rules/no-unused-vars.js | 24 +++++++++++++----------- tests/lib/rules/no-unused-vars.js | 12 ++++++++---- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/rules/no-unused-vars.js b/lib/rules/no-unused-vars.js index 118369fed..2707189a6 100644 --- a/lib/rules/no-unused-vars.js +++ b/lib/rules/no-unused-vars.js @@ -15,18 +15,20 @@ const utils = require('../utils') function create (context) { return utils.defineTemplateBodyVisitor(context, { VElement (node) { - const lastVariable = node.variables.slice(-1)[0] - if (!lastVariable || lastVariable.references.length) return + const { variables } = node - for (const variable of node.variables) { - if (variable.references.length === 0) { - context.report({ - node: variable.id, - loc: variable.id.loc, - message: `'{{name}}' is defined but never used.`, - data: variable.id - }) - } + for ( + let i = variables.length - 1; + i >= 0 && !variables[i].references.length; + i-- + ) { + const variable = variables[i] + context.report({ + node: variable.id, + loc: variable.id.loc, + message: `'{{name}}' is defined but never used.`, + data: variable.id + }) } } }) diff --git a/tests/lib/rules/no-unused-vars.js b/tests/lib/rules/no-unused-vars.js index 7df98267e..db67041e1 100644 --- a/tests/lib/rules/no-unused-vars.js +++ b/tests/lib/rules/no-unused-vars.js @@ -66,12 +66,16 @@ tester.run('no-unused-vars', rule, { errors: ["'f' is defined but never used."] }, { - code: '', - errors: ["'v' is defined but never used.", "'i' is defined but never used.", "'c' is defined but never used."] + code: '', + errors: ["'a' is defined but never used.", "'b' is defined but never used.", "'c' is defined but never used."] }, { - code: '', - errors: ["'v' is defined but never used.", "'c' is defined but never used."] + code: '', + errors: ["'b' is defined but never used.", "'c' is defined but never used."] + }, + { + code: '', + errors: ["'c' is defined but never used."] }, { code: '', From bd45558109ce7547c1b84f36efd202f9d132a810 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sajn=C3=B3g?= Date: Sat, 23 Dec 2017 12:18:19 +0100 Subject: [PATCH 3/3] Fix node 4 compatibility issue --- lib/rules/no-unused-vars.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rules/no-unused-vars.js b/lib/rules/no-unused-vars.js index 2707189a6..930b89c0a 100644 --- a/lib/rules/no-unused-vars.js +++ b/lib/rules/no-unused-vars.js @@ -15,7 +15,7 @@ const utils = require('../utils') function create (context) { return utils.defineTemplateBodyVisitor(context, { VElement (node) { - const { variables } = node + const variables = node.variables for ( let i = variables.length - 1;