From 62290aa1badf7846168cb6c26a9ca63c738f14ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Tue, 12 Jan 2021 19:13:09 -0500 Subject: [PATCH] [babel 8] Don't create `TSParenthesizedType` nodes by default (#12608) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Huáng Jùnliàng Co-authored-by: Sergey Melyukov --- .../types-parenthesized-babel-7/input.js | 1 + .../types-parenthesized-babel-7/options.json | 3 + .../types-parenthesized-babel-7/output.js | 1 + .../input.js | 1 + .../options.json | 4 + .../output.js | 1 + .../input.js | 1 + .../options.json | 4 + .../output.js | 1 + .../types-parenthesized/options.json | 3 + .../typescript/types-parenthesized/output.js | 2 +- .../src/plugins/typescript/index.js | 12 +++ .../types/conditional-infer/options.json | 4 + .../types/parenthesized/options.json | 4 + .../types/tuple-optional-babel-7/input.ts | 1 + .../types/tuple-optional-babel-7/options.json | 3 + .../types/tuple-optional-babel-7/output.json | 74 +++++++++++++++++++ .../types/tuple-optional/options.json | 3 + .../types/tuple-optional/output.json | 36 ++++----- 19 files changed, 140 insertions(+), 19 deletions(-) create mode 100644 packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/input.js create mode 100644 packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/options.json create mode 100644 packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/output.js create mode 100644 packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/input.js create mode 100644 packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/options.json create mode 100644 packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/output.js create mode 100644 packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/input.js create mode 100644 packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/options.json create mode 100644 packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/output.js create mode 100644 packages/babel-generator/test/fixtures/typescript/types-parenthesized/options.json create mode 100644 packages/babel-parser/test/fixtures/typescript/types/conditional-infer/options.json create mode 100644 packages/babel-parser/test/fixtures/typescript/types/parenthesized/options.json create mode 100644 packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/input.ts create mode 100644 packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/options.json create mode 100644 packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/output.json create mode 100644 packages/babel-parser/test/fixtures/typescript/types/tuple-optional/options.json diff --git a/packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/input.js b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/input.js new file mode 100644 index 0000000000..a8a9d2d955 --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/input.js @@ -0,0 +1 @@ +type T = ({}); diff --git a/packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/options.json b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/options.json new file mode 100644 index 0000000000..29a3f0e841 --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/options.json @@ -0,0 +1,3 @@ +{ + "BABEL_8_BREAKING": false +} diff --git a/packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/output.js b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/output.js new file mode 100644 index 0000000000..a8a9d2d955 --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-babel-7/output.js @@ -0,0 +1 @@ +type T = ({}); diff --git a/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/input.js b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/input.js new file mode 100644 index 0000000000..a8a9d2d955 --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/input.js @@ -0,0 +1 @@ +type T = ({}); diff --git a/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/options.json b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/options.json new file mode 100644 index 0000000000..6b617afe84 --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/options.json @@ -0,0 +1,4 @@ +{ + "parserOpts": { "createParenthesizedExpressions": true }, + "BABEL_8_BREAKING": false +} diff --git a/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/output.js b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/output.js new file mode 100644 index 0000000000..a8a9d2d955 --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression-babel-7/output.js @@ -0,0 +1 @@ +type T = ({}); diff --git a/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/input.js b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/input.js new file mode 100644 index 0000000000..a8a9d2d955 --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/input.js @@ -0,0 +1 @@ +type T = ({}); diff --git a/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/options.json b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/options.json new file mode 100644 index 0000000000..f0a6431c5d --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/options.json @@ -0,0 +1,4 @@ +{ + "parserOpts": { "createParenthesizedExpressions": true }, + "BABEL_8_BREAKING": true +} diff --git a/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/output.js b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/output.js new file mode 100644 index 0000000000..a8a9d2d955 --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-parenthesized-createParenthesizedExpression/output.js @@ -0,0 +1 @@ +type T = ({}); diff --git a/packages/babel-generator/test/fixtures/typescript/types-parenthesized/options.json b/packages/babel-generator/test/fixtures/typescript/types-parenthesized/options.json new file mode 100644 index 0000000000..cbf6d15954 --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/types-parenthesized/options.json @@ -0,0 +1,3 @@ +{ + "BABEL_8_BREAKING": true +} diff --git a/packages/babel-generator/test/fixtures/typescript/types-parenthesized/output.js b/packages/babel-generator/test/fixtures/typescript/types-parenthesized/output.js index 77f5f833da..ffadba0c11 100644 --- a/packages/babel-generator/test/fixtures/typescript/types-parenthesized/output.js +++ b/packages/babel-generator/test/fixtures/typescript/types-parenthesized/output.js @@ -1 +1 @@ -type T = ({}); \ No newline at end of file +type T = {}; diff --git a/packages/babel-parser/src/plugins/typescript/index.js b/packages/babel-parser/src/plugins/typescript/index.js index 744152339e..8603b975c6 100644 --- a/packages/babel-parser/src/plugins/typescript/index.js +++ b/packages/babel-parser/src/plugins/typescript/index.js @@ -842,6 +842,18 @@ export default (superClass: Class): Class => case tt.bracketL: return this.tsParseTupleType(); case tt.parenL: + if (process.env.BABEL_8_BREAKING) { + if (!this.options.createParenthesizedExpressions) { + const startPos = this.state.start; + this.next(); + const type = this.tsParseType(); + this.expect(tt.parenR); + this.addExtra(type, "parenthesized", true); + this.addExtra(type, "parenStart", startPos); + return type; + } + } + return this.tsParseParenthesizedType(); case tt.backQuote: return this.tsParseTemplateLiteralType(); diff --git a/packages/babel-parser/test/fixtures/typescript/types/conditional-infer/options.json b/packages/babel-parser/test/fixtures/typescript/types/conditional-infer/options.json new file mode 100644 index 0000000000..6c00035421 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/types/conditional-infer/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["typescript"], + "createParenthesizedExpressions": true +} diff --git a/packages/babel-parser/test/fixtures/typescript/types/parenthesized/options.json b/packages/babel-parser/test/fixtures/typescript/types/parenthesized/options.json new file mode 100644 index 0000000000..6c00035421 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/types/parenthesized/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["typescript"], + "createParenthesizedExpressions": true +} diff --git a/packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/input.ts b/packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/input.ts new file mode 100644 index 0000000000..3b8d21ba95 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/input.ts @@ -0,0 +1 @@ +let x: [string, number?, (string | number)?] diff --git a/packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/options.json b/packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/options.json new file mode 100644 index 0000000000..29a3f0e841 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/options.json @@ -0,0 +1,3 @@ +{ + "BABEL_8_BREAKING": false +} diff --git a/packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/output.json b/packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/output.json new file mode 100644 index 0000000000..224e952da4 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/types/tuple-optional-babel-7/output.json @@ -0,0 +1,74 @@ +{ + "type": "File", + "start":0,"end":44,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":44}}, + "program": { + "type": "Program", + "start":0,"end":44,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":44}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "VariableDeclaration", + "start":0,"end":44,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":44}}, + "declarations": [ + { + "type": "VariableDeclarator", + "start":4,"end":44,"loc":{"start":{"line":1,"column":4},"end":{"line":1,"column":44}}, + "id": { + "type": "Identifier", + "start":4,"end":44,"loc":{"start":{"line":1,"column":4},"end":{"line":1,"column":44},"identifierName":"x"}, + "name": "x", + "typeAnnotation": { + "type": "TSTypeAnnotation", + "start":5,"end":44,"loc":{"start":{"line":1,"column":5},"end":{"line":1,"column":44}}, + "typeAnnotation": { + "type": "TSTupleType", + "start":7,"end":44,"loc":{"start":{"line":1,"column":7},"end":{"line":1,"column":44}}, + "elementTypes": [ + { + "type": "TSStringKeyword", + "start":8,"end":14,"loc":{"start":{"line":1,"column":8},"end":{"line":1,"column":14}} + }, + { + "type": "TSOptionalType", + "start":16,"end":23,"loc":{"start":{"line":1,"column":16},"end":{"line":1,"column":23}}, + "typeAnnotation": { + "type": "TSNumberKeyword", + "start":16,"end":22,"loc":{"start":{"line":1,"column":16},"end":{"line":1,"column":22}} + } + }, + { + "type": "TSOptionalType", + "start":25,"end":43,"loc":{"start":{"line":1,"column":25},"end":{"line":1,"column":43}}, + "typeAnnotation": { + "type": "TSParenthesizedType", + "start":25,"end":42,"loc":{"start":{"line":1,"column":25},"end":{"line":1,"column":42}}, + "typeAnnotation": { + "type": "TSUnionType", + "start":26,"end":41,"loc":{"start":{"line":1,"column":26},"end":{"line":1,"column":41}}, + "types": [ + { + "type": "TSStringKeyword", + "start":26,"end":32,"loc":{"start":{"line":1,"column":26},"end":{"line":1,"column":32}} + }, + { + "type": "TSNumberKeyword", + "start":35,"end":41,"loc":{"start":{"line":1,"column":35},"end":{"line":1,"column":41}} + } + ] + } + } + } + ] + } + } + }, + "init": null + } + ], + "kind": "let" + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/types/tuple-optional/options.json b/packages/babel-parser/test/fixtures/typescript/types/tuple-optional/options.json new file mode 100644 index 0000000000..cbf6d15954 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/types/tuple-optional/options.json @@ -0,0 +1,3 @@ +{ + "BABEL_8_BREAKING": true +} diff --git a/packages/babel-parser/test/fixtures/typescript/types/tuple-optional/output.json b/packages/babel-parser/test/fixtures/typescript/types/tuple-optional/output.json index 224e952da4..31a7bf7f95 100644 --- a/packages/babel-parser/test/fixtures/typescript/types/tuple-optional/output.json +++ b/packages/babel-parser/test/fixtures/typescript/types/tuple-optional/output.json @@ -39,24 +39,24 @@ }, { "type": "TSOptionalType", - "start":25,"end":43,"loc":{"start":{"line":1,"column":25},"end":{"line":1,"column":43}}, + "start":26,"end":43,"loc":{"start":{"line":1,"column":26},"end":{"line":1,"column":43}}, "typeAnnotation": { - "type": "TSParenthesizedType", - "start":25,"end":42,"loc":{"start":{"line":1,"column":25},"end":{"line":1,"column":42}}, - "typeAnnotation": { - "type": "TSUnionType", - "start":26,"end":41,"loc":{"start":{"line":1,"column":26},"end":{"line":1,"column":41}}, - "types": [ - { - "type": "TSStringKeyword", - "start":26,"end":32,"loc":{"start":{"line":1,"column":26},"end":{"line":1,"column":32}} - }, - { - "type": "TSNumberKeyword", - "start":35,"end":41,"loc":{"start":{"line":1,"column":35},"end":{"line":1,"column":41}} - } - ] - } + "type": "TSUnionType", + "start":26,"end":41,"loc":{"start":{"line":1,"column":26},"end":{"line":1,"column":41}}, + "extra": { + "parenthesized": true, + "parenStart": 25 + }, + "types": [ + { + "type": "TSStringKeyword", + "start":26,"end":32,"loc":{"start":{"line":1,"column":26},"end":{"line":1,"column":32}} + }, + { + "type": "TSNumberKeyword", + "start":35,"end":41,"loc":{"start":{"line":1,"column":35},"end":{"line":1,"column":41}} + } + ] } } ] @@ -71,4 +71,4 @@ ], "directives": [] } -} \ No newline at end of file +}