Skip to content

Commit 122d14c

Browse files
authoredAug 27, 2023
fix(es/codegen): Fix placing of comments of yield arguments (#7858)
**Description:** Looks like the bug I ran into had nothing to do with the changes in #7856, since it's reproducible without it. Looks like it might have only surfaced now because #7853 changed the default value of `jsc.minify.format.comments`? Added a minimal test case here with the expected result. Here's the actual output: ```js export var padding = ''; export function exec2({ commands }) { return __awaiter(this, void 0, void 0, function*() { for(let i2 = 0; i2 < commands.length; i2++){ let command = commands[i2]; yield // some-comment function({ command }) { command(); }({ command, handleError }); } }); } ``` The comment ends up getting added after the yield, which makes the output invalid. Going to see if I can figure out a fix tomorrow, but let me know if you have any ideas on where to start looking in the meantime!
1 parent 2be46c9 commit 122d14c

File tree

4 files changed

+68
-1
lines changed

4 files changed

+68
-1
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"isModule": true,
3+
"jsc": {
4+
"target": "es2022",
5+
"transform": {
6+
"optimizer": {
7+
"simplify": true,
8+
}
9+
},
10+
"minify": {
11+
"format": {
12+
"comments": true
13+
},
14+
"compress": true,
15+
"mangle": false
16+
},
17+
},
18+
"minify": false,
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
export var padding = ''
2+
3+
// some-comment
4+
function exec1({
5+
command,
6+
}) {
7+
command();
8+
}
9+
10+
export function exec2({
11+
commands,
12+
}) {
13+
return __awaiter(this, void 0, void 0, function* () {
14+
for (let i2 = 0; i2 < commands.length; i2++) {
15+
const command = commands[i2]
16+
yield exec1({
17+
command,
18+
handleError,
19+
})
20+
}
21+
})
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export var padding = '';
2+
export function exec2({ commands }) {
3+
return __awaiter(this, void 0, void 0, function*() {
4+
for(let i2 = 0; i2 < commands.length; i2++){
5+
let command = commands[i2];
6+
yield(// some-comment
7+
function({ command }) {
8+
command();
9+
}({
10+
command,
11+
handleError
12+
}));
13+
}
14+
});
15+
}

‎crates/swc_ecma_codegen/src/lib.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -1879,12 +1879,23 @@ where
18791879
}
18801880

18811881
if let Some(ref arg) = node.arg {
1882-
if !node.delegate && arg.starts_with_alpha_num() {
1882+
let need_paren = node
1883+
.arg
1884+
.as_deref()
1885+
.map(|expr| self.has_leading_comment(expr))
1886+
.unwrap_or(false);
1887+
if need_paren {
1888+
punct!("(")
1889+
} else if !node.delegate && arg.starts_with_alpha_num() {
18831890
space!()
18841891
} else {
18851892
formatting_space!()
18861893
}
1894+
18871895
emit!(node.arg);
1896+
if need_paren {
1897+
punct!(")")
1898+
}
18881899
}
18891900
}
18901901

1 commit comments

Comments
 (1)

github-actions[bot] commented on Aug 28, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 122d14c Previous: 3180e68 Ratio
es/full/bugs-1 282549 ns/iter (± 2097) 279239 ns/iter (± 9706) 1.01
es/full/minify/libraries/antd 1309068988 ns/iter (± 13323685) 1269350199 ns/iter (± 8404439) 1.03
es/full/minify/libraries/d3 277098494 ns/iter (± 3304887) 266403057 ns/iter (± 3844065) 1.04
es/full/minify/libraries/echarts 1054251405 ns/iter (± 9237734) 1007143020 ns/iter (± 10383260) 1.05
es/full/minify/libraries/jquery 83211500 ns/iter (± 231621) 83081750 ns/iter (± 177381) 1.00
es/full/minify/libraries/lodash 96130556 ns/iter (± 276589) 95500966 ns/iter (± 937089) 1.01
es/full/minify/libraries/moment 49411606 ns/iter (± 150303) 48755652 ns/iter (± 486841) 1.01
es/full/minify/libraries/react 17769782 ns/iter (± 30584) 17832708 ns/iter (± 73220) 1.00
es/full/minify/libraries/terser 215516111 ns/iter (± 2900997) 214076958 ns/iter (± 1551728) 1.01
es/full/minify/libraries/three 383080800 ns/iter (± 6351872) 372113013 ns/iter (± 2706929) 1.03
es/full/minify/libraries/typescript 2610911931 ns/iter (± 13546677) 2547881365 ns/iter (± 12126355) 1.02
es/full/minify/libraries/victory 555601537 ns/iter (± 6824572) 556597900 ns/iter (± 8006176) 1.00
es/full/minify/libraries/vue 118588767 ns/iter (± 706779) 117586296 ns/iter (± 698901) 1.01
es/full/codegen/es3 35718 ns/iter (± 150) 33351 ns/iter (± 493) 1.07
es/full/codegen/es5 35665 ns/iter (± 125) 33134 ns/iter (± 423) 1.08
es/full/codegen/es2015 35695 ns/iter (± 90) 33142 ns/iter (± 425) 1.08
es/full/codegen/es2016 35812 ns/iter (± 268) 33195 ns/iter (± 366) 1.08
es/full/codegen/es2017 35836 ns/iter (± 78) 33366 ns/iter (± 400) 1.07
es/full/codegen/es2018 35688 ns/iter (± 108) 33061 ns/iter (± 393) 1.08
es/full/codegen/es2019 35849 ns/iter (± 150) 33174 ns/iter (± 394) 1.08
es/full/codegen/es2020 35724 ns/iter (± 89) 33176 ns/iter (± 487) 1.08
es/full/all/es3 169061895 ns/iter (± 2273529) 165665985 ns/iter (± 1272035) 1.02
es/full/all/es5 161942356 ns/iter (± 1999496) 157538508 ns/iter (± 976019) 1.03
es/full/all/es2015 120529735 ns/iter (± 784725) 117727490 ns/iter (± 1540455) 1.02
es/full/all/es2016 120046738 ns/iter (± 385948) 116116184 ns/iter (± 1504825) 1.03
es/full/all/es2017 119784614 ns/iter (± 445334) 115383260 ns/iter (± 1127308) 1.04
es/full/all/es2018 117522839 ns/iter (± 1121820) 113919698 ns/iter (± 1092483) 1.03
es/full/all/es2019 116661824 ns/iter (± 817609) 113967479 ns/iter (± 587876) 1.02
es/full/all/es2020 112066018 ns/iter (± 326063) 108806396 ns/iter (± 1455101) 1.03
es/full/parser 495085 ns/iter (± 4584) 471958 ns/iter (± 5520) 1.05
es/full/base/fixer 17727 ns/iter (± 42) 17050 ns/iter (± 130) 1.04
es/full/base/resolver_and_hygiene 80948 ns/iter (± 222) 78176 ns/iter (± 992) 1.04
serialization of serde 300 ns/iter (± 0) 281 ns/iter (± 2) 1.07
css/minify/libraries/bootstrap 28412307 ns/iter (± 46326) 27547746 ns/iter (± 360680) 1.03
css/visitor/compare/clone 1638751 ns/iter (± 3239) 1612043 ns/iter (± 16031) 1.02
css/visitor/compare/visit_mut_span 1760863 ns/iter (± 5204) 1740553 ns/iter (± 17408) 1.01
css/visitor/compare/visit_mut_span_panic 1841640 ns/iter (± 9752) 1781156 ns/iter (± 17268) 1.03
css/visitor/compare/fold_span 2579936 ns/iter (± 8898) 2498417 ns/iter (± 29757) 1.03
css/visitor/compare/fold_span_panic 2762375 ns/iter (± 10253) 2729461 ns/iter (± 27901) 1.01
css/lexer/bootstrap_5_1_3 4556861 ns/iter (± 5831) 4436277 ns/iter (± 34037) 1.03
css/lexer/foundation_6_7_4 3838170 ns/iter (± 3779) 3744934 ns/iter (± 57660) 1.02
css/lexer/tailwind_3_1_1 731191 ns/iter (± 906) 712308 ns/iter (± 11807) 1.03
css/parser/bootstrap_5_1_3 19025804 ns/iter (± 55517) 20107226 ns/iter (± 265679) 0.95
css/parser/foundation_6_7_4 15307436 ns/iter (± 28143) 16301083 ns/iter (± 220262) 0.94
css/parser/tailwind_3_1_1 2953023 ns/iter (± 7584) 3084864 ns/iter (± 37369) 0.96
es/codegen/colors 734450 ns/iter (± 399912) 740634 ns/iter (± 395303) 0.99
es/codegen/large 3132427 ns/iter (± 1658604) 3045542 ns/iter (± 1610739) 1.03
es/codegen/with-parser/colors 46528 ns/iter (± 211) 43870 ns/iter (± 656) 1.06
es/codegen/with-parser/large 497380 ns/iter (± 1914) 465862 ns/iter (± 7632) 1.07
es/minify/libraries/antd 1125265741 ns/iter (± 17818056) 1106509562 ns/iter (± 11608711) 1.02
es/minify/libraries/d3 239441725 ns/iter (± 2255735) 236650181 ns/iter (± 1048970) 1.01
es/minify/libraries/echarts 898881952 ns/iter (± 11459203) 880164961 ns/iter (± 8058183) 1.02
es/minify/libraries/jquery 72463554 ns/iter (± 199328) 72578864 ns/iter (± 269596) 1.00
es/minify/libraries/lodash 86618032 ns/iter (± 181620) 86046182 ns/iter (± 594228) 1.01
es/minify/libraries/moment 43108660 ns/iter (± 81033) 42580131 ns/iter (± 611535) 1.01
es/minify/libraries/react 15916830 ns/iter (± 48101) 15736387 ns/iter (± 224383) 1.01
es/minify/libraries/terser 184037684 ns/iter (± 359135) 182733357 ns/iter (± 1177290) 1.01
es/minify/libraries/three 319919276 ns/iter (± 5573081) 313567065 ns/iter (± 1708900) 1.02
es/minify/libraries/typescript 2236691584 ns/iter (± 20321931) 2192073256 ns/iter (± 10259651) 1.02
es/minify/libraries/victory 476707992 ns/iter (± 7032639) 453671354 ns/iter (± 3309769) 1.05
es/minify/libraries/vue 105150401 ns/iter (± 179258) 104348221 ns/iter (± 724794) 1.01
es/visitor/compare/clone 1927717 ns/iter (± 9092) 1897032 ns/iter (± 26406) 1.02
es/visitor/compare/visit_mut_span 2246417 ns/iter (± 4407) 2160795 ns/iter (± 31810) 1.04
es/visitor/compare/visit_mut_span_panic 2322927 ns/iter (± 3290) 2257722 ns/iter (± 26162) 1.03
es/visitor/compare/fold_span 3349594 ns/iter (± 8805) 3233771 ns/iter (± 37173) 1.04
es/visitor/compare/fold_span_panic 3475143 ns/iter (± 7675) 3397446 ns/iter (± 51500) 1.02
es/lexer/colors 13209 ns/iter (± 4) 12965 ns/iter (± 224) 1.02
es/lexer/angular 6146892 ns/iter (± 1447) 5955308 ns/iter (± 74247) 1.03
es/lexer/backbone 796058 ns/iter (± 1017) 750341 ns/iter (± 5205) 1.06
es/lexer/jquery 4527795 ns/iter (± 3383) 4343593 ns/iter (± 60251) 1.04
es/lexer/jquery mobile 6889167 ns/iter (± 14923) 6640757 ns/iter (± 70517) 1.04
es/lexer/mootools 3596619 ns/iter (± 4858) 3443954 ns/iter (± 41525) 1.04
es/lexer/underscore 672436 ns/iter (± 487) 635340 ns/iter (± 6061) 1.06
es/lexer/three 21765468 ns/iter (± 34870) 20579040 ns/iter (± 192134) 1.06
es/lexer/yui 3866533 ns/iter (± 3062) 3657260 ns/iter (± 43591) 1.06
es/parser/colors 28034 ns/iter (± 39) 25962 ns/iter (± 501) 1.08
es/parser/angular 13601590 ns/iter (± 68046) 12967541 ns/iter (± 165994) 1.05
es/parser/backbone 2014319 ns/iter (± 7376) 1901893 ns/iter (± 31378) 1.06
es/parser/jquery 11046054 ns/iter (± 58279) 10418478 ns/iter (± 137224) 1.06
es/parser/jquery mobile 16830068 ns/iter (± 62821) 15909266 ns/iter (± 221344) 1.06
es/parser/mootools 8482447 ns/iter (± 19837) 8016606 ns/iter (± 100191) 1.06
es/parser/underscore 1747926 ns/iter (± 9562) 1637926 ns/iter (± 17536) 1.07
es/parser/three 48041127 ns/iter (± 646178) 44316823 ns/iter (± 412227) 1.08
es/parser/yui 8301422 ns/iter (± 42986) 7990828 ns/iter (± 90545) 1.04
es/preset-env/usage/builtin_type 141062 ns/iter (± 32383) 132970 ns/iter (± 31816) 1.06
es/preset-env/usage/property 17493 ns/iter (± 64) 16264 ns/iter (± 194) 1.08
es/resolver/typescript 87462909 ns/iter (± 1278947) 84503140 ns/iter (± 2557963) 1.04
es/fixer/typescript 64193876 ns/iter (± 972549) 60462928 ns/iter (± 550513) 1.06
es/hygiene/typescript 131737453 ns/iter (± 1337038) 125512609 ns/iter (± 873512) 1.05
es/resolver_with_hygiene/typescript 241899902 ns/iter (± 914013) 231184326 ns/iter (± 1686676) 1.05
es/visitor/base-perf/module_clone 61237 ns/iter (± 737) 57849 ns/iter (± 760) 1.06
es/visitor/base-perf/fold_empty 64134 ns/iter (± 180) 61048 ns/iter (± 999) 1.05
es/visitor/base-perf/fold_noop_impl_all 64604 ns/iter (± 161) 61942 ns/iter (± 727) 1.04
es/visitor/base-perf/fold_noop_impl_vec 65445 ns/iter (± 288) 61098 ns/iter (± 528) 1.07
es/visitor/base-perf/boxing_boxed_clone 58 ns/iter (± 0) 54 ns/iter (± 0) 1.07
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 39 ns/iter (± 0) 1.03
es/visitor/base-perf/boxing_boxed 108 ns/iter (± 0) 109 ns/iter (± 1) 0.99
es/visitor/base-perf/boxing_unboxed 77 ns/iter (± 0) 76 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2657 ns/iter (± 13) 2600 ns/iter (± 43) 1.02
es/base/parallel/resolver/typescript 3858910646 ns/iter (± 313809348) 3683720339 ns/iter (± 304707103) 1.05
es/base/parallel/hygiene/typescript 1473745519 ns/iter (± 29331426) 1415863347 ns/iter (± 19165220) 1.04
misc/visitors/time-complexity/time 5 151 ns/iter (± 0) 130 ns/iter (± 2) 1.16
misc/visitors/time-complexity/time 10 432 ns/iter (± 4) 371 ns/iter (± 9) 1.16
misc/visitors/time-complexity/time 15 895 ns/iter (± 8) 657 ns/iter (± 10) 1.36
misc/visitors/time-complexity/time 20 1453 ns/iter (± 0) 1044 ns/iter (± 13) 1.39
misc/visitors/time-complexity/time 40 4362 ns/iter (± 8) 3397 ns/iter (± 48) 1.28
misc/visitors/time-complexity/time 60 10613 ns/iter (± 807) 7113 ns/iter (± 65) 1.49
es/full-target/es2016 229476 ns/iter (± 696) 227072 ns/iter (± 1750) 1.01
es/full-target/es2017 220992 ns/iter (± 388) 212160 ns/iter (± 3351) 1.04
es/full-target/es2018 207327 ns/iter (± 719) 199937 ns/iter (± 2462) 1.04
es2020_nullish_coalescing 71554 ns/iter (± 221) 68914 ns/iter (± 996) 1.04
es2020_optional_chaining 79458 ns/iter (± 354) 78116 ns/iter (± 1263) 1.02
es2022_class_properties 114709 ns/iter (± 216) 111283 ns/iter (± 1474) 1.03
es2018_object_rest_spread 75937 ns/iter (± 565) 74534 ns/iter (± 603) 1.02
es2019_optional_catch_binding 65066 ns/iter (± 387) 64184 ns/iter (± 633) 1.01
es2017_async_to_generator 65317 ns/iter (± 367) 62363 ns/iter (± 749) 1.05
es2016_exponentiation 65956 ns/iter (± 228) 67158 ns/iter (± 684) 0.98
es2015_arrow 71672 ns/iter (± 224) 69776 ns/iter (± 1175) 1.03
es2015_block_scoped_fn 69516 ns/iter (± 210) 66461 ns/iter (± 1084) 1.05
es2015_block_scoping 120305 ns/iter (± 646) 120502 ns/iter (± 1374) 1.00

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

Please sign in to comment.