Skip to content

Commit

Permalink
fix(es/minifier): Do not drop used properties (#7702)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7700.
 - Closes #7710.
  • Loading branch information
kdy1 committed Jul 28, 2023
1 parent d3b516d commit f901b41
Show file tree
Hide file tree
Showing 60 changed files with 1,214 additions and 61,563 deletions.
63 changes: 63 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7700/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": true
},
"transform": {
"react": {}
},
"target": "esnext",
"loose": true,
"minify": {
"compress": {
"arguments": false,
"arrows": true,
"booleans": true,
"booleans_as_integers": false,
"collapse_vars": true,
"comparisons": true,
"computed_props": true,
"conditionals": true,
"dead_code": true,
"directives": true,
"drop_console": false,
"drop_debugger": true,
"evaluate": true,
"expression": false,
"hoist_funs": false,
"hoist_props": true,
"hoist_vars": false,
"if_return": true,
"join_vars": true,
"keep_classnames": false,
"keep_fargs": true,
"keep_fnames": false,
"keep_infinity": false,
"loops": true,
"negate_iife": true,
"properties": true,
"reduce_funcs": false,
"reduce_vars": false,
"side_effects": true,
"switches": true,
"typeofs": true,
"unsafe": false,
"unsafe_arrows": false,
"unsafe_comps": false,
"unsafe_Function": false,
"unsafe_math": false,
"unsafe_symbols": false,
"unsafe_methods": false,
"unsafe_proto": false,
"unsafe_regexp": false,
"unsafe_undefined": false,
"unused": true,
"const_to_let": true,
"pristine_globals": true
}
},
},
"isModule": true,
"minify": false
}
22 changes: 22 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7700/input/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
const positions = {
top: 1,
left: 2,
right: 3,
bottom: 4,
}

const rtlPositions = {
top: 1,
right: 2,
left: 3,
bottom: 4,
}

export function PositionRender({ isRtl, position }) {

const display = (isRtl === 'fe-fe-fe' ? rtlPositions : positions)[position];

return <h1>
PositionRender: {display}
</h1>
}
23 changes: 23 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7700/input/2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

const positions = {
top: 1,
left: 2,
right: 3,
bottom: 4,
}

const rtlPositions = {
top: 1,
right: 2,
left: 3,
bottom: 4,
}

export function PositionRender({ isRtl, position }) {

const display = (isRtl === 'fe-fe-fe' ? [rtlPositions] : { positions })[position];

return <h1>
PositionRender: {display}
</h1>
}
23 changes: 23 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7700/input/3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

const positions = {
top: 1,
left: 2,
right: 3,
bottom: 4,
}

const rtlPositions = {
top: 1,
right: 2,
left: 3,
bottom: 4,
}

export function PositionRender({ isRtl, position }) {

const display = (isRtl === 'fe-fe-fe' ? [rtlPositions ?? 1] : { positions })[position];

return <h1>
PositionRender: {display}
</h1>
}
23 changes: 23 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7700/input/4.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

const positions = {
top: 1,
left: 2,
right: 3,
bottom: 4,
}

const rtlPositions = {
top: 1,
right: 2,
left: 3,
bottom: 4,
}

export function PositionRender({ isRtl, position }) {

const display = (isRtl === 'fe-fe-fe' ? rtlPositions : { a: positions })[position];

return <h1>
PositionRender: {display}
</h1>
}
23 changes: 23 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7700/input/5.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

const positions = {
top: 1,
left: 2,
right: 3,
bottom: 4,
}

const rtlPositions = {
top: 1,
right: 2,
left: 3,
bottom: 4,
}

export function PositionRender({ isRtl, position }) {

const display = (isRtl === 'fe-fe-fe' ? rtlPositions : { a: [positions] })[position];

return <h1>
PositionRender: {display}
</h1>
}
15 changes: 15 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7700/output/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
let positions = {
top: 1,
left: 2,
right: 3,
bottom: 4
}, rtlPositions = {
top: 1,
right: 2,
left: 3,
bottom: 4
};
export function PositionRender({ isRtl, position }) {
let display = ('fe-fe-fe' === isRtl ? rtlPositions : positions)[position];
return React.createElement("h1", null, "PositionRender: ", display);
}
19 changes: 19 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7700/output/2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
let positions = {
top: 1,
left: 2,
right: 3,
bottom: 4
}, rtlPositions = {
top: 1,
right: 2,
left: 3,
bottom: 4
};
export function PositionRender({ isRtl, position }) {
let display = ('fe-fe-fe' === isRtl ? [
rtlPositions
] : {
positions
})[position];
return React.createElement("h1", null, "PositionRender: ", display);
}
19 changes: 19 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7700/output/3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
let positions = {
top: 1,
left: 2,
right: 3,
bottom: 4
}, rtlPositions = {
top: 1,
right: 2,
left: 3,
bottom: 4
};
export function PositionRender({ isRtl, position }) {
let display = ('fe-fe-fe' === isRtl ? [
rtlPositions ?? 1
] : {
positions
})[position];
return React.createElement("h1", null, "PositionRender: ", display);
}
17 changes: 17 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7700/output/4.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
let positions = {
top: 1,
left: 2,
right: 3,
bottom: 4
}, rtlPositions = {
top: 1,
right: 2,
left: 3,
bottom: 4
};
export function PositionRender({ isRtl, position }) {
let display = ('fe-fe-fe' === isRtl ? rtlPositions : {
a: positions
})[position];
return React.createElement("h1", null, "PositionRender: ", display);
}
19 changes: 19 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7700/output/5.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
let positions = {
top: 1,
left: 2,
right: 3,
bottom: 4
}, rtlPositions = {
top: 1,
right: 2,
left: 3,
bottom: 4
};
export function PositionRender({ isRtl, position }) {
let display = ('fe-fe-fe' === isRtl ? rtlPositions : {
a: [
positions
]
})[position];
return React.createElement("h1", null, "PositionRender: ", display);
}
14 changes: 14 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7710/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"jsc": {
"parser": {
"syntax": "ecmascript"
},
"loose": false,
"minify": {
"compress": {
"hoist_props": true
}
},
"target": "es2022"
}
}
10 changes: 10 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7710/input/export-class-1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const obj = {
foo: 1,
bar: 2,
};

console.log(obj.bar);

export class Foo {
[obj] = 1;
};
10 changes: 10 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7710/input/export-class-2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const obj = {
foo: 1,
bar: 2,
};

console.log(obj.bar);

export class Foo {
foo = obj;
};
10 changes: 10 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7710/input/export-class-3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const obj = {
foo: 1,
bar: 2,
};

console.log(obj.bar);

export class Foo {
foo = obj ?? 1;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const obj = {
foo: 1,
bar: 2,
};

console.log(obj.bar);

export default class {
[obj] = 1;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const obj = {
foo: 1,
bar: 2,
};

console.log(obj.bar);

export default class {
[obj ?? 1] = 1;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const obj = {
foo: 1,
bar: 2,
};

console.log(obj.bar);

export default class {
foo = obj ?? 1;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const obj = {
foo: 1,
bar: 2,
};

console.log(obj.bar);

export default class {
foo = obj;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const obj = {
foo: 1,
bar: 2,
};

console.log(obj.bar);

export default class Foo {
foo = obj ?? 1;
};

1 comment on commit f901b41

@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: f901b41 Previous: 864bdef Ratio
es/full/bugs-1 290902 ns/iter (± 7451) 288406 ns/iter (± 5562) 1.01
es/full/minify/libraries/antd 1422593983 ns/iter (± 22543814) 1344037292 ns/iter (± 11921914) 1.06
es/full/minify/libraries/d3 295168587 ns/iter (± 3375783) 283416430 ns/iter (± 5389572) 1.04
es/full/minify/libraries/echarts 1135707790 ns/iter (± 25068730) 1079303361 ns/iter (± 9729777) 1.05
es/full/minify/libraries/jquery 87754579 ns/iter (± 645196) 85080042 ns/iter (± 406503) 1.03
es/full/minify/libraries/lodash 101287595 ns/iter (± 443677) 99006634 ns/iter (± 363899) 1.02
es/full/minify/libraries/moment 51363919 ns/iter (± 408052) 49880044 ns/iter (± 112175) 1.03
es/full/minify/libraries/react 18287297 ns/iter (± 134203) 18026768 ns/iter (± 168903) 1.01
es/full/minify/libraries/terser 234492090 ns/iter (± 1925313) 223335200 ns/iter (± 612718) 1.05
es/full/minify/libraries/three 413279951 ns/iter (± 2223144) 389774630 ns/iter (± 2727779) 1.06
es/full/minify/libraries/typescript 2816408248 ns/iter (± 18076544) 2713288368 ns/iter (± 14450660) 1.04
es/full/minify/libraries/victory 616265284 ns/iter (± 6850318) 578762742 ns/iter (± 5093209) 1.06
es/full/minify/libraries/vue 125432708 ns/iter (± 2146878) 121741583 ns/iter (± 400493) 1.03
es/full/codegen/es3 33928 ns/iter (± 75) 33977 ns/iter (± 86) 1.00
es/full/codegen/es5 33965 ns/iter (± 133) 34108 ns/iter (± 130) 1.00
es/full/codegen/es2015 33957 ns/iter (± 66) 34030 ns/iter (± 111) 1.00
es/full/codegen/es2016 33928 ns/iter (± 59) 34037 ns/iter (± 124) 1.00
es/full/codegen/es2017 33944 ns/iter (± 33) 33839 ns/iter (± 127) 1.00
es/full/codegen/es2018 33960 ns/iter (± 67) 33931 ns/iter (± 56) 1.00
es/full/codegen/es2019 33910 ns/iter (± 77) 34061 ns/iter (± 123) 1.00
es/full/codegen/es2020 33946 ns/iter (± 65) 33880 ns/iter (± 49) 1.00
es/full/all/es3 173994458 ns/iter (± 1356656) 173931297 ns/iter (± 1508531) 1.00
es/full/all/es5 167291547 ns/iter (± 1255129) 166084962 ns/iter (± 1246561) 1.01
es/full/all/es2015 127253181 ns/iter (± 704354) 125218056 ns/iter (± 858176) 1.02
es/full/all/es2016 124080545 ns/iter (± 3766658) 123032861 ns/iter (± 676629) 1.01
es/full/all/es2017 125292544 ns/iter (± 2029246) 122932079 ns/iter (± 983234) 1.02
es/full/all/es2018 122303756 ns/iter (± 1315757) 120963141 ns/iter (± 1908620) 1.01
es/full/all/es2019 123268531 ns/iter (± 1328631) 120036201 ns/iter (± 768330) 1.03
es/full/all/es2020 117162123 ns/iter (± 1881073) 116156220 ns/iter (± 667680) 1.01
es/full/parser 536164 ns/iter (± 6935) 533917 ns/iter (± 5755) 1.00
es/full/base/fixer 18149 ns/iter (± 139) 18183 ns/iter (± 141) 1.00
es/full/base/resolver_and_hygiene 84241 ns/iter (± 298) 85317 ns/iter (± 290) 0.99
serialization of serde 290 ns/iter (± 0) 292 ns/iter (± 0) 0.99
css/minify/libraries/bootstrap 29668634 ns/iter (± 192179) 28448191 ns/iter (± 54982) 1.04
css/visitor/compare/clone 1648321 ns/iter (± 10044) 1636611 ns/iter (± 5003) 1.01
css/visitor/compare/visit_mut_span 1778107 ns/iter (± 13868) 1789551 ns/iter (± 5075) 0.99
css/visitor/compare/visit_mut_span_panic 1834048 ns/iter (± 13267) 1851610 ns/iter (± 4338) 0.99
css/visitor/compare/fold_span 2564357 ns/iter (± 18136) 2565248 ns/iter (± 15553) 1.00
css/visitor/compare/fold_span_panic 2763037 ns/iter (± 14066) 2778753 ns/iter (± 9582) 0.99
css/lexer/bootstrap_5_1_3 4438703 ns/iter (± 2189) 4488015 ns/iter (± 4530) 0.99
css/lexer/foundation_6_7_4 3738273 ns/iter (± 4204) 3773597 ns/iter (± 3265) 0.99
css/lexer/tailwind_3_1_1 710928 ns/iter (± 535) 716858 ns/iter (± 471) 0.99
css/parser/bootstrap_5_1_3 19473584 ns/iter (± 70541) 19674453 ns/iter (± 61830) 0.99
css/parser/foundation_6_7_4 15399328 ns/iter (± 57691) 15539129 ns/iter (± 31453) 0.99
css/parser/tailwind_3_1_1 3007304 ns/iter (± 4382) 2983375 ns/iter (± 5449) 1.01
es/codegen/colors 734251 ns/iter (± 401914) 720365 ns/iter (± 394886) 1.02
es/codegen/large 3132492 ns/iter (± 1663991) 2896776 ns/iter (± 1535816) 1.08
es/codegen/with-parser/colors 44917 ns/iter (± 499) 44235 ns/iter (± 540) 1.02
es/codegen/with-parser/large 488673 ns/iter (± 951) 486324 ns/iter (± 1051) 1.00
es/minify/libraries/antd 1212143058 ns/iter (± 18735091) 1186461302 ns/iter (± 13334169) 1.02
es/minify/libraries/d3 260128851 ns/iter (± 5193328) 245575595 ns/iter (± 2261944) 1.06
es/minify/libraries/echarts 991551187 ns/iter (± 17819553) 939303757 ns/iter (± 8000774) 1.06
es/minify/libraries/jquery 76294274 ns/iter (± 694738) 74461265 ns/iter (± 362304) 1.02
es/minify/libraries/lodash 92696582 ns/iter (± 1497234) 89179897 ns/iter (± 932194) 1.04
es/minify/libraries/moment 44559853 ns/iter (± 208339) 43757523 ns/iter (± 263045) 1.02
es/minify/libraries/react 16456662 ns/iter (± 227070) 16077843 ns/iter (± 44122) 1.02
es/minify/libraries/terser 201921654 ns/iter (± 4031874) 190275292 ns/iter (± 1712939) 1.06
es/minify/libraries/three 340642577 ns/iter (± 11202727) 328931203 ns/iter (± 2337942) 1.04
es/minify/libraries/typescript 2440013963 ns/iter (± 44143971) 2321904071 ns/iter (± 18905712) 1.05
es/minify/libraries/victory 509087649 ns/iter (± 16241699) 487765373 ns/iter (± 4122072) 1.04
es/minify/libraries/vue 110299035 ns/iter (± 1353696) 107734922 ns/iter (± 735412) 1.02
es/visitor/compare/clone 1937330 ns/iter (± 12183) 1933907 ns/iter (± 2788) 1.00
es/visitor/compare/visit_mut_span 2286769 ns/iter (± 5670) 2286818 ns/iter (± 4607) 1.00
es/visitor/compare/visit_mut_span_panic 2316402 ns/iter (± 5082) 2327151 ns/iter (± 2833) 1.00
es/visitor/compare/fold_span 3350333 ns/iter (± 4877) 3341391 ns/iter (± 3921) 1.00
es/visitor/compare/fold_span_panic 3484467 ns/iter (± 4688) 3473753 ns/iter (± 6931) 1.00
es/lexer/colors 12515 ns/iter (± 59) 12360 ns/iter (± 10) 1.01
es/lexer/angular 5969104 ns/iter (± 5278) 5997108 ns/iter (± 2443) 1.00
es/lexer/backbone 778482 ns/iter (± 755) 785355 ns/iter (± 2102) 0.99
es/lexer/jquery 4420305 ns/iter (± 5114) 4372856 ns/iter (± 1594) 1.01
es/lexer/jquery mobile 6736834 ns/iter (± 9251) 6705812 ns/iter (± 7137) 1.00
es/lexer/mootools 3480417 ns/iter (± 8424) 3490765 ns/iter (± 993) 1.00
es/lexer/underscore 653920 ns/iter (± 1891) 656066 ns/iter (± 1489) 1.00
es/lexer/three 20634588 ns/iter (± 13016) 20535024 ns/iter (± 11097) 1.00
es/lexer/yui 3763723 ns/iter (± 7135) 3721214 ns/iter (± 25509) 1.01
es/parser/colors 26277 ns/iter (± 80) 26953 ns/iter (± 110) 0.97
es/parser/angular 13404369 ns/iter (± 96217) 13366355 ns/iter (± 74320) 1.00
es/parser/backbone 1973587 ns/iter (± 8599) 1976062 ns/iter (± 10382) 1.00
es/parser/jquery 10778015 ns/iter (± 86825) 10732412 ns/iter (± 55140) 1.00
es/parser/jquery mobile 16510654 ns/iter (± 72769) 16539766 ns/iter (± 66678) 1.00
es/parser/mootools 8315206 ns/iter (± 39291) 8273180 ns/iter (± 15075) 1.01
es/parser/underscore 1693689 ns/iter (± 9952) 1705977 ns/iter (± 9827) 0.99
es/parser/three 47170230 ns/iter (± 883264) 46277257 ns/iter (± 303554) 1.02
es/parser/yui 8162711 ns/iter (± 57389) 8184468 ns/iter (± 27756) 1.00
es/preset-env/usage/builtin_type 138372 ns/iter (± 32184) 138411 ns/iter (± 32138) 1.00
es/preset-env/usage/property 17151 ns/iter (± 64) 17360 ns/iter (± 182) 0.99
es/resolver/typescript 93621645 ns/iter (± 1809770) 88505835 ns/iter (± 938553) 1.06
es/fixer/typescript 66915321 ns/iter (± 322159) 63707575 ns/iter (± 624345) 1.05
es/hygiene/typescript 139451635 ns/iter (± 2840523) 135663766 ns/iter (± 2283789) 1.03
es/resolver_with_hygiene/typescript 252104930 ns/iter (± 4064305) 248935173 ns/iter (± 2637525) 1.01
es/visitor/base-perf/module_clone 62674 ns/iter (± 402) 59741 ns/iter (± 371) 1.05
es/visitor/base-perf/fold_empty 66419 ns/iter (± 372) 63680 ns/iter (± 379) 1.04
es/visitor/base-perf/fold_noop_impl_all 66989 ns/iter (± 586) 63009 ns/iter (± 336) 1.06
es/visitor/base-perf/fold_noop_impl_vec 66870 ns/iter (± 373) 63768 ns/iter (± 539) 1.05
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 57 ns/iter (± 8) 0.98
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 40 ns/iter (± 1) 1
es/visitor/base-perf/boxing_boxed 108 ns/iter (± 0) 111 ns/iter (± 3) 0.97
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 77 ns/iter (± 3) 1.01
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2535 ns/iter (± 13) 2521 ns/iter (± 14) 1.01
es/base/parallel/resolver/typescript 4505677139 ns/iter (± 257011180) 3931804519 ns/iter (± 280344298) 1.15
es/base/parallel/hygiene/typescript 1493234131 ns/iter (± 17856478) 1469243949 ns/iter (± 14920463) 1.02
misc/visitors/time-complexity/time 5 136 ns/iter (± 0) 136 ns/iter (± 10) 1
misc/visitors/time-complexity/time 10 386 ns/iter (± 2) 325 ns/iter (± 1) 1.19
misc/visitors/time-complexity/time 15 675 ns/iter (± 4) 702 ns/iter (± 3) 0.96
misc/visitors/time-complexity/time 20 1077 ns/iter (± 29) 1336 ns/iter (± 4) 0.81
misc/visitors/time-complexity/time 40 3554 ns/iter (± 17) 5016 ns/iter (± 292) 0.71
misc/visitors/time-complexity/time 60 7344 ns/iter (± 12) 10690 ns/iter (± 42) 0.69
es/full-target/es2016 239000 ns/iter (± 671) 238545 ns/iter (± 1511) 1.00
es/full-target/es2017 227041 ns/iter (± 971) 225724 ns/iter (± 537) 1.01
es/full-target/es2018 215371 ns/iter (± 456) 213284 ns/iter (± 1254) 1.01
es2020_nullish_coalescing 71601 ns/iter (± 390) 70408 ns/iter (± 210) 1.02
es2020_optional_chaining 78756 ns/iter (± 237) 82338 ns/iter (± 248) 0.96
es2022_class_properties 119031 ns/iter (± 636) 119390 ns/iter (± 430) 1.00
es2018_object_rest_spread 74758 ns/iter (± 253) 75601 ns/iter (± 246) 0.99
es2019_optional_catch_binding 64200 ns/iter (± 175) 64450 ns/iter (± 213) 1.00
es2017_async_to_generator 63469 ns/iter (± 401) 64796 ns/iter (± 247) 0.98
es2016_exponentiation 69237 ns/iter (± 266) 69508 ns/iter (± 327) 1.00
es2015_arrow 71201 ns/iter (± 261) 71956 ns/iter (± 301) 0.99
es2015_block_scoped_fn 68818 ns/iter (± 215) 68402 ns/iter (± 338) 1.01
es2015_block_scoping 120380 ns/iter (± 698) 124663 ns/iter (± 266) 0.97

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

Please sign in to comment.