diff --git a/crates/oxc_codegen/examples/codegen.rs b/crates/oxc_codegen/examples/codegen.rs index e25259e1f2037..7baffcb9255b2 100644 --- a/crates/oxc_codegen/examples/codegen.rs +++ b/crates/oxc_codegen/examples/codegen.rs @@ -2,7 +2,7 @@ use std::{env, path::Path}; use oxc_allocator::Allocator; -use oxc_codegen::{CodeGenerator, WhitespaceRemover}; +use oxc_codegen::{CodeGenerator, CommentOptions, WhitespaceRemover}; use oxc_parser::Parser; use oxc_span::SourceType; use pico_args::Arguments; @@ -35,7 +35,14 @@ fn main() -> std::io::Result<()> { println!("{source_text}"); println!("First time:"); - let printed = CodeGenerator::new().build(&ret.program).source_text; + let printed = CodeGenerator::new() + .enable_comment( + &source_text, + ret.trivias.clone(), + CommentOptions { preserve_annotate_comments: true }, + ) + .build(&ret.program) + .source_text; println!("{printed}"); if twice { @@ -48,7 +55,14 @@ fn main() -> std::io::Result<()> { } return Ok(()); } - let printed = CodeGenerator::new().build(&ret.program).source_text; + let printed = CodeGenerator::new() + .enable_comment( + &source_text, + ret.trivias.clone(), + CommentOptions { preserve_annotate_comments: true }, + ) + .build(&ret.program) + .source_text; println!("{printed}"); } diff --git a/crates/oxc_codegen/src/gen.rs b/crates/oxc_codegen/src/gen.rs index a654020d664c0..9b170ed688a78 100644 --- a/crates/oxc_codegen/src/gen.rs +++ b/crates/oxc_codegen/src/gen.rs @@ -1419,8 +1419,8 @@ impl<'a, const MINIFY: bool> GenExpr for CallExpression<'a> { fn gen_expr(&self, p: &mut Codegen<{ MINIFY }>, precedence: Precedence, ctx: Context) { let wrap = precedence > self.precedence() || ctx.has_forbid_call(); let ctx = ctx.and_forbid_call(false); - p.gen_comment(self.span.start); p.wrap(wrap, |p| { + p.gen_comment(self.span.start); p.add_source_mapping(self.span.start); self.callee.gen_expr(p, self.precedence(), ctx); if self.optional { @@ -2049,8 +2049,8 @@ impl<'a, const MINIFY: bool> GenExpr for ChainExpression<'a> { impl<'a, const MINIFY: bool> GenExpr for NewExpression<'a> { fn gen_expr(&self, p: &mut Codegen<{ MINIFY }>, precedence: Precedence, ctx: Context) { - p.gen_comment(self.span.start); p.wrap(precedence > self.precedence(), |p| { + p.gen_comment(self.span.start); p.add_source_mapping(self.span.start); p.print_str("new "); self.callee.gen_expr(p, Precedence::NewWithoutArgs, ctx.and_forbid_call(true)); diff --git a/crates/oxc_codegen/tests/integration/pure_comments.rs b/crates/oxc_codegen/tests/integration/pure_comments.rs index af920f62e4b7d..6891ddfe9052c 100644 --- a/crates/oxc_codegen/tests/integration/pure_comments.rs +++ b/crates/oxc_codegen/tests/integration/pure_comments.rs @@ -200,4 +200,11 @@ const builtInSymbols = new Set( ", "const builtInSymbols = new Set(/*#__PURE__*/ (Object.getOwnPropertyNames(Symbol)).filter((key) => key !== \"arguments\" && key !== \"caller\"));\n", ); + + test_comment_helper( + "(/* @__PURE__ */ new Foo()).bar();\n", + "(/* @__PURE__ */ new Foo()).bar();\n", + ); + + test_comment_helper("(/* @__PURE__ */ Foo()).bar();\n", "(/* @__PURE__ */ Foo()).bar();\n"); }