From 6c3d7e424a75b0d70b6b84edc8f2b25aab1c315c Mon Sep 17 00:00:00 2001 From: Toru Nagashima Date: Sat, 25 Jul 2015 01:47:55 +0900 Subject: [PATCH] Fix: traverse `ExperimentalSpread/RestProperty.argument` (fixes #3157) --- lib/eslint.js | 4 ++++ tests/lib/rules/no-undef.js | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/eslint.js b/lib/eslint.js index 8cc08c09571..c0ae9547e50 100755 --- a/lib/eslint.js +++ b/lib/eslint.js @@ -33,6 +33,10 @@ estraverse.Syntax.ExperimentalRestProperty = "ExperimentalRestProperty"; estraverse.VisitorKeys.ExperimentalSpreadProperty = ["argument"]; estraverse.VisitorKeys.ExperimentalRestProperty = ["argument"]; +// All nodes in ObjectExpression.properties and ObjectPattern.properties are visited as `Property`. +// See Also: https://github.com/estools/estraverse/blob/master/estraverse.js#L687-L688 +estraverse.VisitorKeys.Property.push("argument"); + /** * Parses a list of "name:boolean_value" or/and "name" options divided by comma or * whitespace. diff --git a/tests/lib/rules/no-undef.js b/tests/lib/rules/no-undef.js index b7e1641efc1..5a15e596707 100644 --- a/tests/lib/rules/no-undef.js +++ b/tests/lib/rules/no-undef.js @@ -71,6 +71,13 @@ eslintTester.addRuleTest("lib/rules/no-undef", { { code: "[a] = [0];", ecmaFeatures: {destructuring: true}, errors: [{ message: "\"a\" is not defined." }] }, { code: "({a}) = {};", ecmaFeatures: {destructuring: true}, errors: [{ message: "\"a\" is not defined." }] }, { code: "({b: a}) = {};", ecmaFeatures: {destructuring: true}, errors: [{ message: "\"a\" is not defined." }] }, - { code: "[obj.a, obj.b] = [0, 1];", ecmaFeatures: {destructuring: true}, errors: [{ message: "\"obj\" is not defined." }, { message: "\"obj\" is not defined." }] } + { code: "[obj.a, obj.b] = [0, 1];", ecmaFeatures: {destructuring: true}, errors: [{ message: "\"obj\" is not defined." }, { message: "\"obj\" is not defined." }] }, + + // Experimental + { + code: "const c = 0; const a = {...b, c};", + ecmaFeatures: {blockBindings: true, objectLiteralShorthandProperties: true, experimentalObjectRestSpread: true}, + errors: [{ message: "\"b\" is not defined." }] + } ] });