From d9bf8d252e54972c0bcb673db303ead2dceb1d87 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Mon, 6 Jul 2015 09:36:34 -0400 Subject: [PATCH] fix no-unused-vars issue with spread Use a private _spread property on Property node instead of SpreadProperty Fixes https://github.com/babel/babel-eslint/issues/142#issuecomment-118707124 --- eslint/babel-eslint-parser/acorn-to-esprima.js | 4 +++- eslint/babel-eslint-parser/index.js | 2 +- eslint/babel-eslint-parser/test/non-regression.js | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/eslint/babel-eslint-parser/acorn-to-esprima.js b/eslint/babel-eslint-parser/acorn-to-esprima.js index 8681d04e5d..d1e1d8151c 100644 --- a/eslint/babel-eslint-parser/acorn-to-esprima.js +++ b/eslint/babel-eslint-parser/acorn-to-esprima.js @@ -172,7 +172,9 @@ var astTransformVisitor = { noScope: true, exit: function (node) { /* parent */ if (this.isSpreadProperty()) { - node.type = "SpreadProperty"; + // private var to track if it's a spread property + node._spread = true; + node.type = "Property"; node.kind = "init"; node.computed = true; node.key = node.value = node.argument; diff --git a/eslint/babel-eslint-parser/index.js b/eslint/babel-eslint-parser/index.js index e37e5417e3..7a755aaeb9 100644 --- a/eslint/babel-eslint-parser/index.js +++ b/eslint/babel-eslint-parser/index.js @@ -266,7 +266,7 @@ function monkeypatch() { if (id.type === "ObjectPattern") { // check if object destructuring has a spread var hasSpread = id.properties.filter(function(p) { - return p.type === "SpreadProperty" + return p._spread === true; }); // visit properties if so if (hasSpread.length > 0) { diff --git a/eslint/babel-eslint-parser/test/non-regression.js b/eslint/babel-eslint-parser/test/non-regression.js index 553594df77..ed857f0e2a 100644 --- a/eslint/babel-eslint-parser/test/non-regression.js +++ b/eslint/babel-eslint-parser/test/non-regression.js @@ -1179,4 +1179,18 @@ describe("verify", function () { [ "1:7 Bacona is defined but never used no-unused-vars" ] ); }); + + it("don't warn no-unused-vars with spread #142", function () { + verifyAndAssertMessages([ + "export default function test(data) {", + "return {", + "foo: 'bar',", + "...data", + "};", + "}", + ].join("\n"), + { "no-undef": 1, "no-unused-vars": 1 }, + [] + ); + }); });