fix(typescript): handle ObjectPattern instead of ObjectExpression inside BinaryExpression, fixes #2237 (#2238)

master
Lucas Azzola 2017-06-24 00:53:42 +10:00 committed by Christopher Chedeau
parent b2d5366897
commit 3474056b36
7 changed files with 26 additions and 10 deletions

View File

@ -315,6 +315,9 @@ function getPrecedence(op) {
function startsWithNoLookaheadToken(node, forbidFunctionAndClass) {
node = getLeftMost(node);
switch (node.type) {
// Hack. Remove after https://github.com/eslint/typescript-eslint-parser/issues/331
case "ObjectPattern":
return !forbidFunctionAndClass;
case "FunctionExpression":
case "ClassExpression":
return forbidFunctionAndClass;

View File

@ -22,17 +22,16 @@ a = () => ({} = 0);
a = () => ({}, a);
a => a instanceof {};
a => ({}().b && 0)
a => ({}::b()\`\`[''].c++ && 0 ? 0 : 0)
a => ({}().c = 0)
x => ({}()())
x => ({}()\`\`)
x => ({}().b);
(a => b)::c;
a::(b => c);
a = b => c;
a = (b?) => c;
x => (y = z);
x => (y += z);
f(a => ({})) + 1;
(a => ({})) || 0;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(a => {}).length;
typeof (() => {});
@ -56,17 +55,16 @@ a = () => ({} = 0);
a = () => ({}, a);
a => a instanceof {};
a => ({}().b && 0);
a => ({}::b()\`\`[""].c++ && 0 ? 0 : 0);
a => ({}().c = 0);
x => ({}()());
x => ({}()\`\`);
x => ({}().b);
(a => b)::c;
a::(b => c);
a = b => c;
a = (b?) => c;
x => (y = z);
x => (y += z);
f(a => ({})) + 1;
(a => ({})) || 0;
`;

View File

@ -19,14 +19,13 @@ a = () => ({} = 0);
a = () => ({}, a);
a => a instanceof {};
a => ({}().b && 0)
a => ({}::b()``[''].c++ && 0 ? 0 : 0)
a => ({}().c = 0)
x => ({}()())
x => ({}()``)
x => ({}().b);
(a => b)::c;
a::(b => c);
a = b => c;
a = (b?) => c;
x => (y = z);
x => (y += z);
f(a => ({})) + 1;
(a => ({})) || 0;

View File

@ -1 +1 @@
run_spec(__dirname, { parser: "babylon" });
run_spec(__dirname, { parser: "babylon" }, ["typescript"]);

View File

@ -0,0 +1,12 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`arrows-bind.js 1`] = `
a => ({}::b()\`\`[''].c++ && 0 ? 0 : 0);
(a => b)::c;
a::(b => c);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a => ({}::b()\`\`[""].c++ && 0 ? 0 : 0);
(a => b)::c;
a::(b => c);
`;

View File

@ -0,0 +1,3 @@
a => ({}::b()``[''].c++ && 0 ? 0 : 0);
(a => b)::c;
a::(b => c);

View File

@ -0,0 +1 @@
run_spec(__dirname, { parser: "babylon" });