Skip to content

Commit

Permalink
fix(es/codegen): Don't print trailing coma for a rest argument (#6610)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #6589.
  • Loading branch information
alexander-akait committed Dec 10, 2022
1 parent fc21895 commit 68d76af
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 12 deletions.
13 changes: 1 addition & 12 deletions crates/swc_ecma_codegen/src/lib.rs
Expand Up @@ -2481,23 +2481,12 @@ where
self.emit_leading_comments_of_span(node.span(), false)?;

srcmap!(node, true);

let is_last_rest = match node.props.last() {
Some(ObjectPatProp::Rest(..)) => true,
_ => false,
};
let format = if is_last_rest {
ListFormat::ObjectBindingPatternElements ^ ListFormat::AllowTrailingComma
} else {
ListFormat::ObjectBindingPatternElements
};

punct!("{");

self.emit_list(
node.span(),
Some(&node.props),
format | ListFormat::CanSkipTrailingComma,
ListFormat::ObjectBindingPatternElements | ListFormat::CanSkipTrailingComma,
)?;

punct!("}");
Expand Down
14 changes: 14 additions & 0 deletions crates/swc_ecma_codegen/tests/fixture/issue-6589/js/input.js
@@ -0,0 +1,14 @@
export function func({a, b, ...rest}) {
console.log(a,b, rest)
}

const other = { unknow: "foo" }

let foo = {
...other,
bar: "baz"
};
let bar = {
bar: "baz",
...other
};
14 changes: 14 additions & 0 deletions crates/swc_ecma_codegen/tests/fixture/issue-6589/js/output.js
@@ -0,0 +1,14 @@
export function func({ a , b , ...rest }) {
console.log(a, b, rest);
}
const other = {
unknow: "foo"
};
let foo = {
...other,
bar: "baz"
};
let bar = {
bar: "baz",
...other
};
@@ -0,0 +1 @@
export function func({a,b,...rest}){console.log(a,b,rest)}const other={unknow:"foo"};let foo={...other,bar:"baz"};let bar={bar:"baz",...other};
21 changes: 21 additions & 0 deletions crates/swc_ecma_codegen/tests/fixture/issue-6589/ts/input.ts
@@ -0,0 +1,21 @@
export function func({
a,
b,
...rest
}: {
a: string,
b: string,
}) {
console.log(a,b, rest)
}

const other = { unknow: "foo" }

let foo = {
...other,
bar: "baz"
};
let bar = {
bar: "baz",
...other
};
17 changes: 17 additions & 0 deletions crates/swc_ecma_codegen/tests/fixture/issue-6589/ts/output.ts
@@ -0,0 +1,17 @@
export function func({ a , b , ...rest }: {
a: string;
b: string;
}) {
console.log(a, b, rest);
}
const other = {
unknow: "foo"
};
let foo = {
...other,
bar: "baz"
};
let bar = {
bar: "baz",
...other
};

1 comment on commit 68d76af

@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: 68d76af Previous: c44f1d0 Ratio
es/full/bugs-1 309500 ns/iter (± 8890) 299750 ns/iter (± 12569) 1.03
es/full/minify/libraries/antd 1785622375 ns/iter (± 19421733) 1655797100 ns/iter (± 21058812) 1.08
es/full/minify/libraries/d3 363193293 ns/iter (± 4015670) 350193720 ns/iter (± 4295993) 1.04
es/full/minify/libraries/echarts 1499831082 ns/iter (± 13802456) 1423267861 ns/iter (± 15508396) 1.05
es/full/minify/libraries/jquery 101008667 ns/iter (± 4769217) 94485374 ns/iter (± 1514669) 1.07
es/full/minify/libraries/lodash 117633045 ns/iter (± 2586140) 113153583 ns/iter (± 1771164) 1.04
es/full/minify/libraries/moment 54831554 ns/iter (± 418798) 54493292 ns/iter (± 1011220) 1.01
es/full/minify/libraries/react 21026877 ns/iter (± 439541) 19764963 ns/iter (± 189262) 1.06
es/full/minify/libraries/terser 301450703 ns/iter (± 7505848) 264571326 ns/iter (± 6228607) 1.14
es/full/minify/libraries/three 541583696 ns/iter (± 18196176) 491042786 ns/iter (± 8858485) 1.10
es/full/minify/libraries/typescript 3375349541 ns/iter (± 29193818) 3174248560 ns/iter (± 21727834) 1.06
es/full/minify/libraries/victory 787946662 ns/iter (± 12073245) 706279499 ns/iter (± 11058687) 1.12
es/full/minify/libraries/vue 141104448 ns/iter (± 2583404) 138482946 ns/iter (± 1784285) 1.02
es/full/codegen/es3 28072 ns/iter (± 30) 27952 ns/iter (± 64) 1.00
es/full/codegen/es5 28052 ns/iter (± 36) 27955 ns/iter (± 20) 1.00
es/full/codegen/es2015 28064 ns/iter (± 35) 27953 ns/iter (± 53) 1.00
es/full/codegen/es2016 27992 ns/iter (± 74) 27940 ns/iter (± 88) 1.00
es/full/codegen/es2017 28053 ns/iter (± 59) 27964 ns/iter (± 55) 1.00
es/full/codegen/es2018 28050 ns/iter (± 30) 28070 ns/iter (± 46) 1.00
es/full/codegen/es2019 28062 ns/iter (± 72) 28055 ns/iter (± 87) 1.00
es/full/codegen/es2020 28007 ns/iter (± 94) 28058 ns/iter (± 39) 1.00
es/full/all/es3 173413469 ns/iter (± 4041070) 169693381 ns/iter (± 3732036) 1.02
es/full/all/es5 161782484 ns/iter (± 2919133) 163145482 ns/iter (± 4379997) 0.99
es/full/all/es2015 123603614 ns/iter (± 2284542) 121953688 ns/iter (± 1332736) 1.01
es/full/all/es2016 122558989 ns/iter (± 2378668) 121029934 ns/iter (± 1367890) 1.01
es/full/all/es2017 120027042 ns/iter (± 2390699) 119666816 ns/iter (± 1607577) 1.00
es/full/all/es2018 117986125 ns/iter (± 767165) 118206239 ns/iter (± 1037672) 1.00
es/full/all/es2019 119810494 ns/iter (± 1659436) 117003895 ns/iter (± 1759131) 1.02
es/full/all/es2020 114184105 ns/iter (± 1761387) 112570376 ns/iter (± 1151914) 1.01
es/full/parser 507390 ns/iter (± 8545) 522076 ns/iter (± 7756) 0.97
es/full/base/fixer 21855 ns/iter (± 16) 21400 ns/iter (± 21) 1.02
es/full/base/resolver_and_hygiene 77488 ns/iter (± 83) 77733 ns/iter (± 65) 1.00
serialization of ast node 140 ns/iter (± 0) 140 ns/iter (± 0) 1
serialization of serde 123 ns/iter (± 0) 130 ns/iter (± 0) 0.95
css/minify/libraries/bootstrap 27510141 ns/iter (± 129780) 28245535 ns/iter (± 331503) 0.97
css/visitor/compare/clone 2101684 ns/iter (± 28773) 2113619 ns/iter (± 11178) 0.99
css/visitor/compare/visit_mut_span 2326054 ns/iter (± 33294) 2298884 ns/iter (± 9584) 1.01
css/visitor/compare/visit_mut_span_panic 2372116 ns/iter (± 30756) 2346178 ns/iter (± 9580) 1.01
css/visitor/compare/fold_span 3023661 ns/iter (± 25475) 3023192 ns/iter (± 26549) 1.00
css/visitor/compare/fold_span_panic 3228231 ns/iter (± 43716) 3175026 ns/iter (± 21658) 1.02
css/lexer/bootstrap_5_1_3 5328744 ns/iter (± 1288) 5348786 ns/iter (± 2579) 1.00
css/lexer/foundation_6_7_4 4483925 ns/iter (± 812) 4482825 ns/iter (± 1285) 1.00
css/lexer/tailwind_3_1_1 845583 ns/iter (± 291) 849252 ns/iter (± 234) 1.00
css/parser/bootstrap_5_1_3 21629541 ns/iter (± 201053) 21451931 ns/iter (± 228628) 1.01
css/parser/foundation_6_7_4 17242871 ns/iter (± 189565) 16927841 ns/iter (± 73795) 1.02
css/parser/tailwind_3_1_1 3250759 ns/iter (± 2731) 3250858 ns/iter (± 2604) 1.00
es/codegen/colors 321731 ns/iter (± 180268) 330422 ns/iter (± 184940) 0.97
es/codegen/large 1077568 ns/iter (± 543144) 1238575 ns/iter (± 627921) 0.87
es/codegen/with-parser/colors 45110 ns/iter (± 66) 44948 ns/iter (± 129) 1.00
es/codegen/with-parser/large 505000 ns/iter (± 1410) 507320 ns/iter (± 21317) 1.00
es/minify/libraries/antd 1601537500 ns/iter (± 14328386) 1439513420 ns/iter (± 22381028) 1.11
es/minify/libraries/d3 323646323 ns/iter (± 6703742) 297245383 ns/iter (± 11072411) 1.09
es/minify/libraries/echarts 1322868829 ns/iter (± 21440376) 1219612246 ns/iter (± 16556044) 1.08
es/minify/libraries/jquery 82878396 ns/iter (± 1473350) 79833456 ns/iter (± 706014) 1.04
es/minify/libraries/lodash 99057116 ns/iter (± 1061789) 98479629 ns/iter (± 1582805) 1.01
es/minify/libraries/moment 47459124 ns/iter (± 643574) 46725777 ns/iter (± 248932) 1.02
es/minify/libraries/react 17657755 ns/iter (± 126388) 17263406 ns/iter (± 62809) 1.02
es/minify/libraries/terser 245979445 ns/iter (± 5819705) 219595865 ns/iter (± 5293624) 1.12
es/minify/libraries/three 429308618 ns/iter (± 11239449) 392181557 ns/iter (± 7679417) 1.09
es/minify/libraries/typescript 2907883240 ns/iter (± 19861237) 2653796978 ns/iter (± 23581529) 1.10
es/minify/libraries/victory 653518991 ns/iter (± 12362414) 587346535 ns/iter (± 9011120) 1.11
es/minify/libraries/vue 125166408 ns/iter (± 4444821) 118125981 ns/iter (± 974979) 1.06
es/visitor/compare/clone 2397529 ns/iter (± 29818) 2456357 ns/iter (± 19828) 0.98
es/visitor/compare/visit_mut_span 2899799 ns/iter (± 49079) 2818923 ns/iter (± 8511) 1.03
es/visitor/compare/visit_mut_span_panic 2984127 ns/iter (± 216880) 2879485 ns/iter (± 6524) 1.04
es/visitor/compare/fold_span 4272517 ns/iter (± 102367) 3932673 ns/iter (± 13949) 1.09
es/visitor/compare/fold_span_panic 4504484 ns/iter (± 101717) 4103473 ns/iter (± 5868) 1.10
es/lexer/colors 17375 ns/iter (± 35) 17390 ns/iter (± 10) 1.00
es/lexer/angular 8216208 ns/iter (± 5175) 8245093 ns/iter (± 6941) 1.00
es/lexer/backbone 1075085 ns/iter (± 810) 1077432 ns/iter (± 1221) 1.00
es/lexer/jquery 5941258 ns/iter (± 981) 5968914 ns/iter (± 1843) 1.00
es/lexer/jquery mobile 9153348 ns/iter (± 4000) 9203236 ns/iter (± 9966) 0.99
es/lexer/mootools 4654357 ns/iter (± 2145) 4694384 ns/iter (± 1685) 0.99
es/lexer/underscore 892964 ns/iter (± 315) 898016 ns/iter (± 397) 0.99
es/lexer/three 27843646 ns/iter (± 32904) 27964494 ns/iter (± 34529) 1.00
es/lexer/yui 5053199 ns/iter (± 2172) 5066510 ns/iter (± 2289) 1.00
es/parser/colors 31573 ns/iter (± 171) 31330 ns/iter (± 127) 1.01
es/parser/angular 17584665 ns/iter (± 292605) 16550825 ns/iter (± 352763) 1.06
es/parser/backbone 2335748 ns/iter (± 12241) 2356527 ns/iter (± 13405) 0.99
es/parser/jquery 13109596 ns/iter (± 260793) 12679933 ns/iter (± 72098) 1.03
es/parser/jquery mobile 22639468 ns/iter (± 775850) 20433794 ns/iter (± 276194) 1.11
es/parser/mootools 9960080 ns/iter (± 86257) 9699247 ns/iter (± 49281) 1.03
es/parser/underscore 1989959 ns/iter (± 24174) 1983114 ns/iter (± 9814) 1.00
es/parser/three 62514312 ns/iter (± 183733) 59302465 ns/iter (± 282824) 1.05
es/parser/yui 10183350 ns/iter (± 149235) 9710236 ns/iter (± 58310) 1.05
es/preset-env/usage/builtin_type 138345 ns/iter (± 30163) 140272 ns/iter (± 31610) 0.99
es/preset-env/usage/property 22225 ns/iter (± 75) 21671 ns/iter (± 116) 1.03
es/resolver/typescript 118132506 ns/iter (± 1478479) 109954138 ns/iter (± 4524137) 1.07
es/fixer/typescript 96885795 ns/iter (± 4169814) 83426341 ns/iter (± 1260702) 1.16
es/hygiene/typescript 197849063 ns/iter (± 2548424) 165806139 ns/iter (± 1657961) 1.19
es/resolver_with_hygiene/typescript 329608152 ns/iter (± 3537702) 294166959 ns/iter (± 3540360) 1.12
es/visitor/base-perf/module_clone 74521 ns/iter (± 1108) 75161 ns/iter (± 1311) 0.99
es/visitor/base-perf/fold_empty 85456 ns/iter (± 1590) 86035 ns/iter (± 1595) 0.99
es/visitor/base-perf/fold_noop_impl_all 86071 ns/iter (± 950) 86423 ns/iter (± 1699) 1.00
es/visitor/base-perf/fold_noop_impl_vec 86714 ns/iter (± 1563) 86333 ns/iter (± 1693) 1.00
es/visitor/base-perf/boxing_boxed_clone 54 ns/iter (± 0) 54 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 58 ns/iter (± 0) 58 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 100 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed 102 ns/iter (± 0) 101 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_contains_this 3569 ns/iter (± 49) 3389 ns/iter (± 40) 1.05
es/base/parallel/resolver/typescript 5117522878 ns/iter (± 419413850) 5191611385 ns/iter (± 411745247) 0.99
es/base/parallel/hygiene/typescript 2249103124 ns/iter (± 43087139) 2008468770 ns/iter (± 26010890) 1.12
misc/visitors/time-complexity/time 5 108 ns/iter (± 0) 97 ns/iter (± 0) 1.11
misc/visitors/time-complexity/time 10 334 ns/iter (± 2) 319 ns/iter (± 0) 1.05
misc/visitors/time-complexity/time 15 680 ns/iter (± 1) 671 ns/iter (± 6) 1.01
misc/visitors/time-complexity/time 20 1260 ns/iter (± 3) 1217 ns/iter (± 4) 1.04
misc/visitors/time-complexity/time 40 6757 ns/iter (± 19) 6260 ns/iter (± 53) 1.08
misc/visitors/time-complexity/time 60 17253 ns/iter (± 43) 15592 ns/iter (± 6) 1.11
es/full-target/es2016 186611 ns/iter (± 353) 187747 ns/iter (± 533) 0.99
es/full-target/es2017 180451 ns/iter (± 701) 180815 ns/iter (± 677) 1.00
es/full-target/es2018 169235 ns/iter (± 353) 169976 ns/iter (± 395) 1.00
es2020_nullish_coalescing 65632 ns/iter (± 534) 65498 ns/iter (± 293) 1.00
es2020_optional_chaining 94230 ns/iter (± 3264) 94027 ns/iter (± 1027) 1.00
es2022_class_properties 92211 ns/iter (± 162) 92141 ns/iter (± 277) 1.00
es2018_object_rest_spread 69903 ns/iter (± 121) 70081 ns/iter (± 106) 1.00
es2019_optional_catch_binding 59440 ns/iter (± 108) 59585 ns/iter (± 153) 1.00
es2017_async_to_generator 59945 ns/iter (± 107) 60353 ns/iter (± 99) 0.99
es2016_exponentiation 63393 ns/iter (± 92) 63251 ns/iter (± 109) 1.00
es2015_arrow 68274 ns/iter (± 271) 69017 ns/iter (± 251) 0.99
es2015_block_scoped_fn 64710 ns/iter (± 56) 64291 ns/iter (± 167) 1.01
es2015_block_scoping 147155 ns/iter (± 10420) 155402 ns/iter (± 10920) 0.95
es2015_classes 115268 ns/iter (± 502) 115588 ns/iter (± 537) 1.00
es2015_computed_props 59661 ns/iter (± 148) 59718 ns/iter (± 71) 1.00
es2015_destructuring 114739 ns/iter (± 235) 113850 ns/iter (± 202) 1.01
es2015_duplicate_keys 62664 ns/iter (± 109) 62370 ns/iter (± 130) 1.00
es2015_parameters 77775 ns/iter (± 196) 77590 ns/iter (± 118) 1.00
es2015_fn_name 66046 ns/iter (± 668) 65676 ns/iter (± 579) 1.01
es2015_for_of 63035 ns/iter (± 100) 62860 ns/iter (± 98) 1.00
es2015_instanceof 61479 ns/iter (± 87) 61701 ns/iter (± 134) 1.00
es2015_shorthand_property 59949 ns/iter (± 151) 59565 ns/iter (± 92) 1.01
es2015_spread 59402 ns/iter (± 116) 59966 ns/iter (± 127) 0.99
es2015_sticky_regex 60862 ns/iter (± 117) 60767 ns/iter (± 107) 1.00
es2015_typeof_symbol 60999 ns/iter (± 80) 60753 ns/iter (± 288) 1.00
es/transform/baseline/base 50560 ns/iter (± 126) 50328 ns/iter (± 144) 1.00
es/transform/baseline/common_reserved_word 61196 ns/iter (± 130) 61173 ns/iter (± 74) 1.00
es/transform/baseline/common_typescript 167942 ns/iter (± 315) 141026 ns/iter (± 2459) 1.19
es/target/es3 166917 ns/iter (± 316) 167499 ns/iter (± 338) 1.00
es/target/es2015 627843 ns/iter (± 1156) 629973 ns/iter (± 1411) 1.00
es/target/es2016 63554 ns/iter (± 99) 63436 ns/iter (± 142) 1.00
es/target/es2017 60144 ns/iter (± 72) 60560 ns/iter (± 76) 0.99
es/target/es2018 79923 ns/iter (± 79) 80549 ns/iter (± 139) 0.99
es/target/es2020 130809 ns/iter (± 170) 131302 ns/iter (± 210) 1.00
babelify-only 675258 ns/iter (± 2132) 664806 ns/iter (± 1739) 1.02
parse_and_babelify_angular 42947157 ns/iter (± 614219) 44256109 ns/iter (± 1160180) 0.97
parse_and_babelify_backbone 5759263 ns/iter (± 212817) 5581128 ns/iter (± 147765) 1.03
parse_and_babelify_jquery 35307489 ns/iter (± 1046612) 34560501 ns/iter (± 1150369) 1.02
parse_and_babelify_jquery_mobile 60095423 ns/iter (± 1067014) 58873419 ns/iter (± 1316190) 1.02
parse_and_babelify_mootools 35816031 ns/iter (± 833065) 35498845 ns/iter (± 1136604) 1.01
parse_and_babelify_underscore 4365319 ns/iter (± 113785) 4536196 ns/iter (± 129838) 0.96
parse_and_babelify_yui 34457571 ns/iter (± 335326) 33410617 ns/iter (± 363577) 1.03
html/minify/document/css_spec 44819001 ns/iter (± 706270) 45316638 ns/iter (± 253833) 0.99
html/minify/document/github 18717011 ns/iter (± 80708) 18738219 ns/iter (± 175366) 1.00
html/minify/document/stackoverflow 16491200 ns/iter (± 68855) 16400210 ns/iter (± 36376) 1.01
html/minify/document_fragment/css_spec 43198065 ns/iter (± 562121) 43461200 ns/iter (± 291797) 0.99
html/minify/document_fragment/github 18073932 ns/iter (± 135280) 18030153 ns/iter (± 38166) 1.00
html/minify/document_fragment/stackoverflow 15951259 ns/iter (± 101112) 15988277 ns/iter (± 126052) 1.00
html/document/visitor/compare/clone 343243 ns/iter (± 1503) 344361 ns/iter (± 1701) 1.00
html/document/visitor/compare/visit_mut_span 367020 ns/iter (± 2235) 366846 ns/iter (± 2075) 1.00
html/document/visitor/compare/visit_mut_span_panic 379154 ns/iter (± 2553) 378970 ns/iter (± 2056) 1.00
html/document/visitor/compare/fold_span 411413 ns/iter (± 1870) 410913 ns/iter (± 1855) 1.00
html/document/visitor/compare/fold_span_panic 459845 ns/iter (± 1811) 466857 ns/iter (± 2775) 0.98
html/document_fragment/visitor/compare/clone 340046 ns/iter (± 2856) 341296 ns/iter (± 1708) 1.00
html/document_fragment/visitor/compare/visit_mut_span 366351 ns/iter (± 1358) 369346 ns/iter (± 1930) 0.99
html/document_fragment/visitor/compare/visit_mut_span_panic 373514 ns/iter (± 1911) 375233 ns/iter (± 2097) 1.00
html/document_fragment/visitor/compare/fold_span 407876 ns/iter (± 2240) 404880 ns/iter (± 2135) 1.01
html/document_fragment/visitor/compare/fold_span_panic 459955 ns/iter (± 2586) 464409 ns/iter (± 2712) 0.99
html/lexer/css_2021_spec 15670413 ns/iter (± 8131) 15511276 ns/iter (± 7074) 1.01
html/lexer/github_com_17_05_2022 6070654 ns/iter (± 3653) 6042070 ns/iter (± 2388) 1.00
html/lexer/stackoverflow_com_17_05_2022 5683620 ns/iter (± 1851) 5637731 ns/iter (± 4240) 1.01
html/parser/parser_document/css_2021_spec 26941820 ns/iter (± 333539) 26223145 ns/iter (± 112285) 1.03
html/parser/parser_document/github_com_17_05_2022 8828463 ns/iter (± 10813) 8832893 ns/iter (± 8021) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7782835 ns/iter (± 6572) 7812422 ns/iter (± 4295) 1.00
html/parser/parser_document_fragment/css_2021_spec 26978025 ns/iter (± 276128) 25981841 ns/iter (± 154846) 1.04
html/parser/parser_document_fragment/github_com_17_05_2022 8817954 ns/iter (± 31058) 8777791 ns/iter (± 9558) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7800908 ns/iter (± 5681) 7781604 ns/iter (± 32893) 1.00

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

Please sign in to comment.