Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(ts): parenthesized assert and assign #12933

Merged
merged 3 commits into from Mar 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
15 changes: 15 additions & 0 deletions packages/babel-parser/src/plugins/typescript/index.js
Expand Up @@ -2680,6 +2680,8 @@ export default (superClass: Class<Parser>): Class<Parser> =>
return super.toAssignable(this.typeCastToParameter(node), isLHS);
case "TSParameterProperty":
return super.toAssignable(node, isLHS);
case "ParenthesizedExpression":
fedeci marked this conversation as resolved.
Show resolved Hide resolved
return this.toAssignableParenthesizedExpression(node, isLHS);
case "TSAsExpression":
case "TSNonNullExpression":
case "TSTypeAssertion":
Expand All @@ -2690,6 +2692,19 @@ export default (superClass: Class<Parser>): Class<Parser> =>
}
}

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

checkLVal(
expr: N.Expression,
contextDescription: string,
Expand Down
@@ -0,0 +1 @@
({}) = x
@@ -0,0 +1,3 @@
{
"createParenthesizedExpressions": true
}
@@ -0,0 +1,39 @@
{
"type": "File",
"start":0,"end":8,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":8}},
"errors": [
"SyntaxError: Invalid parenthesized assignment pattern (1:0)"
],
"program": {
"type": "Program",
"start":0,"end":8,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":8}},
"sourceType": "module",
"interpreter": null,
"body": [
{
"type": "ExpressionStatement",
"start":0,"end":8,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":8}},
"expression": {
"type": "AssignmentExpression",
"start":0,"end":8,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":8}},
"operator": "=",
"left": {
"type": "ParenthesizedExpression",
"start":0,"end":4,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":4}},
"expression": {
"type": "ObjectPattern",
"start":1,"end":3,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":3}},
"properties": []
}
},
"right": {
"type": "Identifier",
"start":7,"end":8,"loc":{"start":{"line":1,"column":7},"end":{"line":1,"column":8},"identifierName":"x"},
"name": "x"
}
}
}
],
"directives": []
}
}
@@ -0,0 +1 @@
((a as any) as string) = null
@@ -0,0 +1,3 @@
{
"createParenthesizedExpressions": true
}
@@ -0,0 +1,55 @@
{
"type": "File",
"start":0,"end":29,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":29}},
"program": {
"type": "Program",
"start":0,"end":29,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":29}},
"sourceType": "module",
"interpreter": null,
"body": [
{
"type": "ExpressionStatement",
"start":0,"end":29,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":29}},
"expression": {
"type": "AssignmentExpression",
"start":0,"end":29,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":29}},
"operator": "=",
"left": {
"type": "ParenthesizedExpression",
"start":0,"end":22,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":22}},
"expression": {
"type": "TSAsExpression",
"start":1,"end":21,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":21}},
"expression": {
"type": "ParenthesizedExpression",
"start":1,"end":11,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":11}},
"expression": {
"type": "TSAsExpression",
"start":2,"end":10,"loc":{"start":{"line":1,"column":2},"end":{"line":1,"column":10}},
"expression": {
"type": "Identifier",
"start":2,"end":3,"loc":{"start":{"line":1,"column":2},"end":{"line":1,"column":3},"identifierName":"a"},
"name": "a"
},
"typeAnnotation": {
"type": "TSAnyKeyword",
"start":7,"end":10,"loc":{"start":{"line":1,"column":7},"end":{"line":1,"column":10}}
}
}
},
"typeAnnotation": {
"type": "TSStringKeyword",
"start":15,"end":21,"loc":{"start":{"line":1,"column":15},"end":{"line":1,"column":21}}
}
}
},
"right": {
"type": "NullLiteral",
"start":25,"end":29,"loc":{"start":{"line":1,"column":25},"end":{"line":1,"column":29}}
}
}
}
],
"directives": []
}
}
@@ -0,0 +1 @@
(a as number) = 42;
@@ -0,0 +1,3 @@
{
"createParenthesizedExpressions": true
}
@@ -0,0 +1,48 @@
{
"type": "File",
"start":0,"end":19,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":19}},
"program": {
"type": "Program",
"start":0,"end":19,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":19}},
"sourceType": "module",
"interpreter": null,
"body": [
{
"type": "ExpressionStatement",
"start":0,"end":19,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":19}},
"expression": {
"type": "AssignmentExpression",
"start":0,"end":18,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}},
"operator": "=",
"left": {
"type": "ParenthesizedExpression",
"start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}},
"expression": {
"type": "TSAsExpression",
"start":1,"end":12,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":12}},
"expression": {
"type": "Identifier",
"start":1,"end":2,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":2},"identifierName":"a"},
"name": "a"
},
"typeAnnotation": {
"type": "TSNumberKeyword",
"start":6,"end":12,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":12}}
}
}
},
"right": {
"type": "NumericLiteral",
"start":16,"end":18,"loc":{"start":{"line":1,"column":16},"end":{"line":1,"column":18}},
"extra": {
"rawValue": 42,
"raw": "42"
},
"value": 42
}
}
}
],
"directives": []
}
}
@@ -0,0 +1 @@
(a as any) = null
@@ -0,0 +1,3 @@
{
"createParenthesizedExpressions": true
}
@@ -0,0 +1,43 @@
{
"type": "File",
"start":0,"end":17,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":17}},
"program": {
"type": "Program",
"start":0,"end":17,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":17}},
"sourceType": "module",
"interpreter": null,
"body": [
{
"type": "ExpressionStatement",
"start":0,"end":17,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":17}},
"expression": {
"type": "AssignmentExpression",
"start":0,"end":17,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":17}},
"operator": "=",
"left": {
"type": "ParenthesizedExpression",
"start":0,"end":10,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},
"expression": {
"type": "TSAsExpression",
"start":1,"end":9,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":9}},
"expression": {
"type": "Identifier",
"start":1,"end":2,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":2},"identifierName":"a"},
"name": "a"
},
"typeAnnotation": {
"type": "TSAnyKeyword",
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9}}
}
}
},
"right": {
"type": "NullLiteral",
"start":13,"end":17,"loc":{"start":{"line":1,"column":13},"end":{"line":1,"column":17}}
}
}
}
],
"directives": []
}
}
@@ -0,0 +1 @@
(x!) = null;
@@ -0,0 +1,3 @@
{
"createParenthesizedExpressions": true
}
@@ -0,0 +1,39 @@
{
"type": "File",
"start":0,"end":12,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":12}},
"program": {
"type": "Program",
"start":0,"end":12,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":12}},
"sourceType": "module",
"interpreter": null,
"body": [
{
"type": "ExpressionStatement",
"start":0,"end":12,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":12}},
"expression": {
"type": "AssignmentExpression",
"start":0,"end":11,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":11}},
"operator": "=",
"left": {
"type": "ParenthesizedExpression",
"start":0,"end":4,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":4}},
"expression": {
"type": "TSNonNullExpression",
"start":1,"end":3,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":3}},
"expression": {
"type": "Identifier",
"start":1,"end":2,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":2},"identifierName":"x"},
"name": "x"
}
}
},
"right": {
"type": "NullLiteral",
"start":7,"end":11,"loc":{"start":{"line":1,"column":7},"end":{"line":1,"column":11}}
}
}
}
],
"directives": []
}
}
@@ -0,0 +1 @@
(<number>x) = null
@@ -0,0 +1,3 @@
{
"createParenthesizedExpressions": true
}
@@ -0,0 +1,43 @@
{
"type": "File",
"start":0,"end":18,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}},
"program": {
"type": "Program",
"start":0,"end":18,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}},
"sourceType": "module",
"interpreter": null,
"body": [
{
"type": "ExpressionStatement",
"start":0,"end":18,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}},
"expression": {
"type": "AssignmentExpression",
"start":0,"end":18,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}},
"operator": "=",
"left": {
"type": "ParenthesizedExpression",
"start":0,"end":11,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":11}},
"expression": {
"type": "TSTypeAssertion",
"start":1,"end":10,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":10}},
"typeAnnotation": {
"type": "TSNumberKeyword",
"start":2,"end":8,"loc":{"start":{"line":1,"column":2},"end":{"line":1,"column":8}}
},
"expression": {
"type": "Identifier",
"start":9,"end":10,"loc":{"start":{"line":1,"column":9},"end":{"line":1,"column":10},"identifierName":"x"},
"name": "x"
}
}
},
"right": {
"type": "NullLiteral",
"start":14,"end":18,"loc":{"start":{"line":1,"column":14},"end":{"line":1,"column":18}}
}
}
}
],
"directives": []
}
}