From 098a1898f2f56e8d678ad523ef5630c374adc617 Mon Sep 17 00:00:00 2001 From: Anix Date: Tue, 14 Apr 2020 08:15:28 +0000 Subject: [PATCH 1/4] Fix: changed reporter loc to last reference --- lib/rules/no-unused-vars.js | 27 ++++++++++++++++++------- tests/lib/rules/no-unused-vars.js | 33 +++++++++++++++++++++++++++++-- 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/lib/rules/no-unused-vars.js b/lib/rules/no-unused-vars.js index 18c48bf0d78..df9f9038e25 100644 --- a/lib/rules/no-unused-vars.js +++ b/lib/rules/no-unused-vars.js @@ -618,13 +618,26 @@ module.exports = { // Report the first declaration. if (unusedVar.defs.length > 0) { - context.report({ - node: unusedVar.identifiers[0], - messageId: "unusedVar", - data: unusedVar.references.some(ref => ref.isWrite()) - ? getAssignedMessageData(unusedVar) - : getDefinedMessageData(unusedVar) - }); + if (unusedVar.references.length > 0) { + context.report({ + node: + unusedVar.references[ + unusedVar.references.length - 1 + ].identifier, + messageId: "unusedVar", + data: unusedVar.references.some(ref => ref.isWrite()) + ? getAssignedMessageData(unusedVar) + : getDefinedMessageData(unusedVar) + }); + } else { + context.report({ + node: unusedVar.identifiers[0], + messageId: "unusedVar", + data: unusedVar.references.some(ref => ref.isWrite()) + ? getAssignedMessageData(unusedVar) + : getDefinedMessageData(unusedVar) + }); + } // If there are no regular declaration, report the first `/*globals*/` comment directive. } else if (unusedVar.eslintExplicitGlobalComments) { diff --git a/tests/lib/rules/no-unused-vars.js b/tests/lib/rules/no-unused-vars.js index ec23acae19d..da5599f3676 100644 --- a/tests/lib/rules/no-unused-vars.js +++ b/tests/lib/rules/no-unused-vars.js @@ -444,7 +444,7 @@ ruleTester.run("no-unused-vars", rule, { code: "(function(obj) { var name; for ( name in obj ) { i(); return; } })({});", errors: [{ line: 1, - column: 22, + column: 34, messageId: "unusedVar", data: { varName: "name", @@ -457,7 +457,7 @@ ruleTester.run("no-unused-vars", rule, { code: "(function(obj) { var name; for ( name in obj ) { } })({});", errors: [{ line: 1, - column: 22, + column: 34, messageId: "unusedVar", data: { varName: "name", @@ -1021,6 +1021,35 @@ ruleTester.run("no-unused-vars", rule, { code: "const a = () => () => { a(); };", parserOptions: { ecmaVersion: 2015 }, errors: [assignedError("a")] + }, + { + code: `let myArray = [1,2,3,4].filter((x) => x == 0); + myArray = myArray.filter((x) => x == 1);`, + parserOptions: { ecmaVersion: 2015 }, + errors: [{ ...assignedError("myArray"), line: 2, column: 15 }] + }, + { + code: "const a = 1; a += 1;", + parserOptions: { ecmaVersion: 2015 }, + errors: [{ ...assignedError("a"), line: 1, column: 14 }] + }, + { + code: "var a = function() { a(); };", + errors: [{ ...assignedError("a"), line: 1, column: 22 }] + }, + { + code: "var a = function(){ return function() { a(); } };", + errors: [{ ...assignedError("a"), line: 1, column: 41 }] + }, + { + code: "const a = () => { a(); };", + parserOptions: { ecmaVersion: 2015 }, + errors: [{ ...assignedError("a"), line: 1, column: 19 }] + }, + { + code: "const a = () => () => { a(); };", + parserOptions: { ecmaVersion: 2015 }, + errors: [{ ...assignedError("a"), line: 1, column: 25 }] } ] }); From 2a52703cbfe2d1d3f1c2cacaf10c1c0a8b811a55 Mon Sep 17 00:00:00 2001 From: Anix Date: Mon, 25 May 2020 07:55:48 +0000 Subject: [PATCH 2/4] Chore: added some tests --- tests/lib/rules/no-unused-vars.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/lib/rules/no-unused-vars.js b/tests/lib/rules/no-unused-vars.js index da5599f3676..2ec382b95df 100644 --- a/tests/lib/rules/no-unused-vars.js +++ b/tests/lib/rules/no-unused-vars.js @@ -1050,6 +1050,33 @@ ruleTester.run("no-unused-vars", rule, { code: "const a = () => () => { a(); };", parserOptions: { ecmaVersion: 2015 }, errors: [{ ...assignedError("a"), line: 1, column: 25 }] + }, + { + + code: `let a = 'a'; + a = 10; + function foo(){ + a = 11; + a = () => { + a = 13 + } + }`, + parserOptions: { ecmaVersion: 2020 }, + errors: [{ ...definedError("foo"), line: 3, column: 22 }, { ...assignedError("a"), line: 6, column: 21 }] + }, + { + code: `let c = 'c' +c = 10 +function foo1() { + c = 11 + c = () => { + c = 13 + } +} + +c = foo1`, + parserOptions: { ecmaVersion: 2020 }, + errors: [{ ...assignedError("c"), line: 10, column: 1 }] } ] }); From f328fc6f6ea06928d63520fdc487a1a6564770a9 Mon Sep 17 00:00:00 2001 From: Anix Date: Mon, 25 May 2020 08:17:36 +0000 Subject: [PATCH 3/4] Chore: fixed no-unused loc for linter tests --- tests/lib/linter/linter.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/lib/linter/linter.js b/tests/lib/linter/linter.js index f2efc00c946..093ebcfaf70 100644 --- a/tests/lib/linter/linter.js +++ b/tests/lib/linter/linter.js @@ -3918,9 +3918,9 @@ var a = "test2"; messages, [{ column: 25, - endLine: 3, + endLine: 4, endColumn: 28, - line: 3, + line: 4, message: "'aaa' is assigned a value but never used.", messageId: "unusedVar", nodeType: "Identifier", @@ -3966,9 +3966,9 @@ var a = "test2"; messages, [{ column: 25, - endLine: 2, + endLine: 3, endColumn: 28, - line: 2, + line: 3, message: "'aaa' is assigned a value but never used.", messageId: "unusedVar", nodeType: "Identifier", @@ -3989,9 +3989,9 @@ var a = "test2"; messages, [{ column: 25, - endLine: 2, + endLine: 3, endColumn: 28, - line: 2, + line: 3, message: "'aaa' is assigned a value but never used.", messageId: "unusedVar", nodeType: "Identifier", @@ -4014,9 +4014,9 @@ var a = "test2"; messages, [{ column: 25, - endLine: 3, + endLine: 5, endColumn: 28, - line: 3, + line: 5, message: "'aaa' is assigned a value but never used.", messageId: "unusedVar", nodeType: "Identifier", @@ -4039,9 +4039,9 @@ var a = "test2"; messages, [{ column: 25, - endLine: 3, + endLine: 5, endColumn: 28, - line: 3, + line: 5, message: "'aaa' is assigned a value but never used.", messageId: "unusedVar", nodeType: "Identifier", From 695e64ce1a6afd30e7a0a0154a25a1298a7f0a99 Mon Sep 17 00:00:00 2001 From: Anix Date: Tue, 26 May 2020 07:16:47 +0000 Subject: [PATCH 4/4] Update: refactored code using ternary exp --- lib/rules/no-unused-vars.js | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/lib/rules/no-unused-vars.js b/lib/rules/no-unused-vars.js index df9f9038e25..50dcab45fe2 100644 --- a/lib/rules/no-unused-vars.js +++ b/lib/rules/no-unused-vars.js @@ -618,26 +618,15 @@ module.exports = { // Report the first declaration. if (unusedVar.defs.length > 0) { - if (unusedVar.references.length > 0) { - context.report({ - node: - unusedVar.references[ - unusedVar.references.length - 1 - ].identifier, - messageId: "unusedVar", - data: unusedVar.references.some(ref => ref.isWrite()) - ? getAssignedMessageData(unusedVar) - : getDefinedMessageData(unusedVar) - }); - } else { - context.report({ - node: unusedVar.identifiers[0], - messageId: "unusedVar", - data: unusedVar.references.some(ref => ref.isWrite()) - ? getAssignedMessageData(unusedVar) - : getDefinedMessageData(unusedVar) - }); - } + context.report({ + node: unusedVar.references.length ? unusedVar.references[ + unusedVar.references.length - 1 + ].identifier : unusedVar.identifiers[0], + messageId: "unusedVar", + data: unusedVar.references.some(ref => ref.isWrite()) + ? getAssignedMessageData(unusedVar) + : getDefinedMessageData(unusedVar) + }); // If there are no regular declaration, report the first `/*globals*/` comment directive. } else if (unusedVar.eslintExplicitGlobalComments) {