From 33492ae781f088ad532434b701a94e44f4805762 Mon Sep 17 00:00:00 2001 From: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> Date: Sat, 25 Mar 2023 05:25:12 +0800 Subject: [PATCH] fix --- .../source-maps/class/source-map.json | 2 +- .../babel-generator/src/generators/base.ts | 4 +- .../babel-generator/src/generators/classes.ts | 9 +--- .../src/generators/expressions.ts | 40 +++++++++--------- .../src/generators/statements.ts | 2 +- .../src/generators/typescript.ts | 4 +- packages/babel-generator/src/printer.ts | 37 ++++++++-------- .../options.json | 2 +- .../output.js | 13 +++--- .../call-identifiers/source-map.json | 2 +- .../input.js | 17 ++++++++ .../options.json | 5 +++ .../output.js | 17 ++++++++ .../source-map.json | 22 ++++++++++ .../input.js | 17 ++++++++ .../options.json | 4 ++ .../output.js | 17 ++++++++ .../source-map.json | 22 ++++++++++ .../real-world-babel-file1/source-map.json | 2 +- .../real-world-babel-file2/source-map.json | 2 +- .../input.ts | 42 +++++++++++++++++++ .../options.json | 1 + .../output.js | 42 +++++++++++++++++++ .../source-map.json | 25 +++++++++++ .../misc/reference-source-map/source-map.json | 2 +- .../fixtures/strict/import/source-map.json | 2 +- .../sourcemaps/JSXText/source-map.json | 2 +- 27 files changed, 290 insertions(+), 66 deletions(-) create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/comment-before-parentheses-return-arg-createParenthesizedExpressions/input.js create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/comment-before-parentheses-return-arg-createParenthesizedExpressions/options.json create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/comment-before-parentheses-return-arg-createParenthesizedExpressions/output.js create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/comment-before-parentheses-return-arg-createParenthesizedExpressions/source-map.json create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/comment-before-parentheses-return-arg/input.js create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/comment-before-parentheses-return-arg/options.json create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/comment-before-parentheses-return-arg/output.js create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/comment-before-parentheses-return-arg/source-map.json create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/ts-class-properties-with-retainlines/input.ts create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/ts-class-properties-with-retainlines/options.json create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/ts-class-properties-with-retainlines/output.js create mode 100644 packages/babel-generator/test/fixtures/sourcemaps/ts-class-properties-with-retainlines/source-map.json diff --git a/packages/babel-core/test/fixtures/transformation/source-maps/class/source-map.json b/packages/babel-core/test/fixtures/transformation/source-maps/class/source-map.json index 7bcd3e9de1d7..a0691bd5121f 100644 --- a/packages/babel-core/test/fixtures/transformation/source-maps/class/source-map.json +++ b/packages/babel-core/test/fixtures/transformation/source-maps/class/source-map.json @@ -17,5 +17,5 @@ "sourcesContent": [ "class Test {\n get bar() {\n throw new Error(\"wow\");\n }\n}\n\nvar test = new Test;\ntest.bar;" ], - "mappings": "IAAMA,IAAI;EAAA;;EAAA,SAAAA,KAAA;IAAAC,YAAA,CAAAC,cAAA,OAAAF,IAAA;EAAA;EAAAC,YAAA,CAAAE,WAAA,CAAAH,IAAA;IAAAI,GAAA;IAAAC,GAAA,EACR,SAAAA,CAAA,EAAU;MACR,MAAM,IAAIC,KAAK,CAAC,KAAK,CAAC;IACxB;EAAC;EAAA,OAAAN,IAAA;AAAA;AAGH,IAAIO,IAAI,GAAG,IAAIP,IAAI;AACnBO,IAAI,CAACC,GAAG" + "mappings": "IAAMA,IAAI;EAAA;;EAAA,SAAAA,KAAA;IAAAC,YAAA,CAAAC,cAAA,OAAAF,IAAA;EAAA;EAAAC,YAAA,CAAAE,WAAA,CAAAH,IAAA;IAAAI,GAAA;IAAAC,GAAA,EACR,SAAAA,CAAA,EAAU;MACR,MAAM,IAAIC,KAAK,CAAC,KAAK,CAAC;IACxB;EAAC;EAAA,OAAAN,IAAA;AAAA;AAGH,IAAIO,IAAI,GAAG,IAAIP,IAAI,CAAD,CAAC;AACnBO,IAAI,CAACC,GAAG" } \ No newline at end of file diff --git a/packages/babel-generator/src/generators/base.ts b/packages/babel-generator/src/generators/base.ts index 47a06aaab124..2b9f3abf7ce9 100644 --- a/packages/babel-generator/src/generators/base.ts +++ b/packages/babel-generator/src/generators/base.ts @@ -48,9 +48,7 @@ export function BlockStatement(this: Printer, node: t.BlockStatement) { this.printSequence(node.body, node, { indent: true }); - this.sourceWithOffset("end", node.loc, 0, -1); - - this.rightBrace(); + this.rightBrace(node); } export function Directive(this: Printer, node: t.Directive) { diff --git a/packages/babel-generator/src/generators/classes.ts b/packages/babel-generator/src/generators/classes.ts index adbb030aea80..ab26fa69808c 100644 --- a/packages/babel-generator/src/generators/classes.ts +++ b/packages/babel-generator/src/generators/classes.ts @@ -78,9 +78,7 @@ export function ClassBody(this: Printer, node: t.ClassBody) { if (!this.endsWith(charCodes.lineFeed)) this.newline(); - this.sourceWithOffset("end", node.loc, 0, -1); - - this.rightBrace(); + this.rightBrace(node); } } @@ -224,9 +222,6 @@ export function StaticBlock(this: Printer, node: t.StaticBlock) { this.printSequence(node.body, node, { indent: true, }); - - this.sourceWithOffset("end", node.loc, 0, -1); - - this.rightBrace(); + this.rightBrace(node); } } diff --git a/packages/babel-generator/src/generators/expressions.ts b/packages/babel-generator/src/generators/expressions.ts index 9244f6005956..62efc895e571 100644 --- a/packages/babel-generator/src/generators/expressions.ts +++ b/packages/babel-generator/src/generators/expressions.ts @@ -9,17 +9,18 @@ import type * as t from "@babel/types"; import * as n from "../node"; export function UnaryExpression(this: Printer, node: t.UnaryExpression) { + const { operator } = node; if ( - node.operator === "void" || - node.operator === "delete" || - node.operator === "typeof" || + operator === "void" || + operator === "delete" || + operator === "typeof" || // throwExpressions - node.operator === "throw" + operator === "throw" ) { - this.word(node.operator); + this.word(operator); this.space(); } else { - this.token(node.operator); + this.token(operator); } this.print(node.argument, node); @@ -41,7 +42,7 @@ export function ParenthesizedExpression( ) { this.token("("); this.print(node.expression, node); - this.token(")"); + this.rightParens(node); } export function UpdateExpression(this: Printer, node: t.UpdateExpression) { @@ -97,7 +98,7 @@ export function NewExpression( } this.token("("); this.printList(node.arguments, node); - this.token(")"); + this.rightParens(node); } export function SequenceExpression(this: Printer, node: t.SequenceExpression) { @@ -169,30 +170,32 @@ export function OptionalMemberExpression( this: Printer, node: t.OptionalMemberExpression, ) { + let { computed } = node; + const { optional, property } = node; + this.print(node.object, node); - if (!node.computed && isMemberExpression(node.property)) { + if (!computed && isMemberExpression(property)) { throw new TypeError("Got a MemberExpression for MemberExpression property"); } - let computed = node.computed; // @ts-expect-error todo(flow->ts) maybe instead of typeof check specific literal types? - if (isLiteral(node.property) && typeof node.property.value === "number") { + if (isLiteral(property) && typeof property.value === "number") { computed = true; } - if (node.optional) { + if (optional) { this.token("?."); } if (computed) { this.token("["); - this.print(node.property, node); + this.print(property, node); this.token("]"); } else { - if (!node.optional) { + if (!optional) { this.token("."); } - this.print(node.property, node); + this.print(property, node); } } @@ -212,7 +215,7 @@ export function OptionalCallExpression( this.token("("); this.printList(node.arguments, node); - this.token(")"); + this.rightParens(node); } export function CallExpression(this: Printer, node: t.CallExpression) { @@ -222,7 +225,7 @@ export function CallExpression(this: Printer, node: t.CallExpression) { this.print(node.typeParameters, node); // TS this.token("("); this.printList(node.arguments, node); - this.token(")"); + this.rightParens(node); } export function Import(this: Printer) { @@ -377,6 +380,5 @@ export function ModuleExpression(this: Printer, node: t.ModuleExpression) { } this.print(body, node); this.dedent(); - this.sourceWithOffset("end", node.loc, 0, -1); - this.rightBrace(); + this.rightBrace(node); } diff --git a/packages/babel-generator/src/generators/statements.ts b/packages/babel-generator/src/generators/statements.ts index a333a2cc5db6..6a579923258f 100644 --- a/packages/babel-generator/src/generators/statements.ts +++ b/packages/babel-generator/src/generators/statements.ts @@ -224,7 +224,7 @@ export function SwitchStatement(this: Printer, node: t.SwitchStatement) { }, }); - this.token("}"); + this.rightBrace(node); } export function SwitchCase(this: Printer, node: t.SwitchCase) { diff --git a/packages/babel-generator/src/generators/typescript.ts b/packages/babel-generator/src/generators/typescript.ts index c5585c555bd0..bd438c5c054c 100644 --- a/packages/babel-generator/src/generators/typescript.ts +++ b/packages/babel-generator/src/generators/typescript.ts @@ -317,9 +317,7 @@ function tsPrintBraced(printer: Printer, members: t.Node[], node: t.Node) { printer.dedent(); } - printer.sourceWithOffset("end", node.loc, 0, -1); - - printer.rightBrace(); + printer.rightBrace(node); } export function TSArrayType(this: Printer, node: t.TSArrayType) { diff --git a/packages/babel-generator/src/printer.ts b/packages/babel-generator/src/printer.ts index 2ac367e67e93..b80c61888556 100644 --- a/packages/babel-generator/src/printer.ts +++ b/packages/babel-generator/src/printer.ts @@ -174,13 +174,19 @@ class Printer { * Add a right brace to the buffer. */ - rightBrace(): void { + rightBrace(node: t.Node): void { if (this.format.minified) { this._buf.removeLastSemicolon(); } + this.sourceWithOffset("end", node.loc, 0, -1); this.token("}"); } + rightParens(node: t.Node): void { + this.sourceWithOffset("end", node.loc, 0, -1); + this.token(")"); + } + /** * Add a space to the buffer unless it is compact. */ @@ -240,7 +246,6 @@ class Printer { /** * Writes a simple token. */ - token(str: string, maybeNewline = false): void { this._maybePrintInnerComments(); @@ -270,8 +275,6 @@ class Printer { tokenChar(char: number): void { this._maybePrintInnerComments(); - // space is mandatory to avoid outputting