From 828fdc8769a714cd9240ffc1e950d3cf64e2cf2f Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 13 Apr 2015 16:40:13 -0700 Subject: [PATCH] make illegal LHS pattern error messages more user friendly --- src/acorn/src/expression.js | 12 ++++++++++-- test/acorn/tests-babel.js | 4 ++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/acorn/src/expression.js b/src/acorn/src/expression.js index 998864d077..3540956fe3 100755 --- a/src/acorn/src/expression.js +++ b/src/acorn/src/expression.js @@ -103,8 +103,16 @@ pp.parseMaybeAssign = function(noIn, refShorthandDefaultPos, afterLeftParse) { node.left = this.type === tt.eq ? this.toAssignable(left) : left refShorthandDefaultPos.start = 0 // reset because shorthand default was used correctly this.checkLVal(left) - if (left.parenthesizedExpression && (left.type === "ObjectPattern" || left.type === "ArrayPattern")) { - this.raise(left.start, "You're trying to assign to a parenthesized expression, instead of `({ foo }) = {}` use `({ foo } = {})`"); + if (left.parenthesizedExpression) { + let errorMsg + if (left.type === "ObjectPattern") { + errorMsg = "`({a}) = 0` use `({a} = 0)`" + } else if (left.type === "ArrayPattern") { + errorMsg = "`([a]) = 0` use `([a] = 0)`" + } + if (errorMsg) { + this.raise(left.start, `You're trying to assign to a parenthesized expression, eg. instead of ${errorMsg}`) + } } this.next() node.right = this.parseMaybeAssign(noIn) diff --git a/test/acorn/tests-babel.js b/test/acorn/tests-babel.js index ef99afd578..ad8d7b3a16 100644 --- a/test/acorn/tests-babel.js +++ b/test/acorn/tests-babel.js @@ -2,11 +2,11 @@ var test = require("./driver.js").test; var testFail = require("./driver.js").testFail; var testAssert = require("./driver.js").testAssert; -testFail("({a}) = 2;", "You're trying to assign to a parenthesized expression, instead of `({ foo }) = {}` use `({ foo } = {})` (1:1)", { +testFail("({a}) = 2;", "You're trying to assign to a parenthesized expression, eg. instead of `({a}) = 0` use `({a} = {})` (1:1)", { ecmaVersion: 6 }); -testFail("([a]) = 2;", "You're trying to assign to a parenthesized expression, instead of `({ foo }) = {}` use `({ foo } = {})` (1:1)", { +testFail("([a]) = 2;", "You're trying to assign to a parenthesized expression, eg. instead of `([a]) = 0` use `([a] = {})` (1:1)", { ecmaVersion: 6 });