From e5c09b07f26c93160f148396604aa2acbff5f134 Mon Sep 17 00:00:00 2001 From: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> Date: Tue, 8 Nov 2022 15:25:42 +0800 Subject: [PATCH 1/2] assert comments --- packages/babel-generator/src/index.ts | 28 ++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/babel-generator/src/index.ts b/packages/babel-generator/src/index.ts index 7f8defd37e75..b55588b5d38a 100644 --- a/packages/babel-generator/src/index.ts +++ b/packages/babel-generator/src/index.ts @@ -24,9 +24,12 @@ class Generator extends Printer { const map = opts.sourceMaps ? new SourceMap(opts, code) : null; super(format, map); + this.opts = opts; this.ast = ast; } + opts: GeneratorOptions; + ast: t.Node; /** @@ -36,7 +39,30 @@ class Generator extends Printer { */ generate() { - return super.generate(this.ast); + const code = super.generate(this.ast); + + const comments = (this.ast as { comments?: t.Comment[] }).comments; + if (comments?.length) { + let num = 0; + let last; + for (const v of comments) { + if (!this._printedComments.has(v)) { + last = v; + num++; + } + } + if (num > 0) { + console.error( + `[@babel/generator] Error: There are ${num} comments that were not printed normally, please open an issue on babel repo.\nThe last is \`${ + last.value + }\` at ${ + this.opts.filename || this.opts.sourceFileName || "unknown file" + }:${last.loc?.start.line}:${last.loc?.start.column}`, + ); + } + } + + return code; } } From f8873bb229c6b30a214ec3149c15ad92b3c1ab5a Mon Sep 17 00:00:00 2001 From: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> Date: Tue, 8 Nov 2022 15:41:14 +0800 Subject: [PATCH 2/2] fix --- packages/babel-generator/src/index.ts | 2 +- packages/babel-generator/src/printer.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/babel-generator/src/index.ts b/packages/babel-generator/src/index.ts index b55588b5d38a..a7e91e15ca2f 100644 --- a/packages/babel-generator/src/index.ts +++ b/packages/babel-generator/src/index.ts @@ -46,7 +46,7 @@ class Generator extends Printer { let num = 0; let last; for (const v of comments) { - if (!this._printedComments.has(v)) { + if (!this._printedComments.has(v) && !v.ignore) { last = v; num++; } diff --git a/packages/babel-generator/src/printer.ts b/packages/babel-generator/src/printer.ts index 53d3f736e9cb..e3b9e18fd8a3 100644 --- a/packages/babel-generator/src/printer.ts +++ b/packages/babel-generator/src/printer.ts @@ -908,10 +908,10 @@ class Printer { return true; } - if (!this.format.shouldPrintComment(comment.value)) return false; - this._printedComments.add(comment); + if (!this.format.shouldPrintComment(comment.value)) return false; + const isBlockComment = comment.type === "CommentBlock"; // Add a newline before and after a block comment, unless explicitly