diff --git a/lib/rules/no-unused-vars.js b/lib/rules/no-unused-vars.js index 3ff9bc64ff2..3ed278d54dc 100644 --- a/lib/rules/no-unused-vars.js +++ b/lib/rules/no-unused-vars.js @@ -513,7 +513,7 @@ module.exports = { } // if "args" option is "after-used", skip all but the last parameter - if (config.args === "after-used" && !isLastInNonIgnoredParameters(variable)) { + if (config.args === "after-used" && astUtils.isFunction(def.name.parent) && !isLastInNonIgnoredParameters(variable)) { continue; } } else { diff --git a/tests/lib/rules/no-unused-vars.js b/tests/lib/rules/no-unused-vars.js index a966ebb101e..e2ab90b8cf0 100644 --- a/tests/lib/rules/no-unused-vars.js +++ b/tests/lib/rules/no-unused-vars.js @@ -609,6 +609,54 @@ ruleTester.run("no-unused-vars", rule, { { code: "/*global\rfoo*/", errors: [{ message: "'foo' is defined but never used.", line: 2, column: 1 }] + }, + + // https://github.com/eslint/eslint/issues/8442 + { + code: "(function ({ a }, b ) { return b; })();", + parserOptions: { ecmaVersion: 2015 }, + errors: [ + "'a' is defined but never used." + ] + }, + { + code: "(function ({ a }, { b, c } ) { return b; })();", + parserOptions: { ecmaVersion: 2015 }, + errors: [ + "'a' is defined but never used.", + "'c' is defined but never used." + ] + }, + { + code: "(function ({ a, b }, { c } ) { return b; })();", + parserOptions: { ecmaVersion: 2015 }, + errors: [ + "'a' is defined but never used.", + "'c' is defined but never used." + ] + }, + { + code: "(function ([ a ], b ) { return b; })();", + parserOptions: { ecmaVersion: 2015 }, + errors: [ + "'a' is defined but never used." + ] + }, + { + code: "(function ([ a ], [ b, c ] ) { return b; })();", + parserOptions: { ecmaVersion: 2015 }, + errors: [ + "'a' is defined but never used.", + "'c' is defined but never used." + ] + }, + { + code: "(function ([ a, b ], [ c ] ) { return b; })();", + parserOptions: { ecmaVersion: 2015 }, + errors: [ + "'a' is defined but never used.", + "'c' is defined but never used." + ] } ] });