From e26c98f3d680c30b91e3ab899215bb8f83d399a5 Mon Sep 17 00:00:00 2001 From: sosukesuzuki Date: Sun, 20 Sep 2020 13:56:20 +0900 Subject: [PATCH 1/3] Throw a syntax error for a empty type parameter --- .../src/plugins/typescript/index.js | 4 ++ .../class/empty-type-parameters/input.ts | 1 + .../class/empty-type-parameters/output.json | 36 +++++++++++++++++ .../function/empty-type-parameters/input.ts | 1 + .../empty-type-parameters/output.json | 39 +++++++++++++++++++ 5 files changed, 81 insertions(+) create mode 100644 packages/babel-parser/test/fixtures/typescript/class/empty-type-parameters/input.ts create mode 100644 packages/babel-parser/test/fixtures/typescript/class/empty-type-parameters/output.json create mode 100644 packages/babel-parser/test/fixtures/typescript/function/empty-type-parameters/input.ts create mode 100644 packages/babel-parser/test/fixtures/typescript/function/empty-type-parameters/output.json diff --git a/packages/babel-parser/src/plugins/typescript/index.js b/packages/babel-parser/src/plugins/typescript/index.js index d2f3f334c1ff..b26ea9da6d6c 100644 --- a/packages/babel-parser/src/plugins/typescript/index.js +++ b/packages/babel-parser/src/plugins/typescript/index.js @@ -73,6 +73,7 @@ const TSErrors = Object.freeze({ "An implementation cannot be declared in ambient contexts.", DuplicateModifier: "Duplicate modifier: '%0'", EmptyHeritageClauseType: "'%0' list cannot be empty.", + EmptyTypeParameters: "Type parameter list cannot be empty.", IndexSignatureHasAbstract: "Index signatures cannot have the 'abstract' modifier", IndexSignatureHasAccessibility: @@ -403,6 +404,9 @@ export default (superClass: Class): Class => /* bracket */ false, /* skipFirstToken */ true, ); + if (node.params.length === 0) { + this.raise(node.start, TSErrors.EmptyTypeParameters); + } return this.finishNode(node, "TSTypeParameterDeclaration"); } diff --git a/packages/babel-parser/test/fixtures/typescript/class/empty-type-parameters/input.ts b/packages/babel-parser/test/fixtures/typescript/class/empty-type-parameters/input.ts new file mode 100644 index 000000000000..4f3d75967f9b --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/class/empty-type-parameters/input.ts @@ -0,0 +1 @@ +class C<> {} diff --git a/packages/babel-parser/test/fixtures/typescript/class/empty-type-parameters/output.json b/packages/babel-parser/test/fixtures/typescript/class/empty-type-parameters/output.json new file mode 100644 index 000000000000..390592c558de --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/class/empty-type-parameters/output.json @@ -0,0 +1,36 @@ +{ + "type": "File", + "start":0,"end":12,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":12}}, + "errors": [ + "SyntaxError: Type parameter list cannot be empty. (1:7)" + ], + "program": { + "type": "Program", + "start":0,"end":12,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":12}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ClassDeclaration", + "start":0,"end":12,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":12}}, + "id": { + "type": "Identifier", + "start":6,"end":7,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":7},"identifierName":"C"}, + "name": "C" + }, + "typeParameters": { + "type": "TSTypeParameterDeclaration", + "start":7,"end":9,"loc":{"start":{"line":1,"column":7},"end":{"line":1,"column":9}}, + "params": [] + }, + "superClass": null, + "body": { + "type": "ClassBody", + "start":10,"end":12,"loc":{"start":{"line":1,"column":10},"end":{"line":1,"column":12}}, + "body": [] + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/function/empty-type-parameters/input.ts b/packages/babel-parser/test/fixtures/typescript/function/empty-type-parameters/input.ts new file mode 100644 index 000000000000..0988137a7e71 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/function/empty-type-parameters/input.ts @@ -0,0 +1 @@ +function foo<>() {} diff --git a/packages/babel-parser/test/fixtures/typescript/function/empty-type-parameters/output.json b/packages/babel-parser/test/fixtures/typescript/function/empty-type-parameters/output.json new file mode 100644 index 000000000000..9a537950d4b7 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/function/empty-type-parameters/output.json @@ -0,0 +1,39 @@ +{ + "type": "File", + "start":0,"end":19,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":19}}, + "errors": [ + "SyntaxError: Type parameter list cannot be empty. (1:12)" + ], + "program": { + "type": "Program", + "start":0,"end":19,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":19}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "FunctionDeclaration", + "start":0,"end":19,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":19}}, + "id": { + "type": "Identifier", + "start":9,"end":12,"loc":{"start":{"line":1,"column":9},"end":{"line":1,"column":12},"identifierName":"foo"}, + "name": "foo" + }, + "generator": false, + "async": false, + "typeParameters": { + "type": "TSTypeParameterDeclaration", + "start":12,"end":14,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":14}}, + "params": [] + }, + "params": [], + "body": { + "type": "BlockStatement", + "start":17,"end":19,"loc":{"start":{"line":1,"column":17},"end":{"line":1,"column":19}}, + "body": [], + "directives": [] + } + } + ], + "directives": [] + } +} \ No newline at end of file From 294e0b66eabe84f0a3ddb4542a8ac5eb9554272c Mon Sep 17 00:00:00 2001 From: sosukesuzuki Date: Sun, 20 Sep 2020 15:55:33 +0900 Subject: [PATCH 2/3] Throw a syntax error for a empty type argument --- .../src/plugins/typescript/index.js | 4 ++ .../{empty => empty-function}/input.ts | 0 .../{empty => empty-function}/output.json | 3 + .../empty-interface-extends/input.ts | 1 + .../empty-interface-extends/output.json | 46 ++++++++++++++ .../empty-interface-implements/input.ts | 1 + .../empty-interface-implements/output.json | 47 ++++++++++++++ .../type-arguments/empty-new/input.ts | 1 + .../type-arguments/empty-new/output.json | 35 +++++++++++ .../type-arguments/empty-superclass/input.ts | 1 + .../empty-superclass/output.json | 40 ++++++++++++ .../type-arguments/empty-tsx/input.ts | 1 + .../type-arguments/empty-tsx/options.json | 3 + .../type-arguments/empty-tsx/output.json | 62 +++++++++++++++++++ .../type-arguments/empty-type-import/input.ts | 1 + .../empty-type-import/output.json | 55 ++++++++++++++++ .../type-arguments/empty-type-ref/input.ts | 1 + .../type-arguments/empty-type-ref/output.json | 51 +++++++++++++++ 18 files changed, 353 insertions(+) rename packages/babel-parser/test/fixtures/typescript/type-arguments/{empty => empty-function}/input.ts (100%) rename packages/babel-parser/test/fixtures/typescript/type-arguments/{empty => empty-function}/output.json (93%) create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-extends/input.ts create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-extends/output.json create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-implements/input.ts create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-implements/output.json create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-new/input.ts create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-new/output.json create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-superclass/input.ts create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-superclass/output.json create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/input.ts create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/options.json create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/output.json create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-import/input.ts create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-import/output.json create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-ref/input.ts create mode 100644 packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-ref/output.json diff --git a/packages/babel-parser/src/plugins/typescript/index.js b/packages/babel-parser/src/plugins/typescript/index.js index b26ea9da6d6c..09d2731fcc6f 100644 --- a/packages/babel-parser/src/plugins/typescript/index.js +++ b/packages/babel-parser/src/plugins/typescript/index.js @@ -73,6 +73,7 @@ const TSErrors = Object.freeze({ "An implementation cannot be declared in ambient contexts.", DuplicateModifier: "Duplicate modifier: '%0'", EmptyHeritageClauseType: "'%0' list cannot be empty.", + EmptyTypeArguments: "Type argument list cannot be empty.", EmptyTypeParameters: "Type parameter list cannot be empty.", IndexSignatureHasAbstract: "Index signatures cannot have the 'abstract' modifier", @@ -1684,6 +1685,9 @@ export default (superClass: Class): Class => ); }), ); + if (node.params.length === 0) { + this.raise(node.start, TSErrors.EmptyTypeArguments); + } // This reads the next token after the `>` too, so do this in the enclosing context. // But be sure not to parse a regex in the jsx expression ` />`, so set exprAllowed = false this.state.exprAllowed = false; diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty/input.ts b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-function/input.ts similarity index 100% rename from packages/babel-parser/test/fixtures/typescript/type-arguments/empty/input.ts rename to packages/babel-parser/test/fixtures/typescript/type-arguments/empty-function/input.ts diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty/output.json b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-function/output.json similarity index 93% rename from packages/babel-parser/test/fixtures/typescript/type-arguments/empty/output.json rename to packages/babel-parser/test/fixtures/typescript/type-arguments/empty-function/output.json index 7de727879d7a..1bbd06a7cd95 100644 --- a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty/output.json +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-function/output.json @@ -1,6 +1,9 @@ { "type": "File", "start":0,"end":7,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":7}}, + "errors": [ + "SyntaxError: Type argument list cannot be empty. (1:3)" + ], "program": { "type": "Program", "start":0,"end":7,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":7}}, diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-extends/input.ts b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-extends/input.ts new file mode 100644 index 000000000000..0c1e6350e707 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-extends/input.ts @@ -0,0 +1 @@ +interface A extends B<> {} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-extends/output.json b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-extends/output.json new file mode 100644 index 000000000000..220b78470f2f --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-extends/output.json @@ -0,0 +1,46 @@ +{ + "type": "File", + "start":0,"end":26,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}}, + "errors": [ + "SyntaxError: Type argument list cannot be empty. (1:21)" + ], + "program": { + "type": "Program", + "start":0,"end":26,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "TSInterfaceDeclaration", + "start":0,"end":26,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}}, + "id": { + "type": "Identifier", + "start":10,"end":11,"loc":{"start":{"line":1,"column":10},"end":{"line":1,"column":11},"identifierName":"A"}, + "name": "A" + }, + "extends": [ + { + "type": "TSExpressionWithTypeArguments", + "start":20,"end":23,"loc":{"start":{"line":1,"column":20},"end":{"line":1,"column":23}}, + "expression": { + "type": "Identifier", + "start":20,"end":21,"loc":{"start":{"line":1,"column":20},"end":{"line":1,"column":21},"identifierName":"B"}, + "name": "B" + }, + "typeParameters": { + "type": "TSTypeParameterInstantiation", + "start":21,"end":23,"loc":{"start":{"line":1,"column":21},"end":{"line":1,"column":23}}, + "params": [] + } + } + ], + "body": { + "type": "TSInterfaceBody", + "start":24,"end":26,"loc":{"start":{"line":1,"column":24},"end":{"line":1,"column":26}}, + "body": [] + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-implements/input.ts b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-implements/input.ts new file mode 100644 index 000000000000..918b9086f28e --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-implements/input.ts @@ -0,0 +1 @@ +class A implements B<> {} diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-implements/output.json b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-implements/output.json new file mode 100644 index 000000000000..cc11dd5cbae0 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-interface-implements/output.json @@ -0,0 +1,47 @@ +{ + "type": "File", + "start":0,"end":25,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":25}}, + "errors": [ + "SyntaxError: Type argument list cannot be empty. (1:20)" + ], + "program": { + "type": "Program", + "start":0,"end":25,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":25}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ClassDeclaration", + "start":0,"end":25,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":25}}, + "id": { + "type": "Identifier", + "start":6,"end":7,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":7},"identifierName":"A"}, + "name": "A" + }, + "superClass": null, + "implements": [ + { + "type": "TSExpressionWithTypeArguments", + "start":19,"end":22,"loc":{"start":{"line":1,"column":19},"end":{"line":1,"column":22}}, + "expression": { + "type": "Identifier", + "start":19,"end":20,"loc":{"start":{"line":1,"column":19},"end":{"line":1,"column":20},"identifierName":"B"}, + "name": "B" + }, + "typeParameters": { + "type": "TSTypeParameterInstantiation", + "start":20,"end":22,"loc":{"start":{"line":1,"column":20},"end":{"line":1,"column":22}}, + "params": [] + } + } + ], + "body": { + "type": "ClassBody", + "start":23,"end":25,"loc":{"start":{"line":1,"column":23},"end":{"line":1,"column":25}}, + "body": [] + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-new/input.ts b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-new/input.ts new file mode 100644 index 000000000000..1345a5663c84 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-new/input.ts @@ -0,0 +1 @@ +new A<>(); diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-new/output.json b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-new/output.json new file mode 100644 index 000000000000..a885c67948a0 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-new/output.json @@ -0,0 +1,35 @@ +{ + "type": "File", + "start":0,"end":10,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}}, + "errors": [ + "SyntaxError: Type argument list cannot be empty. (1:5)" + ], + "program": { + "type": "Program", + "start":0,"end":10,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ExpressionStatement", + "start":0,"end":10,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":10}}, + "expression": { + "type": "NewExpression", + "start":0,"end":9,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":9}}, + "callee": { + "type": "Identifier", + "start":4,"end":5,"loc":{"start":{"line":1,"column":4},"end":{"line":1,"column":5},"identifierName":"A"}, + "name": "A" + }, + "typeParameters": { + "type": "TSTypeParameterInstantiation", + "start":5,"end":7,"loc":{"start":{"line":1,"column":5},"end":{"line":1,"column":7}}, + "params": [] + }, + "arguments": [] + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-superclass/input.ts b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-superclass/input.ts new file mode 100644 index 000000000000..db9081ab7d83 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-superclass/input.ts @@ -0,0 +1 @@ +class A extends B<> {} diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-superclass/output.json b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-superclass/output.json new file mode 100644 index 000000000000..f9d1a8f64dfc --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-superclass/output.json @@ -0,0 +1,40 @@ +{ + "type": "File", + "start":0,"end":22,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":22}}, + "errors": [ + "SyntaxError: Type argument list cannot be empty. (1:17)" + ], + "program": { + "type": "Program", + "start":0,"end":22,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":22}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ClassDeclaration", + "start":0,"end":22,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":22}}, + "id": { + "type": "Identifier", + "start":6,"end":7,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":7},"identifierName":"A"}, + "name": "A" + }, + "superClass": { + "type": "Identifier", + "start":16,"end":17,"loc":{"start":{"line":1,"column":16},"end":{"line":1,"column":17},"identifierName":"B"}, + "name": "B" + }, + "superTypeParameters": { + "type": "TSTypeParameterInstantiation", + "start":17,"end":19,"loc":{"start":{"line":1,"column":17},"end":{"line":1,"column":19}}, + "params": [] + }, + "body": { + "type": "ClassBody", + "start":20,"end":22,"loc":{"start":{"line":1,"column":20},"end":{"line":1,"column":22}}, + "body": [] + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/input.ts b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/input.ts new file mode 100644 index 000000000000..f9b2825158f7 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/input.ts @@ -0,0 +1 @@ +var a = > diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/options.json b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/options.json new file mode 100644 index 000000000000..aa8780ac5180 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["jsx", "typescript"] +} diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/output.json b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/output.json new file mode 100644 index 000000000000..8d7819a040e2 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-tsx/output.json @@ -0,0 +1,62 @@ +{ + "type": "File", + "start":0,"end":23,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":23}}, + "errors": [ + "SyntaxError: Type argument list cannot be empty. (1:13)" + ], + "program": { + "type": "Program", + "start":0,"end":23,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":23}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "VariableDeclaration", + "start":0,"end":23,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":23}}, + "declarations": [ + { + "type": "VariableDeclarator", + "start":4,"end":23,"loc":{"start":{"line":1,"column":4},"end":{"line":1,"column":23}}, + "id": { + "type": "Identifier", + "start":4,"end":5,"loc":{"start":{"line":1,"column":4},"end":{"line":1,"column":5},"identifierName":"a"}, + "name": "a" + }, + "init": { + "type": "JSXElement", + "start":8,"end":23,"loc":{"start":{"line":1,"column":8},"end":{"line":1,"column":23}}, + "openingElement": { + "type": "JSXOpeningElement", + "start":8,"end":16,"loc":{"start":{"line":1,"column":8},"end":{"line":1,"column":16}}, + "name": { + "type": "JSXIdentifier", + "start":9,"end":13,"loc":{"start":{"line":1,"column":9},"end":{"line":1,"column":13}}, + "name": "Comp" + }, + "typeParameters": { + "type": "TSTypeParameterInstantiation", + "start":13,"end":15,"loc":{"start":{"line":1,"column":13},"end":{"line":1,"column":15}}, + "params": [] + }, + "attributes": [], + "selfClosing": false + }, + "closingElement": { + "type": "JSXClosingElement", + "start":16,"end":23,"loc":{"start":{"line":1,"column":16},"end":{"line":1,"column":23}}, + "name": { + "type": "JSXIdentifier", + "start":18,"end":22,"loc":{"start":{"line":1,"column":18},"end":{"line":1,"column":22}}, + "name": "Comp" + } + }, + "children": [] + } + } + ], + "kind": "var" + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-import/input.ts b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-import/input.ts new file mode 100644 index 000000000000..bdcff984636e --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-import/input.ts @@ -0,0 +1 @@ +let a: import("")<>; diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-import/output.json b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-import/output.json new file mode 100644 index 000000000000..ef26442d29a4 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-import/output.json @@ -0,0 +1,55 @@ +{ + "type": "File", + "start":0,"end":20,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":20}}, + "errors": [ + "SyntaxError: Type argument list cannot be empty. (1:17)" + ], + "program": { + "type": "Program", + "start":0,"end":20,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":20}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "VariableDeclaration", + "start":0,"end":20,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":20}}, + "declarations": [ + { + "type": "VariableDeclarator", + "start":4,"end":19,"loc":{"start":{"line":1,"column":4},"end":{"line":1,"column":19}}, + "id": { + "type": "Identifier", + "start":4,"end":19,"loc":{"start":{"line":1,"column":4},"end":{"line":1,"column":19},"identifierName":"a"}, + "name": "a", + "typeAnnotation": { + "type": "TSTypeAnnotation", + "start":5,"end":19,"loc":{"start":{"line":1,"column":5},"end":{"line":1,"column":19}}, + "typeAnnotation": { + "type": "TSImportType", + "start":7,"end":19,"loc":{"start":{"line":1,"column":7},"end":{"line":1,"column":19}}, + "argument": { + "type": "StringLiteral", + "start":14,"end":16,"loc":{"start":{"line":1,"column":14},"end":{"line":1,"column":16}}, + "extra": { + "rawValue": "", + "raw": "\"\"" + }, + "value": "" + }, + "typeParameters": { + "type": "TSTypeParameterInstantiation", + "start":17,"end":19,"loc":{"start":{"line":1,"column":17},"end":{"line":1,"column":19}}, + "params": [] + } + } + } + }, + "init": null + } + ], + "kind": "let" + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-ref/input.ts b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-ref/input.ts new file mode 100644 index 000000000000..5cf3098a0961 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-ref/input.ts @@ -0,0 +1 @@ +let a: Foo<>; diff --git a/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-ref/output.json b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-ref/output.json new file mode 100644 index 000000000000..b12a70a3a674 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/type-arguments/empty-type-ref/output.json @@ -0,0 +1,51 @@ +{ + "type": "File", + "start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}}, + "errors": [ + "SyntaxError: Type argument list cannot be empty. (1:10)" + ], + "program": { + "type": "Program", + "start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "VariableDeclaration", + "start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}}, + "declarations": [ + { + "type": "VariableDeclarator", + "start":4,"end":12,"loc":{"start":{"line":1,"column":4},"end":{"line":1,"column":12}}, + "id": { + "type": "Identifier", + "start":4,"end":12,"loc":{"start":{"line":1,"column":4},"end":{"line":1,"column":12},"identifierName":"a"}, + "name": "a", + "typeAnnotation": { + "type": "TSTypeAnnotation", + "start":5,"end":12,"loc":{"start":{"line":1,"column":5},"end":{"line":1,"column":12}}, + "typeAnnotation": { + "type": "TSTypeReference", + "start":7,"end":12,"loc":{"start":{"line":1,"column":7},"end":{"line":1,"column":12}}, + "typeName": { + "type": "Identifier", + "start":7,"end":10,"loc":{"start":{"line":1,"column":7},"end":{"line":1,"column":10},"identifierName":"Foo"}, + "name": "Foo" + }, + "typeParameters": { + "type": "TSTypeParameterInstantiation", + "start":10,"end":12,"loc":{"start":{"line":1,"column":10},"end":{"line":1,"column":12}}, + "params": [] + } + } + } + }, + "init": null + } + ], + "kind": "let" + } + ], + "directives": [] + } +} \ No newline at end of file From 02adf3d02cb9089816d7a47b8c9c7fd2270e613e Mon Sep 17 00:00:00 2001 From: sosukesuzuki Date: Sun, 20 Sep 2020 16:03:22 +0900 Subject: [PATCH 3/3] Update allowlist --- scripts/parser-tests/typescript/allowlist.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/parser-tests/typescript/allowlist.txt b/scripts/parser-tests/typescript/allowlist.txt index 8bacc1165c21..a773587592ec 100644 --- a/scripts/parser-tests/typescript/allowlist.txt +++ b/scripts/parser-tests/typescript/allowlist.txt @@ -69,6 +69,7 @@ classExtendsAcrossFiles.ts classExtendsMultipleBaseClasses.ts classIndexer5.ts classOverloadForFunction.ts +classWithEmptyTypeParameter.ts collisionExportsRequireAndClass.ts commonSourceDir5.ts commonSourceDir6.ts @@ -147,6 +148,9 @@ emitSuperCallBeforeEmitParameterPropertyDeclaration1.ts emitSuperCallBeforeEmitParameterPropertyDeclaration1ES6.ts emitSuperCallBeforeEmitPropertyDeclarationAndParameterPropertyDeclaration1.ts emitSuperCallBeforeEmitPropertyDeclarationAndParameterPropertyDeclaration1ES6.ts +emptyGenericParamList.ts +emptyTypeArgumentList.ts +emptyTypeArgumentListWithNew.ts enumGenericTypeClash.ts es3-oldStyleOctalLiteralTypes.ts es3defaultAliasIsQuoted.ts @@ -278,7 +282,6 @@ jsdocAccessEnumType.ts jsdocPropertyTagInvalid.ts jsxAttributeWithoutExpressionReact.tsx jsxIntrinsicElementsExtendsRecord.tsx -jsxIntrinsicElementsTypeArgumentErrors.tsx letAndVarRedeclaration.ts letAsIdentifier.ts letAsIdentifierInStrictMode.ts