Skip to content

Commit

Permalink
fix(es/parser): Fix parsing of an array spread in tsx properties (#7011)
Browse files Browse the repository at this point in the history
  • Loading branch information
IWANABETHATGUY committed Mar 5, 2023
1 parent bb64643 commit 6d6731f
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 0 deletions.
3 changes: 3 additions & 0 deletions crates/swc_ecma_parser/src/parser/jsx.rs
Expand Up @@ -143,6 +143,9 @@ impl<I: Tokens> Parser<I> {
let expr = if is!(self, '}') {
self.parse_jsx_empty_expr().map(JSXExpr::JSXEmptyExpr)?
} else {
if is!(self, "...") {
bump!(self);
}
self.parse_expr().map(JSXExpr::Expr)?
};
expect!(self, '}');
Expand Down
@@ -0,0 +1,4 @@
function Component(props) {
}

<Component x={...[1,2,3]} />
@@ -0,0 +1,8 @@
function Component(props) {}
/*#__PURE__*/ React.createElement(Component, {
x: [
1,
2,
3
]
});
@@ -0,0 +1,4 @@
function Component(props) {
}

<Component x={...{a: x}} />
@@ -0,0 +1,6 @@
function Component(props) {}
/*#__PURE__*/ React.createElement(Component, {
x: {
a: x
}
});

1 comment on commit 6d6731f

@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: 6d6731f Previous: a431a3a Ratio
es/full/bugs-1 304418 ns/iter (± 7378) 296745 ns/iter (± 17563) 1.03
es/full/minify/libraries/antd 1747197057 ns/iter (± 32263671) 1657037804 ns/iter (± 13574759) 1.05
es/full/minify/libraries/d3 314834917 ns/iter (± 5076739) 309425657 ns/iter (± 19216362) 1.02
es/full/minify/libraries/echarts 1354771688 ns/iter (± 7850503) 1316504566 ns/iter (± 52123404) 1.03
es/full/minify/libraries/jquery 95098714 ns/iter (± 973487) 92036985 ns/iter (± 1619174) 1.03
es/full/minify/libraries/lodash 110468220 ns/iter (± 941969) 107922500 ns/iter (± 1377654) 1.02
es/full/minify/libraries/moment 54757764 ns/iter (± 541589) 53208607 ns/iter (± 353141) 1.03
es/full/minify/libraries/react 19592137 ns/iter (± 177123) 19288157 ns/iter (± 99548) 1.02
es/full/minify/libraries/terser 261399139 ns/iter (± 2935726) 250712733 ns/iter (± 4170468) 1.04
es/full/minify/libraries/three 474656301 ns/iter (± 4142104) 441159769 ns/iter (± 6707846) 1.08
es/full/minify/libraries/typescript 3323016146 ns/iter (± 14481646) 3087447927 ns/iter (± 28115070) 1.08
es/full/minify/libraries/victory 742816486 ns/iter (± 10181749) 664807800 ns/iter (± 10009760) 1.12
es/full/minify/libraries/vue 137743074 ns/iter (± 2649707) 132527983 ns/iter (± 2612660) 1.04
es/full/codegen/es3 26146 ns/iter (± 52) 25936 ns/iter (± 79) 1.01
es/full/codegen/es5 26185 ns/iter (± 68) 25903 ns/iter (± 41) 1.01
es/full/codegen/es2015 26106 ns/iter (± 98) 25919 ns/iter (± 50) 1.01
es/full/codegen/es2016 26156 ns/iter (± 56) 25960 ns/iter (± 47) 1.01
es/full/codegen/es2017 26205 ns/iter (± 68) 25947 ns/iter (± 42) 1.01
es/full/codegen/es2018 26164 ns/iter (± 36) 25947 ns/iter (± 57) 1.01
es/full/codegen/es2019 26132 ns/iter (± 41) 25926 ns/iter (± 48) 1.01
es/full/codegen/es2020 26129 ns/iter (± 40) 25953 ns/iter (± 57) 1.01
es/full/all/es3 171198541 ns/iter (± 1248447) 175636438 ns/iter (± 1721049) 0.97
es/full/all/es5 161330344 ns/iter (± 3657111) 163464406 ns/iter (± 2306039) 0.99
es/full/all/es2015 127105282 ns/iter (± 1405831) 129353088 ns/iter (± 1816733) 0.98
es/full/all/es2016 126171192 ns/iter (± 1037373) 126562071 ns/iter (± 1706788) 1.00
es/full/all/es2017 123827422 ns/iter (± 1178280) 125727026 ns/iter (± 1635266) 0.98
es/full/all/es2018 120701975 ns/iter (± 1171523) 122518777 ns/iter (± 4419423) 0.99
es/full/all/es2019 120021587 ns/iter (± 736750) 121688756 ns/iter (± 4737413) 0.99
es/full/all/es2020 115346362 ns/iter (± 937819) 116393393 ns/iter (± 1317410) 0.99
es/full/parser 549478 ns/iter (± 9162) 545647 ns/iter (± 10292) 1.01
es/full/base/fixer 21776 ns/iter (± 57) 21995 ns/iter (± 37) 0.99
es/full/base/resolver_and_hygiene 81446 ns/iter (± 81) 81768 ns/iter (± 64) 1.00
serialization of ast node 145 ns/iter (± 0) 144 ns/iter (± 0) 1.01
serialization of serde 134 ns/iter (± 0) 134 ns/iter (± 0) 1
css/minify/libraries/bootstrap 28326934 ns/iter (± 90048) 28603529 ns/iter (± 495330) 0.99
css/visitor/compare/clone 2061513 ns/iter (± 16482) 2085483 ns/iter (± 10678) 0.99
css/visitor/compare/visit_mut_span 2261599 ns/iter (± 8633) 2272186 ns/iter (± 24395) 1.00
css/visitor/compare/visit_mut_span_panic 2293227 ns/iter (± 3232) 2283039 ns/iter (± 33812) 1.00
css/visitor/compare/fold_span 3009373 ns/iter (± 22216) 3001114 ns/iter (± 22051) 1.00
css/visitor/compare/fold_span_panic 3159189 ns/iter (± 22246) 3129397 ns/iter (± 20792) 1.01
css/lexer/bootstrap_5_1_3 5264355 ns/iter (± 5495) 5200029 ns/iter (± 7891) 1.01
css/lexer/foundation_6_7_4 4434456 ns/iter (± 3846) 4372235 ns/iter (± 2392) 1.01
css/lexer/tailwind_3_1_1 843556 ns/iter (± 1386) 832120 ns/iter (± 927) 1.01
css/parser/bootstrap_5_1_3 21761183 ns/iter (± 57226) 21587549 ns/iter (± 62653) 1.01
css/parser/foundation_6_7_4 17469114 ns/iter (± 95643) 17277686 ns/iter (± 37371) 1.01
css/parser/tailwind_3_1_1 3323210 ns/iter (± 3537) 3320784 ns/iter (± 6619) 1.00
es/codegen/colors 331856 ns/iter (± 185164) 318776 ns/iter (± 180865) 1.04
es/codegen/large 1308533 ns/iter (± 658337) 1230114 ns/iter (± 643176) 1.06
es/codegen/with-parser/colors 47520 ns/iter (± 67) 48822 ns/iter (± 367) 0.97
es/codegen/with-parser/large 525467 ns/iter (± 1825) 535081 ns/iter (± 1452) 0.98
es/minify/libraries/antd 1536571916 ns/iter (± 14375462) 1398764061 ns/iter (± 14882927) 1.10
es/minify/libraries/d3 268595945 ns/iter (± 5520095) 249619894 ns/iter (± 2635925) 1.08
es/minify/libraries/echarts 1177397482 ns/iter (± 12370033) 1087699933 ns/iter (± 17965019) 1.08
es/minify/libraries/jquery 80823288 ns/iter (± 468480) 79024248 ns/iter (± 680679) 1.02
es/minify/libraries/lodash 96808661 ns/iter (± 831416) 94894082 ns/iter (± 824583) 1.02
es/minify/libraries/moment 47063208 ns/iter (± 226803) 46265103 ns/iter (± 459262) 1.02
es/minify/libraries/react 17333312 ns/iter (± 139256) 17141039 ns/iter (± 97236) 1.01
es/minify/libraries/terser 220577429 ns/iter (± 2643944) 210402389 ns/iter (± 3594790) 1.05
es/minify/libraries/three 395364420 ns/iter (± 9369158) 373548002 ns/iter (± 15768209) 1.06
es/minify/libraries/typescript 2826194106 ns/iter (± 8400564) 2703662057 ns/iter (± 62775652) 1.05
es/minify/libraries/victory 613390893 ns/iter (± 11872450) 604155119 ns/iter (± 47367391) 1.02
es/minify/libraries/vue 120107882 ns/iter (± 960371) 117953193 ns/iter (± 3258399) 1.02
es/visitor/compare/clone 2417937 ns/iter (± 20840) 2349736 ns/iter (± 7811) 1.03
es/visitor/compare/visit_mut_span 2819052 ns/iter (± 5475) 2746823 ns/iter (± 4013) 1.03
es/visitor/compare/visit_mut_span_panic 2860712 ns/iter (± 5993) 2795559 ns/iter (± 3692) 1.02
es/visitor/compare/fold_span 3995515 ns/iter (± 9596) 3904320 ns/iter (± 7644) 1.02
es/visitor/compare/fold_span_panic 4141738 ns/iter (± 6736) 4028831 ns/iter (± 6271) 1.03
es/lexer/colors 16208 ns/iter (± 63) 16288 ns/iter (± 8) 1.00
es/lexer/angular 7781078 ns/iter (± 17966) 7800250 ns/iter (± 2930) 1.00
es/lexer/backbone 1002644 ns/iter (± 650) 1005372 ns/iter (± 571) 1.00
es/lexer/jquery 5570695 ns/iter (± 3649) 5594243 ns/iter (± 2746) 1.00
es/lexer/jquery mobile 8551298 ns/iter (± 2673) 8578994 ns/iter (± 8475) 1.00
es/lexer/mootools 4384256 ns/iter (± 3291) 4410987 ns/iter (± 2591) 0.99
es/lexer/underscore 837592 ns/iter (± 454) 838587 ns/iter (± 366) 1.00
es/lexer/three 25978667 ns/iter (± 14670) 26057628 ns/iter (± 86293) 1.00
es/lexer/yui 4782757 ns/iter (± 4006) 4803093 ns/iter (± 4868) 1.00
es/parser/colors 30862 ns/iter (± 101) 30308 ns/iter (± 63) 1.02
es/parser/angular 16084485 ns/iter (± 222667) 15342231 ns/iter (± 57596) 1.05
es/parser/backbone 2330801 ns/iter (± 11080) 2306355 ns/iter (± 13552) 1.01
es/parser/jquery 12557067 ns/iter (± 103834) 12407268 ns/iter (± 61784) 1.01
es/parser/jquery mobile 19886076 ns/iter (± 249940) 19388445 ns/iter (± 165281) 1.03
es/parser/mootools 9691892 ns/iter (± 24345) 9486959 ns/iter (± 25229) 1.02
es/parser/underscore 1977040 ns/iter (± 13464) 1957770 ns/iter (± 12270) 1.01
es/parser/three 60331025 ns/iter (± 443528) 56822297 ns/iter (± 760033) 1.06
es/parser/yui 9633110 ns/iter (± 108943) 9455990 ns/iter (± 51852) 1.02
es/preset-env/usage/builtin_type 142258 ns/iter (± 32445) 139645 ns/iter (± 31609) 1.02
es/preset-env/usage/property 21211 ns/iter (± 83) 20799 ns/iter (± 79) 1.02
es/resolver/typescript 126572488 ns/iter (± 4843967) 117228143 ns/iter (± 3068828) 1.08
es/fixer/typescript 96375162 ns/iter (± 2295650) 87735403 ns/iter (± 487542) 1.10
es/hygiene/typescript 208093336 ns/iter (± 1236934) 183650900 ns/iter (± 2479878) 1.13
es/resolver_with_hygiene/typescript 346846759 ns/iter (± 1441860) 325971861 ns/iter (± 1731447) 1.06
es/visitor/base-perf/module_clone 76089 ns/iter (± 2115) 76971 ns/iter (± 1725) 0.99
es/visitor/base-perf/fold_empty 86305 ns/iter (± 2087) 85313 ns/iter (± 1296) 1.01
es/visitor/base-perf/fold_noop_impl_all 85500 ns/iter (± 1800) 85132 ns/iter (± 446) 1.00
es/visitor/base-perf/fold_noop_impl_vec 86506 ns/iter (± 961) 85398 ns/iter (± 1809) 1.01
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 59 ns/iter (± 0) 59 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 103 ns/iter (± 0) 103 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 102 ns/iter (± 0) 102 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 3590 ns/iter (± 87) 3481 ns/iter (± 78) 1.03
es/base/parallel/resolver/typescript 5263036066 ns/iter (± 472878250) 5843206176 ns/iter (± 453082751) 0.90
es/base/parallel/hygiene/typescript 2409428991 ns/iter (± 32048466) 2313908161 ns/iter (± 34782447) 1.04
misc/visitors/time-complexity/time 5 98 ns/iter (± 0) 102 ns/iter (± 0) 0.96
misc/visitors/time-complexity/time 10 311 ns/iter (± 0) 324 ns/iter (± 0) 0.96
misc/visitors/time-complexity/time 15 657 ns/iter (± 0) 666 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 20 1211 ns/iter (± 3) 1244 ns/iter (± 12) 0.97
misc/visitors/time-complexity/time 40 6598 ns/iter (± 6) 6227 ns/iter (± 0) 1.06
misc/visitors/time-complexity/time 60 16930 ns/iter (± 56) 15723 ns/iter (± 13) 1.08
es/full-target/es2016 188535 ns/iter (± 724) 188481 ns/iter (± 1054) 1.00
es/full-target/es2017 183020 ns/iter (± 718) 182997 ns/iter (± 504) 1.00
es/full-target/es2018 172949 ns/iter (± 694) 171551 ns/iter (± 261) 1.01
es2020_nullish_coalescing 66558 ns/iter (± 102) 67374 ns/iter (± 239) 0.99
es2020_optional_chaining 96611 ns/iter (± 7895) 96392 ns/iter (± 271) 1.00
es2022_class_properties 93608 ns/iter (± 177) 94298 ns/iter (± 167) 0.99
es2018_object_rest_spread 71245 ns/iter (± 128) 71303 ns/iter (± 67) 1.00
es2019_optional_catch_binding 61212 ns/iter (± 224) 61277 ns/iter (± 101) 1.00
es2017_async_to_generator 61386 ns/iter (± 145) 62086 ns/iter (± 85) 0.99
es2016_exponentiation 64443 ns/iter (± 181) 65463 ns/iter (± 39) 0.98
es2015_arrow 70386 ns/iter (± 161) 70253 ns/iter (± 241) 1.00
es2015_block_scoped_fn 66078 ns/iter (± 134) 66801 ns/iter (± 149) 0.99
es2015_block_scoping 141272 ns/iter (± 8685) 156373 ns/iter (± 12059) 0.90
es2015_classes 116524 ns/iter (± 586) 117662 ns/iter (± 511) 0.99
es2015_computed_props 60920 ns/iter (± 162) 61816 ns/iter (± 109) 0.99
es2015_destructuring 116100 ns/iter (± 313) 116244 ns/iter (± 340) 1.00
es2015_duplicate_keys 63574 ns/iter (± 102) 64170 ns/iter (± 101) 0.99
es2015_parameters 79869 ns/iter (± 127) 79565 ns/iter (± 177) 1.00
es2015_fn_name 66629 ns/iter (± 580) 67157 ns/iter (± 435) 0.99
es2015_for_of 63987 ns/iter (± 130) 64586 ns/iter (± 131) 0.99
es2015_instanceof 63336 ns/iter (± 136) 63712 ns/iter (± 134) 0.99
es2015_shorthand_property 60795 ns/iter (± 102) 61347 ns/iter (± 92) 0.99
es2015_spread 60503 ns/iter (± 157) 61342 ns/iter (± 120) 0.99
es2015_sticky_regex 61882 ns/iter (± 71) 62588 ns/iter (± 98) 0.99
es2015_typeof_symbol 62258 ns/iter (± 74) 62542 ns/iter (± 56) 1.00
es/transform/baseline/base 51529 ns/iter (± 149) 52193 ns/iter (± 105) 0.99
es/transform/baseline/common_reserved_word 62358 ns/iter (± 109) 63177 ns/iter (± 68) 0.99
es/transform/baseline/common_typescript 144222 ns/iter (± 3015) 145737 ns/iter (± 2946) 0.99
es/target/es3 169874 ns/iter (± 216) 169997 ns/iter (± 253) 1.00
es/target/es2015 632049 ns/iter (± 1465) 630939 ns/iter (± 1280) 1.00
es/target/es2016 64714 ns/iter (± 136) 65613 ns/iter (± 98) 0.99
es/target/es2017 61444 ns/iter (± 139) 62160 ns/iter (± 77) 0.99
es/target/es2018 81613 ns/iter (± 81) 81503 ns/iter (± 127) 1.00
es/target/es2020 132635 ns/iter (± 143) 133097 ns/iter (± 172) 1.00
babelify-only 672811 ns/iter (± 1172) 667277 ns/iter (± 602) 1.01
parse_and_babelify_angular 44918833 ns/iter (± 862500) 42272507 ns/iter (± 843093) 1.06
parse_and_babelify_backbone 5496207 ns/iter (± 51546) 5434672 ns/iter (± 83077) 1.01
parse_and_babelify_jquery 33695225 ns/iter (± 831652) 31662754 ns/iter (± 381322) 1.06
parse_and_babelify_jquery_mobile 56920689 ns/iter (± 1082815) 54516811 ns/iter (± 842715) 1.04
parse_and_babelify_mootools 35086494 ns/iter (± 572209) 33043753 ns/iter (± 441984) 1.06
parse_and_babelify_underscore 4398235 ns/iter (± 32551) 4363609 ns/iter (± 34229) 1.01
parse_and_babelify_yui 35850881 ns/iter (± 1537820) 31289190 ns/iter (± 374333) 1.15
html/minify/document/css_spec 42998184 ns/iter (± 359936) 42749997 ns/iter (± 258001) 1.01
html/minify/document/github 17586882 ns/iter (± 122385) 17594209 ns/iter (± 66840) 1.00
html/minify/document/stackoverflow 15780617 ns/iter (± 39180) 15719512 ns/iter (± 32140) 1.00
html/minify/document_fragment/css_spec 40584962 ns/iter (± 260052) 41164381 ns/iter (± 498449) 0.99
html/minify/document_fragment/github 16776541 ns/iter (± 19821) 16927399 ns/iter (± 59252) 0.99
html/minify/document_fragment/stackoverflow 15280852 ns/iter (± 45901) 15461438 ns/iter (± 50863) 0.99
html/document/visitor/compare/clone 341676 ns/iter (± 1709) 335801 ns/iter (± 2129) 1.02
html/document/visitor/compare/visit_mut_span 368111 ns/iter (± 2863) 360842 ns/iter (± 1391) 1.02
html/document/visitor/compare/visit_mut_span_panic 378910 ns/iter (± 1024) 368160 ns/iter (± 2044) 1.03
html/document/visitor/compare/fold_span 399853 ns/iter (± 2775) 405359 ns/iter (± 2435) 0.99
html/document/visitor/compare/fold_span_panic 454766 ns/iter (± 1605) 461902 ns/iter (± 2015) 0.98
html/document_fragment/visitor/compare/clone 335587 ns/iter (± 1987) 333560 ns/iter (± 1252) 1.01
html/document_fragment/visitor/compare/visit_mut_span 365096 ns/iter (± 2370) 364090 ns/iter (± 2176) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 375596 ns/iter (± 2113) 374151 ns/iter (± 2053) 1.00
html/document_fragment/visitor/compare/fold_span 400083 ns/iter (± 2595) 400473 ns/iter (± 2366) 1.00
html/document_fragment/visitor/compare/fold_span_panic 456441 ns/iter (± 2058) 455992 ns/iter (± 1657) 1.00
html/lexer/css_2021_spec 15554131 ns/iter (± 17360) 15533824 ns/iter (± 13593) 1.00
html/lexer/github_com_17_05_2022 6028677 ns/iter (± 7502) 6024155 ns/iter (± 10037) 1.00
html/lexer/stackoverflow_com_17_05_2022 5643649 ns/iter (± 8259) 5630397 ns/iter (± 5333) 1.00
html/parser/parser_document/css_2021_spec 26072198 ns/iter (± 304247) 25900810 ns/iter (± 105235) 1.01
html/parser/parser_document/github_com_17_05_2022 8785277 ns/iter (± 20885) 8749729 ns/iter (± 10111) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7720553 ns/iter (± 12297) 7715711 ns/iter (± 8296) 1.00
html/parser/parser_document_fragment/css_2021_spec 26055470 ns/iter (± 245446) 25651303 ns/iter (± 119134) 1.02
html/parser/parser_document_fragment/github_com_17_05_2022 8796020 ns/iter (± 13245) 8756780 ns/iter (± 4369) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7728314 ns/iter (± 14485) 7747552 ns/iter (± 5592) 1.00

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

Please sign in to comment.