Skip to content

Commit

Permalink
simplify toAssignable
Browse files Browse the repository at this point in the history
  • Loading branch information
JLHwung committed Nov 7, 2020
1 parent 4ce5457 commit ac81ee8
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 27 deletions.
6 changes: 0 additions & 6 deletions packages/babel-parser/src/parser/expression.js
Expand Up @@ -1409,12 +1409,6 @@ export default class ExpressionParser extends LValParser {
) {
this.expressionScope.validateAsPattern();
this.expressionScope.exit();
for (const param of exprList) {
if (param.extra && param.extra.parenthesized) {
this.unexpected(param.extra.parenStart);
}
}

this.parseArrowExpression(arrowNode, exprList, false);
return arrowNode;
}
Expand Down
20 changes: 10 additions & 10 deletions packages/babel-parser/src/parser/lval.js
Expand Up @@ -98,7 +98,7 @@ export default class LValParser extends NodeUtils {
) {
const prop = node.properties[i];
const isLast = i === last;
this.toAssignableObjectExpressionProp(prop, isLast, isLHS);
this.toAssignableObjectExpressionProp(prop, isLast);

if (
isLast &&
Expand All @@ -111,7 +111,8 @@ export default class LValParser extends NodeUtils {
break;

case "ObjectProperty":
this.toAssignable(node.value, isLHS);
// ObjectProperty is not allowed in LHS
this.toAssignable(node.value, /* isLHS */ false);
break;

case "SpreadElement": {
Expand All @@ -135,7 +136,8 @@ export default class LValParser extends NodeUtils {

node.type = "AssignmentPattern";
delete node.operator;
this.toAssignable(node.left, isLHS);
// AssignmentPattern is not allowed in LHS
this.toAssignable(node.left, /* isLHS */ false);
break;

case "ParenthesizedExpression":
Expand All @@ -149,11 +151,7 @@ export default class LValParser extends NodeUtils {
return node;
}

toAssignableObjectExpressionProp(
prop: Node,
isLast: boolean,
isLHS: boolean,
) {
toAssignableObjectExpressionProp(prop: Node, isLast: boolean) {
if (prop.type === "ObjectMethod") {
const error =
prop.kind === "get" || prop.kind === "set"
Expand All @@ -166,7 +164,8 @@ export default class LValParser extends NodeUtils {
} else if (prop.type === "SpreadElement" && !isLast) {
this.raiseRestNotLast(prop.start);
} else {
this.toAssignable(prop, isLHS);
// ObjectPattern is not allowed in LHS
this.toAssignable(prop);
}
}

Expand All @@ -184,8 +183,9 @@ export default class LValParser extends NodeUtils {
--end;
} else if (last?.type === "SpreadElement") {
last.type = "RestElement";
const arg = last.argument;
let arg = last.argument;
this.toAssignable(arg, isLHS);
arg = unwrapParenthesizedExpression(arg);
if (
arg.type !== "Identifier" &&
arg.type !== "MemberExpression" &&
Expand Down
8 changes: 2 additions & 6 deletions packages/babel-parser/src/plugins/estree.js
Expand Up @@ -351,17 +351,13 @@ export default (superClass: Class<Parser>): Class<Parser> =>
return super.toAssignable(node, isLHS);
}

toAssignableObjectExpressionProp(
prop: N.Node,
isLast: boolean,
isLHS: boolean,
) {
toAssignableObjectExpressionProp(prop: N.Node, isLast: boolean) {
if (prop.kind === "get" || prop.kind === "set") {
throw this.raise(prop.key.start, Errors.PatternHasAccessor);
} else if (prop.method) {
throw this.raise(prop.key.start, Errors.PatternHasMethod);
} else {
super.toAssignableObjectExpressionProp(prop, isLast, isLHS);
super.toAssignableObjectExpressionProp(prop, isLast);
}
}

Expand Down
10 changes: 5 additions & 5 deletions packages/babel-parser/src/plugins/typescript/index.js
Expand Up @@ -2596,19 +2596,19 @@ export default (superClass: Class<Parser>): Class<Parser> =>
return param;
}

toAssignable(node: N.Node): N.Node {
toAssignable(node: N.Node, isLHS: boolean = false): N.Node {
switch (node.type) {
case "TSTypeCastExpression":
return super.toAssignable(this.typeCastToParameter(node));
return super.toAssignable(this.typeCastToParameter(node), isLHS);
case "TSParameterProperty":
return super.toAssignable(node);
return super.toAssignable(node, isLHS);
case "TSAsExpression":
case "TSNonNullExpression":
case "TSTypeAssertion":
node.expression = this.toAssignable(node.expression);
node.expression = this.toAssignable(node.expression, isLHS);
return node;
default:
return super.toAssignable(node);
return super.toAssignable(node, isLHS);
}
}

Expand Down

0 comments on commit ac81ee8

Please sign in to comment.