Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 16 additions & 40 deletions crates/oxc_codegen/src/gen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,14 +190,13 @@ impl Gen for Statement<'_> {
impl Gen for ExpressionStatement<'_> {
fn r#gen(&self, p: &mut Codegen, _ctx: Context) {
p.print_comments_at(self.span.start);
p.print_indent();
if !p.options.minify && (p.indent > 0 || p.print_next_indent_as_space) {
p.add_source_mapping(self.span);
p.print_indent();
}
p.start_of_stmt = p.code_len();
p.print_expression(&self.expression);
if self.expression.is_specific_id("let") {
p.print_semicolon();
} else {
p.print_semicolon_after_statement();
}
p.print_semicolon_after_statement();
}
}

Expand Down Expand Up @@ -761,6 +760,7 @@ impl Gen for FunctionBody<'_> {

impl Gen for FormalParameter<'_> {
fn r#gen(&self, p: &mut Codegen, ctx: Context) {
p.add_source_mapping(self.span);
p.print_decorators(&self.decorators, ctx);
if let Some(accessibility) = self.accessibility {
p.print_space_before_identifier();
Expand Down Expand Up @@ -903,7 +903,6 @@ impl Gen for ImportDeclaration<'_> {
p.print_soft_space();
with_clause.print(p, ctx);
}
p.add_source_mapping_end(self.span);
p.print_semicolon_after_statement();
}
}
Expand All @@ -923,8 +922,8 @@ impl Gen for WithClause<'_> {
p.print_list(&self.with_entries, ctx);
p.print_soft_space();
}
p.add_source_mapping_end(self.span);
p.print_ascii_byte(b'}');
p.add_source_mapping_end(self.span);
}
}

Expand Down Expand Up @@ -1204,7 +1203,7 @@ impl Gen for IdentifierReference<'_> {
impl Gen for IdentifierName<'_> {
fn r#gen(&self, p: &mut Codegen, _ctx: Context) {
p.print_space_before_identifier();
p.add_source_mapping(self.span);
p.add_source_mapping_for_name(self.span, &self.name);
p.print_str(self.name.as_str());
}
}
Expand Down Expand Up @@ -1399,6 +1398,7 @@ impl GenExpr for CallExpression<'_> {

p.wrap(wrap, |p| {
if pure {
p.add_source_mapping(self.span);
p.print_str(PURE_COMMENT);
}
if is_export_default {
Expand All @@ -1414,7 +1414,6 @@ impl GenExpr for CallExpression<'_> {
type_parameters.print(p, ctx);
}
p.print_arguments(self.span, &self.arguments, ctx);
p.add_source_mapping_end(self.span);
});
}
}
Expand Down Expand Up @@ -1474,8 +1473,8 @@ impl Gen for ArrayExpression<'_> {
p.dedent();
p.print_indent();
}
p.add_source_mapping_end(self.span);
p.print_ascii_byte(b']');
p.add_source_mapping_end(self.span);
}
}

Expand Down Expand Up @@ -1517,8 +1516,8 @@ impl GenExpr for ObjectExpression<'_> {
} else if len > 0 {
p.print_soft_space();
}
p.add_source_mapping_end(self.span);
p.print_ascii_byte(b'}');
p.add_source_mapping_end(self.span);
});
}
}
Expand All @@ -1539,13 +1538,11 @@ impl Gen for ObjectProperty<'_> {
let is_accessor = match &self.kind {
PropertyKind::Init => false,
PropertyKind::Get => {
p.add_source_mapping(self.span);
p.print_str("get");
p.print_soft_space();
true
}
PropertyKind::Set => {
p.add_source_mapping(self.span);
p.print_str("set");
p.print_soft_space();
true
Expand Down Expand Up @@ -1649,7 +1646,6 @@ impl GenExpr for ArrowFunctionExpression<'_> {
if let Some(type_parameters) = &self.type_parameters {
type_parameters.print(p, ctx);
}
p.add_source_mapping(self.span);
let remove_params_wrap = p.options.minify
&& self.params.items.len() == 1
&& self.params.rest.is_none()
Expand Down Expand Up @@ -1708,14 +1704,15 @@ impl GenExpr for UpdateExpression<'_> {
let operator = self.operator.as_str();
p.wrap(precedence >= self.precedence(), |p| {
if self.prefix {
p.add_source_mapping(self.span);
p.print_space_before_operator(self.operator.into());
p.add_source_mapping(self.span);
p.print_str(operator);
p.prev_op = Some(self.operator.into());
p.prev_op_end = p.code().len();
self.argument.print_expr(p, Precedence::Prefix, ctx);
} else {
p.print_space_before_operator(self.operator.into());
p.add_source_mapping(self.span);
self.argument.print_expr(p, Precedence::Postfix, ctx);
p.print_str(operator);
p.prev_op = Some(self.operator.into());
Expand Down Expand Up @@ -1779,6 +1776,7 @@ impl GenExpr for BinaryExpression<'_> {
impl GenExpr for PrivateInExpression<'_> {
fn gen_expr(&self, p: &mut Codegen, precedence: Precedence, ctx: Context) {
p.wrap(precedence >= Precedence::Compare, |p| {
p.add_source_mapping(self.span);
self.left.print(p, ctx);
p.print_str(" in ");
self.right.print_expr(p, Precedence::Equals, Context::FORBID_IN);
Expand Down Expand Up @@ -1833,6 +1831,7 @@ impl GenExpr for AssignmentExpression<'_> {
let wrap = (p.start_of_stmt == n || p.start_of_arrow_expr == n)
&& matches!(self.left, AssignmentTarget::ObjectAssignmentTarget(_));
p.wrap(wrap || precedence >= self.precedence(), |p| {
p.add_source_mapping(self.span);
self.left.print(p, ctx);
p.print_soft_space();
p.print_str(self.operator.as_str());
Expand Down Expand Up @@ -1903,7 +1902,6 @@ impl Gen for ArrayAssignmentTarget<'_> {
if !self.elements.is_empty() {
p.print_soft_space();
}
p.add_source_mapping(self.span);
target.print(p, ctx);
}
p.print_ascii_byte(b']');
Expand All @@ -1921,7 +1919,6 @@ impl Gen for ObjectAssignmentTarget<'_> {
p.print_comma();
p.print_soft_space();
}
p.add_source_mapping(self.span);
target.print(p, ctx);
}
p.print_ascii_byte(b'}');
Expand Down Expand Up @@ -2093,27 +2090,17 @@ impl Gen for TemplateLiteral<'_> {
fn r#gen(&self, p: &mut Codegen, _ctx: Context) {
p.add_source_mapping(self.span);
p.print_ascii_byte(b'`');

debug_assert_eq!(self.quasis.len(), self.expressions.len() + 1);

let (first_quasi, remaining_quasis) = self.quasis.split_first().unwrap();

p.add_source_mapping(first_quasi.span);
p.print_str_escaping_script_close_tag(first_quasi.value.raw.as_str());
p.add_source_mapping_end(first_quasi.span);

for (expr, quasi) in self.expressions.iter().zip(remaining_quasis) {
p.print_str("${");
p.print_expression(expr);
p.print_ascii_byte(b'}');

p.add_source_mapping(quasi.span);
p.print_str_escaping_script_close_tag(quasi.value.raw.as_str());
p.add_source_mapping_end(quasi.span);
}

p.print_ascii_byte(b'`');
p.add_source_mapping_end(self.span);
}
}

Expand Down Expand Up @@ -2267,7 +2254,6 @@ impl Gen for MetaProperty<'_> {

impl Gen for Class<'_> {
fn r#gen(&self, p: &mut Codegen, ctx: Context) {
p.add_source_mapping(self.span);
let n = p.code_len();
let wrap = self.is_expression() && (p.start_of_stmt == n || p.start_of_default_export == n);
p.wrap(wrap, |p| {
Expand Down Expand Up @@ -2588,33 +2574,28 @@ impl Gen for MethodDefinition<'_> {
}
if self.r#static {
p.print_space_before_identifier();
p.add_source_mapping(self.span);
p.print_str("static");
p.print_soft_space();
}
match &self.kind {
MethodDefinitionKind::Constructor | MethodDefinitionKind::Method => {}
MethodDefinitionKind::Get => {
p.print_space_before_identifier();
p.add_source_mapping(self.span);
p.print_str("get");
p.print_soft_space();
}
MethodDefinitionKind::Set => {
p.print_space_before_identifier();
p.add_source_mapping(self.span);
p.print_str("set");
p.print_soft_space();
}
}
if self.value.r#async {
p.print_space_before_identifier();
p.add_source_mapping(self.span);
p.print_str("async");
p.print_soft_space();
}
if self.value.generator {
p.add_source_mapping(self.span);
p.print_str("*");
}
if self.computed {
Expand Down Expand Up @@ -2675,7 +2656,6 @@ impl Gen for PropertyDefinition<'_> {
}
if self.r#static {
p.print_space_before_identifier();
p.add_source_mapping(self.span);
p.print_str("static");
p.print_soft_space();
}
Expand Down Expand Up @@ -2714,7 +2694,6 @@ impl Gen for AccessorProperty<'_> {
p.print_decorators(&self.decorators, ctx);
if self.r#type.is_abstract() {
p.print_space_before_identifier();
p.add_source_mapping(self.span);
p.print_str("abstract");
p.print_soft_space();
}
Expand All @@ -2725,7 +2704,6 @@ impl Gen for AccessorProperty<'_> {
}
if self.r#static {
p.print_space_before_identifier();
p.add_source_mapping(self.span);
p.print_str("static");
p.print_soft_space();
}
Expand Down Expand Up @@ -2762,8 +2740,8 @@ impl Gen for AccessorProperty<'_> {

impl Gen for PrivateIdentifier<'_> {
fn r#gen(&self, p: &mut Codegen, _ctx: Context) {
p.add_source_mapping_for_name(self.span, &self.name);
p.print_ascii_byte(b'#');
p.add_source_mapping_for_name(self.span, &self.name);
p.print_str(self.name.as_str());
}
}
Expand Down Expand Up @@ -2817,7 +2795,6 @@ impl Gen for ObjectPattern<'_> {

impl Gen for BindingProperty<'_> {
fn r#gen(&self, p: &mut Codegen, ctx: Context) {
p.add_source_mapping(self.span);
if self.computed {
p.print_ascii_byte(b'[');
}
Expand Down Expand Up @@ -3816,7 +3793,6 @@ impl GenExpr for V8IntrinsicExpression<'_> {
p.print_ascii_byte(b'%');
self.name.print(p, Context::empty());
p.print_arguments(self.span, &self.arguments, ctx);
p.add_source_mapping_end(self.span);
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,11 @@ expression: snapshot
(0:0) "1;\n" --> (0:0) "1;\n"
(2:0) "2;\n" --> (2:0) "2;\n"
(4:0) "3;\n" --> (4:0) "3;\n"
(5:0) "log(__OBJECT__)" --> (5:0) "log({ 'hello': 'test' })"
(5:15) ";\n" --> (5:24) ";\n"
(5:0) "log(__OBJECT__);\n" --> (5:0) "log({ 'hello': 'test' });\n"
(6:0) "4;\n" --> (6:0) "4;\n"
(7:0) "log(__STRING__)" --> (7:0) "log('development')"
(7:15) ";\n" --> (7:18) ";\n"
(7:0) "log(__STRING__);\n" --> (7:0) "log('development');\n"
(8:0) "5;\n" --> (8:0) "5;\n"
(9:11) "hello;\n" --> (9:22) "hello;\n"
(10:0) "6;\n" --> (10:0) "6;\n"
(11:0) "log(__MEMBER__)" --> (11:0) "log(xx.yy.zz)"
(11:15) ";\n" --> (11:13) ";\n"
(11:0) "log(__MEMBER__);\n" --> (11:0) "log(xx.yy.zz);\n"
(12:0) "7;\n" --> (12:0) "7;\n"
2 changes: 1 addition & 1 deletion napi/minify/test/minify.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ describe('simple', () => {
expect(ret).toStrictEqual({
'code': 'function foo(){var e;e(void 0)}foo();',
'map': {
'mappings': 'AACA,SAAS,KAAM,CAAE,IAAIA,EAAKA,EAAI,OAAU,AAAE,CAAC,KAAK',
'mappings': 'AACA,SAAS,KAAM,CAAE,IAAIA,EAAKA,EAAI,OAAY,CAAC',
'names': [
'bar',
],
Expand Down
Loading