Add more parser test cases (#11923)
* remove unused codes * refactor: remove unused parseAccessModifier * refactor: remove redundant async function checks * refactor: remove redundant class check in checkExport * add more parser test cases * Update packages/babel-parser/src/parser/statement.js Co-authored-by: Brian Ng <bng412@gmail.com> * chore: add sourceType: unambiguous test Co-authored-by: Brian Ng <bng412@gmail.com>
This commit is contained in:
parent
9c565a97d5
commit
66c6b3b949
@ -1258,20 +1258,6 @@ export default class StatementParser extends ExpressionParser {
|
||||
return this.finishNode(classBody, "ClassBody");
|
||||
}
|
||||
|
||||
// Check grammar production:
|
||||
// IdentifierName *_opt ClassElementName
|
||||
// It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors
|
||||
maybeClassModifier(prop: N.ObjectProperty): boolean {
|
||||
return (
|
||||
!prop.computed &&
|
||||
prop.key.type === "Identifier" &&
|
||||
(this.isLiteralPropertyName() ||
|
||||
this.match(tt.bracketL) ||
|
||||
this.match(tt.star) ||
|
||||
this.match(tt.hash))
|
||||
);
|
||||
}
|
||||
|
||||
// returns true if the current identifier is a method/field name,
|
||||
// false if it is a modifier
|
||||
parseClassMemberFromModifier(
|
||||
@ -1611,11 +1597,6 @@ export default class StatementParser extends ExpressionParser {
|
||||
methodOrProp: N.ClassMethod | N.ClassProperty,
|
||||
): void {}
|
||||
|
||||
// Overridden in typescript.js
|
||||
parseAccessModifier(): ?N.Accessibility {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
parseClassPrivateProperty(
|
||||
node: N.ClassPrivateProperty,
|
||||
): N.ClassPrivateProperty {
|
||||
@ -1784,19 +1765,9 @@ export default class StatementParser extends ExpressionParser {
|
||||
|
||||
maybeParseExportDeclaration(node: N.Node): boolean {
|
||||
if (this.shouldParseExportDeclaration()) {
|
||||
if (this.isContextual("async")) {
|
||||
const next = this.nextTokenStart();
|
||||
|
||||
// export async;
|
||||
if (!this.isUnparsedContextual(next, "function")) {
|
||||
this.unexpected(next, tt._function);
|
||||
}
|
||||
}
|
||||
|
||||
node.specifiers = [];
|
||||
node.source = null;
|
||||
node.declaration = this.parseExportDeclaration(node);
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -1999,15 +1970,10 @@ export default class StatementParser extends ExpressionParser {
|
||||
const currentContextDecorators = this.state.decoratorStack[
|
||||
this.state.decoratorStack.length - 1
|
||||
];
|
||||
// If node.declaration is a class, it will take all decorators in the current context.
|
||||
// Thus we should throw if we see non-empty decorators here.
|
||||
if (currentContextDecorators.length) {
|
||||
const isClass =
|
||||
node.declaration &&
|
||||
(node.declaration.type === "ClassDeclaration" ||
|
||||
node.declaration.type === "ClassExpression");
|
||||
if (!node.declaration || !isClass) {
|
||||
throw this.raise(node.start, Errors.UnsupportedDecoratorExport);
|
||||
}
|
||||
this.takeDecorators(node.declaration);
|
||||
throw this.raise(node.start, Errors.UnsupportedDecoratorExport);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
// prettier-ignore
|
||||
await +42
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"sourceType": "module"
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
{
|
||||
"type": "AwaitExpression",
|
||||
"start":19,"end":28,"loc":{"start":{"line":2,"column":0},"end":{"line":2,"column":9}},
|
||||
"argument": {
|
||||
"type": "UnaryExpression",
|
||||
"start":25,"end":28,"loc":{"start":{"line":2,"column":6},"end":{"line":2,"column":9}},
|
||||
"operator": "+",
|
||||
"prefix": true,
|
||||
"argument": {
|
||||
"type": "NumericLiteral",
|
||||
"start":26,"end":28,"loc":{"start":{"line":2,"column":7},"end":{"line":2,"column":9}},
|
||||
"extra": {
|
||||
"rawValue": 42,
|
||||
"raw": "42"
|
||||
},
|
||||
"value": 42
|
||||
}
|
||||
},
|
||||
"leadingComments": [
|
||||
{
|
||||
"type": "CommentLine",
|
||||
"value": " prettier-ignore",
|
||||
"start":0,"end":18,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}}
|
||||
}
|
||||
],
|
||||
"comments": [
|
||||
{
|
||||
"type": "CommentLine",
|
||||
"value": " prettier-ignore",
|
||||
"start":0,"end":18,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"plugins": ["topLevelAwait"]
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
// prettier-ignore
|
||||
await +42
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"sourceType": "script"
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
{
|
||||
"type": "BinaryExpression",
|
||||
"start":19,"end":28,"loc":{"start":{"line":2,"column":0},"end":{"line":2,"column":9}},
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"start":19,"end":24,"loc":{"start":{"line":2,"column":0},"end":{"line":2,"column":5},"identifierName":"await"},
|
||||
"name": "await"
|
||||
},
|
||||
"operator": "+",
|
||||
"right": {
|
||||
"type": "NumericLiteral",
|
||||
"start":26,"end":28,"loc":{"start":{"line":2,"column":7},"end":{"line":2,"column":9}},
|
||||
"extra": {
|
||||
"rawValue": 42,
|
||||
"raw": "42"
|
||||
},
|
||||
"value": 42
|
||||
},
|
||||
"leadingComments": [
|
||||
{
|
||||
"type": "CommentLine",
|
||||
"value": " prettier-ignore",
|
||||
"start":0,"end":18,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}}
|
||||
}
|
||||
],
|
||||
"comments": [
|
||||
{
|
||||
"type": "CommentLine",
|
||||
"value": " prettier-ignore",
|
||||
"start":0,"end":18,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}}
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
// prettier-ignore
|
||||
await +42
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"sourceType": "unambiguous"
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
{
|
||||
"type": "BinaryExpression",
|
||||
"start":19,"end":28,"loc":{"start":{"line":2,"column":0},"end":{"line":2,"column":9}},
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"start":19,"end":24,"loc":{"start":{"line":2,"column":0},"end":{"line":2,"column":5},"identifierName":"await"},
|
||||
"name": "await"
|
||||
},
|
||||
"operator": "+",
|
||||
"right": {
|
||||
"type": "NumericLiteral",
|
||||
"start":26,"end":28,"loc":{"start":{"line":2,"column":7},"end":{"line":2,"column":9}},
|
||||
"extra": {
|
||||
"rawValue": 42,
|
||||
"raw": "42"
|
||||
},
|
||||
"value": 42
|
||||
},
|
||||
"leadingComments": [
|
||||
{
|
||||
"type": "CommentLine",
|
||||
"value": " prettier-ignore",
|
||||
"start":0,"end":18,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}}
|
||||
}
|
||||
],
|
||||
"comments": [
|
||||
{
|
||||
"type": "CommentLine",
|
||||
"value": " prettier-ignore",
|
||||
"start":0,"end":18,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}}
|
||||
}
|
||||
]
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/es2015/destructuring/invalid-object-method/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/es2015/destructuring/invalid-object-method/input.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
const { foo() {} } = foo();
|
||||
3
packages/babel-parser/test/fixtures/es2015/destructuring/invalid-object-method/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/es2015/destructuring/invalid-object-method/options.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token (1:11)"
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/es2020/export-ns-from/ns-dangling-comma/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/es2020/export-ns-from/ns-dangling-comma/input.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
export * as foo,
|
||||
3
packages/babel-parser/test/fixtures/es2020/export-ns-from/ns-dangling-comma/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/es2020/export-ns-from/ns-dangling-comma/options.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \"{\" (1:16)"
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
::a?.b;
|
||||
@ -0,0 +1,6 @@
|
||||
{
|
||||
"plugins": [
|
||||
"functionBind"
|
||||
],
|
||||
"throws": "Binding should be performed on object property. (1:2)"
|
||||
}
|
||||
3
packages/babel-parser/test/fixtures/experimental/bind-operator/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/experimental/bind-operator/options.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"plugins": ["functionBind"]
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
({ @foo ...foo });
|
||||
@ -0,0 +1,4 @@
|
||||
{
|
||||
"plugins": ["decorators-legacy"],
|
||||
"throws": "Unexpected token (1:8)"
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
export default,
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token, expected \"{\" (1:15)"
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
x |> # + 1
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"plugins": [["pipelineOperator", { "proposal": "fsharp" }]]
|
||||
}
|
||||
@ -0,0 +1,49 @@
|
||||
{
|
||||
"type": "File",
|
||||
"start":0,"end":10,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},
|
||||
"errors": [
|
||||
"SyntaxError: Primary Topic Reference found but pipelineOperator not passed 'smart' for 'proposal' option. (1:5)",
|
||||
"SyntaxError: Topic reference was used in a lexical context without topic binding (1:5)"
|
||||
],
|
||||
"program": {
|
||||
"type": "Program",
|
||||
"start":0,"end":10,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},
|
||||
"sourceType": "script",
|
||||
"interpreter": null,
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"start":0,"end":10,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"start":0,"end":10,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}},
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"start":0,"end":1,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":1},"identifierName":"x"},
|
||||
"name": "x"
|
||||
},
|
||||
"operator": "|>",
|
||||
"right": {
|
||||
"type": "BinaryExpression",
|
||||
"start":5,"end":10,"loc":{"start":{"line":1,"column":5},"end":{"line":1,"column":10}},
|
||||
"left": {
|
||||
"type": "PipelinePrimaryTopicReference",
|
||||
"start":5,"end":6,"loc":{"start":{"line":1,"column":5},"end":{"line":1,"column":6}}
|
||||
},
|
||||
"operator": "+",
|
||||
"right": {
|
||||
"type": "NumericLiteral",
|
||||
"start":9,"end":10,"loc":{"start":{"line":1,"column":9},"end":{"line":1,"column":10}},
|
||||
"extra": {
|
||||
"rawValue": 1,
|
||||
"raw": "1"
|
||||
},
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"directives": []
|
||||
}
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
#{ __proto__: null }
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"plugins": [["recordAndTuple", { "syntaxType": "hash" }]]
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
{
|
||||
"type": "File",
|
||||
"start":0,"end":20,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":20}},
|
||||
"errors": [
|
||||
"SyntaxError: '__proto__' is not allowed in Record expressions (1:3)"
|
||||
],
|
||||
"program": {
|
||||
"type": "Program",
|
||||
"start":0,"end":20,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":20}},
|
||||
"sourceType": "script",
|
||||
"interpreter": null,
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"start":0,"end":20,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":20}},
|
||||
"expression": {
|
||||
"type": "RecordExpression",
|
||||
"start":0,"end":20,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":20}},
|
||||
"properties": [
|
||||
{
|
||||
"type": "ObjectProperty",
|
||||
"start":3,"end":18,"loc":{"start":{"line":1,"column":3},"end":{"line":1,"column":18}},
|
||||
"method": false,
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"start":3,"end":12,"loc":{"start":{"line":1,"column":3},"end":{"line":1,"column":12},"identifierName":"__proto__"},
|
||||
"name": "__proto__"
|
||||
},
|
||||
"computed": false,
|
||||
"shorthand": false,
|
||||
"value": {
|
||||
"type": "NullLiteral",
|
||||
"start":14,"end":18,"loc":{"start":{"line":1,"column":14},"end":{"line":1,"column":18}}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"directives": []
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user