Skip to content

Commit

Permalink
fix(es/compat): Transform default-exported class decorators correctly (
Browse files Browse the repository at this point in the history
…#8050)

**Description:**

Process decorators on the class expression on `export default` declaration and ensure to execute tests for the feature.

**Related issue:**

 - Closes #8049
  • Loading branch information
alekitto committed Oct 2, 2023
1 parent c53a655 commit a751f1c
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 35 deletions.
7 changes: 7 additions & 0 deletions crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1446,6 +1446,13 @@ impl VisitMut for Decorator202203 {

s.visit_mut_children_with(self);
}
ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultDecl(ExportDefaultDecl {
span: _,
decl: DefaultDecl::Class(c),
})) => {
self.handle_class_expr(&mut c.class, c.ident.as_ref());
s.visit_mut_children_with(self);
}
_ => {
s.visit_mut_children_with(self);
}
Expand Down
6 changes: 5 additions & 1 deletion crates/swc_ecma_transforms_proposal/tests/decorators.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,18 @@ fn exec_inner(input: PathBuf) {
}

#[testing::fixture("tests/decorators/**/input.js")]
#[testing::fixture("tests/decorators/**/input.mjs")]
fn fixture(input: PathBuf) {
fixture_inner(input)
}

fn fixture_inner(input: PathBuf) {
let src = std::fs::read_to_string(&input).unwrap();

let output = input.with_file_name("output.js");
let output = input.with_file_name(format!(
"output.{}",
input.extension().unwrap().to_string_lossy()
));

test_fixture(
syntax_default(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
var _initClass, _dec;
let _A;
_dec = dec;
class A {
static {
[_A, _initClass] = _applyDecs2203R(this, [], [_dec]).c;
}
static {
_initClass();
}
var _initClass, _A;
export default class A {
static{
({ c: [_A, _initClass] } = _apply_decs_2203_r(this, [], [
dec
]));
}
static{
_initClass();
}
}
export { _A as default };
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
var _initClass, _dec;
let _default2;
_dec = dec;
class _default {
static {
[_default2, _initClass] = _applyDecs2203R(this, [], [_dec]).c;
}
static {
_initClass();
}
var _initClass, _class;
export default class {
static{
({ c: [_class, _initClass] } = _apply_decs_2203_r(this, [], [
dec
]));
}
static{
_initClass();
}
}
export { _default2 as default };
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
var _dec, _init_x;
_dec = dec;
var _init_x;
export class A {
static {
[_init_x] = _applyDecs2203R(this, [[_dec, 0, "x"]], []).e;
static{
({ e: [_init_x] } = _apply_decs_2203_r(this, [
[
dec,
0,
"x"
]
], []));
}
x = _init_x(this);
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
var _initClass, _dec;
var _initClass;
let _A;
_dec = dec;
class A {
static {
[_A, _initClass] = _applyDecs2203R(this, [], [_dec]).c;
}
static {
_initClass();
}
static {
({ c: [_A, _initClass] } = _apply_decs_2203_r(this, [], [
dec
]));
}
static {
_initClass();
}
}
export { _A as A };

1 comment on commit a751f1c

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: a751f1c Previous: 4d8e101 Ratio
es/full/bugs-1 277833 ns/iter (± 5957) 275528 ns/iter (± 1852) 1.01
es/full/minify/libraries/antd 1315453138 ns/iter (± 5262929) 1313388202 ns/iter (± 13063122) 1.00
es/full/minify/libraries/d3 287366028 ns/iter (± 7212246) 278470778 ns/iter (± 5361479) 1.03
es/full/minify/libraries/echarts 1050258731 ns/iter (± 7499031) 1048540142 ns/iter (± 10779862) 1.00
es/full/minify/libraries/jquery 84348807 ns/iter (± 293647) 83973165 ns/iter (± 168650) 1.00
es/full/minify/libraries/lodash 97891776 ns/iter (± 505731) 97160484 ns/iter (± 359447) 1.01
es/full/minify/libraries/moment 49991198 ns/iter (± 92971) 49767035 ns/iter (± 112519) 1.00
es/full/minify/libraries/react 18044672 ns/iter (± 51497) 18078089 ns/iter (± 107091) 1.00
es/full/minify/libraries/terser 218019297 ns/iter (± 788292) 216864726 ns/iter (± 893834) 1.01
es/full/minify/libraries/three 384113257 ns/iter (± 2838047) 384437340 ns/iter (± 1525872) 1.00
es/full/minify/libraries/typescript 2654667541 ns/iter (± 8719701) 2632573209 ns/iter (± 22876423) 1.01
es/full/minify/libraries/victory 565656105 ns/iter (± 4851121) 563959199 ns/iter (± 3775218) 1.00
es/full/minify/libraries/vue 119145169 ns/iter (± 438108) 119010406 ns/iter (± 325846) 1.00
es/full/codegen/es3 34990 ns/iter (± 74) 34700 ns/iter (± 52) 1.01
es/full/codegen/es5 34883 ns/iter (± 56) 34612 ns/iter (± 89) 1.01
es/full/codegen/es2015 34946 ns/iter (± 125) 34547 ns/iter (± 111) 1.01
es/full/codegen/es2016 34889 ns/iter (± 115) 34622 ns/iter (± 95) 1.01
es/full/codegen/es2017 34908 ns/iter (± 48) 34607 ns/iter (± 133) 1.01
es/full/codegen/es2018 34990 ns/iter (± 123) 34616 ns/iter (± 135) 1.01
es/full/codegen/es2019 34970 ns/iter (± 104) 34609 ns/iter (± 76) 1.01
es/full/codegen/es2020 34996 ns/iter (± 105) 34658 ns/iter (± 87) 1.01
es/full/all/es3 164994483 ns/iter (± 1442444) 164374660 ns/iter (± 912152) 1.00
es/full/all/es5 158121658 ns/iter (± 1041097) 157601005 ns/iter (± 1594985) 1.00
es/full/all/es2015 117656178 ns/iter (± 1027051) 116261825 ns/iter (± 768070) 1.01
es/full/all/es2016 116266336 ns/iter (± 1367325) 116286729 ns/iter (± 785445) 1.00
es/full/all/es2017 115513112 ns/iter (± 583101) 114617768 ns/iter (± 1081265) 1.01
es/full/all/es2018 114083148 ns/iter (± 1121684) 113623986 ns/iter (± 875593) 1.00
es/full/all/es2019 112838529 ns/iter (± 436015) 112463834 ns/iter (± 1185707) 1.00
es/full/all/es2020 109306000 ns/iter (± 913711) 107996064 ns/iter (± 963528) 1.01
es/full/parser 489804 ns/iter (± 5783) 485766 ns/iter (± 6118) 1.01
es/full/base/fixer 19055 ns/iter (± 208) 17943 ns/iter (± 111) 1.06
es/full/base/resolver_and_hygiene 80324 ns/iter (± 119) 80666 ns/iter (± 278) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.