diff --git a/packages/babel-generator/src/index.ts b/packages/babel-generator/src/index.ts index 7f8defd37e75..a7e91e15ca2f 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) && !v.ignore) { + 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; } } 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