Skip to content

Commit

Permalink
fix(es/fixer): Add correct parens to OptChainExpr in MemberExpr (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
hyf0 committed Dec 14, 2022
1 parent 30692bc commit be5ea7f
Show file tree
Hide file tree
Showing 10 changed files with 64 additions and 0 deletions.
10 changes: 10 additions & 0 deletions crates/swc/tests/fixture/issues-6xxx/6459/1/input/.swcrc
@@ -0,0 +1,10 @@
{
"jsc": {
"parser": {
"syntax": "typescript"
},
"target": "es2020",
"loose": false
},
"isModule": true
}
1 change: 1 addition & 0 deletions crates/swc/tests/fixture/issues-6xxx/6459/1/input/index.ts
@@ -0,0 +1 @@
(myValue.children?.children[0] as ChildType).value = 'My Value';
@@ -0,0 +1 @@
(myValue.children?.children)[0].value = 'My Value';
10 changes: 10 additions & 0 deletions crates/swc/tests/fixture/issues-6xxx/6459/2/input/.swcrc
@@ -0,0 +1,10 @@
{
"jsc": {
"parser": {
"syntax": "typescript"
},
"target": "es2020",
"loose": false
},
"isModule": true
}
1 change: 1 addition & 0 deletions crates/swc/tests/fixture/issues-6xxx/6459/2/input/index.ts
@@ -0,0 +1 @@
(foo?.bar.baz?.bax).faz = 1
@@ -0,0 +1 @@
(foo?.bar.baz?.bax).faz = 1;
10 changes: 10 additions & 0 deletions crates/swc/tests/fixture/issues-6xxx/6459/3/input/.swcrc
@@ -0,0 +1,10 @@
{
"jsc": {
"parser": {
"syntax": "typescript"
},
"target": "es2020",
"loose": false
},
"isModule": true
}
1 change: 1 addition & 0 deletions crates/swc/tests/fixture/issues-6xxx/6459/3/input/index.ts
@@ -0,0 +1 @@
(foo?.bar.bar.bar?.baz.baz.baz).foo.baz = 1
@@ -0,0 +1 @@
(foo?.bar.bar.bar?.baz).baz.baz.foo.baz = 1;
28 changes: 28 additions & 0 deletions crates/swc_ecma_transforms_base/src/fixer.rs
Expand Up @@ -170,6 +170,34 @@ impl VisitMut for Fixer<'_> {
if rhs_need_paren(&expr.right) {
self.wrap(&mut expr.right);
}

fn find_nearest_opt_chain_as_obj(e: &mut Expr) -> Option<&mut Expr> {
match e {
Expr::Member(MemberExpr { obj, .. }) => {
if obj.is_opt_chain() {
Some(obj)
} else {
find_nearest_opt_chain_as_obj(obj)
}
}
_ => None,
}
}

let lhs_expr = match &mut expr.left {
PatOrExpr::Expr(e) => Some(e),
PatOrExpr::Pat(pat) => {
if let Pat::Expr(e) = pat.as_mut() {
Some(e)
} else {
None
}
}
};

if let Some(e) = lhs_expr.and_then(|e| find_nearest_opt_chain_as_obj(e)) {
self.wrap(e)
};
}

fn visit_mut_assign_pat(&mut self, node: &mut AssignPat) {
Expand Down

1 comment on commit be5ea7f

@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: be5ea7f Previous: c8b724f Ratio
es/full/bugs-1 305180 ns/iter (± 8562) 303476 ns/iter (± 23856) 1.01
es/full/minify/libraries/antd 1821727644 ns/iter (± 12673173) 1856315425 ns/iter (± 21639874) 0.98
es/full/minify/libraries/d3 351660191 ns/iter (± 5768160) 369309511 ns/iter (± 7695836) 0.95
es/full/minify/libraries/echarts 1545893761 ns/iter (± 15978758) 1548788819 ns/iter (± 17592550) 1.00
es/full/minify/libraries/jquery 96743209 ns/iter (± 819669) 100487573 ns/iter (± 2740989) 0.96
es/full/minify/libraries/lodash 116157166 ns/iter (± 1797017) 115960347 ns/iter (± 2474102) 1.00
es/full/minify/libraries/moment 56330212 ns/iter (± 524342) 55939962 ns/iter (± 483151) 1.01
es/full/minify/libraries/react 20779444 ns/iter (± 269910) 20220935 ns/iter (± 124469) 1.03
es/full/minify/libraries/terser 287685880 ns/iter (± 7139778) 290394286 ns/iter (± 5641570) 0.99
es/full/minify/libraries/three 545341462 ns/iter (± 9935480) 529126694 ns/iter (± 8780940) 1.03
es/full/minify/libraries/typescript 3476360428 ns/iter (± 23573410) 3473471473 ns/iter (± 23312231) 1.00
es/full/minify/libraries/victory 807338179 ns/iter (± 15556870) 798834472 ns/iter (± 24234547) 1.01
es/full/minify/libraries/vue 145229267 ns/iter (± 3185360) 148277332 ns/iter (± 3762297) 0.98
es/full/codegen/es3 27950 ns/iter (± 70) 27419 ns/iter (± 34) 1.02
es/full/codegen/es5 27995 ns/iter (± 56) 27421 ns/iter (± 43) 1.02
es/full/codegen/es2015 27961 ns/iter (± 42) 27417 ns/iter (± 47) 1.02
es/full/codegen/es2016 27947 ns/iter (± 50) 27411 ns/iter (± 51) 1.02
es/full/codegen/es2017 27955 ns/iter (± 93) 27402 ns/iter (± 38) 1.02
es/full/codegen/es2018 27946 ns/iter (± 53) 27412 ns/iter (± 38) 1.02
es/full/codegen/es2019 27953 ns/iter (± 32) 27388 ns/iter (± 35) 1.02
es/full/codegen/es2020 27953 ns/iter (± 51) 27412 ns/iter (± 38) 1.02
es/full/all/es3 171510483 ns/iter (± 1528953) 173272277 ns/iter (± 2665023) 0.99
es/full/all/es5 165261229 ns/iter (± 1809579) 163260193 ns/iter (± 3918328) 1.01
es/full/all/es2015 122017717 ns/iter (± 1706313) 124150725 ns/iter (± 1864585) 0.98
es/full/all/es2016 121910969 ns/iter (± 1635779) 124109171 ns/iter (± 1543426) 0.98
es/full/all/es2017 120955127 ns/iter (± 808261) 121230097 ns/iter (± 1211730) 1.00
es/full/all/es2018 119899035 ns/iter (± 1333914) 120597062 ns/iter (± 1885361) 0.99
es/full/all/es2019 117969844 ns/iter (± 1411067) 119148658 ns/iter (± 2341522) 0.99
es/full/all/es2020 114273813 ns/iter (± 1861377) 114905513 ns/iter (± 2123392) 0.99
es/full/parser 521632 ns/iter (± 8513) 520557 ns/iter (± 10361) 1.00
es/full/base/fixer 22029 ns/iter (± 78) 21681 ns/iter (± 22) 1.02
es/full/base/resolver_and_hygiene 77985 ns/iter (± 91) 78736 ns/iter (± 198) 0.99
serialization of ast node 142 ns/iter (± 0) 143 ns/iter (± 0) 0.99
serialization of serde 127 ns/iter (± 0) 123 ns/iter (± 0) 1.03
css/minify/libraries/bootstrap 28467119 ns/iter (± 267891) 28953029 ns/iter (± 189587) 0.98
css/visitor/compare/clone 2115270 ns/iter (± 11946) 2413961 ns/iter (± 10274) 0.88
css/visitor/compare/visit_mut_span 2329817 ns/iter (± 19132) 2702177 ns/iter (± 11874) 0.86
css/visitor/compare/visit_mut_span_panic 2346966 ns/iter (± 10133) 2721821 ns/iter (± 16198) 0.86
css/visitor/compare/fold_span 3040387 ns/iter (± 32638) 3487810 ns/iter (± 38669) 0.87
css/visitor/compare/fold_span_panic 3152494 ns/iter (± 21674) 3575781 ns/iter (± 34322) 0.88
css/lexer/bootstrap_5_1_3 5196663 ns/iter (± 11221) 5190390 ns/iter (± 2042) 1.00
css/lexer/foundation_6_7_4 4451595 ns/iter (± 2072) 4398897 ns/iter (± 823) 1.01
css/lexer/tailwind_3_1_1 834809 ns/iter (± 749) 826158 ns/iter (± 166) 1.01
css/parser/bootstrap_5_1_3 21010217 ns/iter (± 98606) 21479055 ns/iter (± 131523) 0.98
css/parser/foundation_6_7_4 16838495 ns/iter (± 97222) 17301805 ns/iter (± 59160) 0.97
css/parser/tailwind_3_1_1 3181769 ns/iter (± 3430) 3207070 ns/iter (± 5338) 0.99
es/codegen/colors 322493 ns/iter (± 180703) 321949 ns/iter (± 182032) 1.00
es/codegen/large 1236856 ns/iter (± 643500) 1067553 ns/iter (± 552204) 1.16
es/codegen/with-parser/colors 45559 ns/iter (± 110) 46112 ns/iter (± 352) 0.99
es/codegen/with-parser/large 515044 ns/iter (± 1925) 514679 ns/iter (± 3596) 1.00
es/minify/libraries/antd 1568584216 ns/iter (± 19363812) 1645390847 ns/iter (± 29443684) 0.95
es/minify/libraries/d3 295949459 ns/iter (± 5927991) 332592566 ns/iter (± 6456515) 0.89
es/minify/libraries/echarts 1287150182 ns/iter (± 10634515) 1353762068 ns/iter (± 12169998) 0.95
es/minify/libraries/jquery 80992645 ns/iter (± 1565303) 83215268 ns/iter (± 846030) 0.97
es/minify/libraries/lodash 99878726 ns/iter (± 1767122) 102609603 ns/iter (± 954133) 0.97
es/minify/libraries/moment 46765452 ns/iter (± 570470) 47631307 ns/iter (± 501537) 0.98
es/minify/libraries/react 17766031 ns/iter (± 277651) 17776267 ns/iter (± 179621) 1.00
es/minify/libraries/terser 226771050 ns/iter (± 5669871) 239450486 ns/iter (± 5399693) 0.95
es/minify/libraries/three 425116357 ns/iter (± 10360983) 451706235 ns/iter (± 8132415) 0.94
es/minify/libraries/typescript 2911120660 ns/iter (± 36184541) 2913313068 ns/iter (± 19102306) 1.00
es/minify/libraries/victory 616969001 ns/iter (± 11884979) 683777458 ns/iter (± 17889506) 0.90
es/minify/libraries/vue 120878183 ns/iter (± 1306192) 126924152 ns/iter (± 2641217) 0.95
es/visitor/compare/clone 2415878 ns/iter (± 14787) 2729183 ns/iter (± 19574) 0.89
es/visitor/compare/visit_mut_span 2782845 ns/iter (± 7919) 3232360 ns/iter (± 40132) 0.86
es/visitor/compare/visit_mut_span_panic 2855521 ns/iter (± 2441) 3274301 ns/iter (± 14797) 0.87
es/visitor/compare/fold_span 3942633 ns/iter (± 10578) 4476268 ns/iter (± 72234) 0.88
es/visitor/compare/fold_span_panic 4090972 ns/iter (± 44564) 4697808 ns/iter (± 95642) 0.87
es/lexer/colors 17559 ns/iter (± 17) 17431 ns/iter (± 10) 1.01
es/lexer/angular 8242797 ns/iter (± 3638) 8234941 ns/iter (± 4079) 1.00
es/lexer/backbone 1075689 ns/iter (± 435) 1075000 ns/iter (± 2432) 1.00
es/lexer/jquery 5962106 ns/iter (± 20407) 5975307 ns/iter (± 2260) 1.00
es/lexer/jquery mobile 9184496 ns/iter (± 5087) 9191732 ns/iter (± 6329) 1.00
es/lexer/mootools 4682830 ns/iter (± 2194) 4683716 ns/iter (± 2656) 1.00
es/lexer/underscore 897714 ns/iter (± 374) 896995 ns/iter (± 526) 1.00
es/lexer/three 27993630 ns/iter (± 42112) 28001327 ns/iter (± 144065) 1.00
es/lexer/yui 5063631 ns/iter (± 1920) 5056921 ns/iter (± 3757) 1.00
es/parser/colors 31275 ns/iter (± 179) 31473 ns/iter (± 152) 0.99
es/parser/angular 16523626 ns/iter (± 216865) 17148759 ns/iter (± 227560) 0.96
es/parser/backbone 2348448 ns/iter (± 13297) 2355931 ns/iter (± 7713) 1.00
es/parser/jquery 12903045 ns/iter (± 112459) 13346690 ns/iter (± 247060) 0.97
es/parser/jquery mobile 21493787 ns/iter (± 576045) 22142091 ns/iter (± 292658) 0.97
es/parser/mootools 9929643 ns/iter (± 100876) 10022124 ns/iter (± 45920) 0.99
es/parser/underscore 1988138 ns/iter (± 11732) 2001376 ns/iter (± 11420) 0.99
es/parser/three 62020623 ns/iter (± 253790) 62679899 ns/iter (± 209134) 0.99
es/parser/yui 9839479 ns/iter (± 91459) 10122460 ns/iter (± 99513) 0.97
es/preset-env/usage/builtin_type 139730 ns/iter (± 31062) 141435 ns/iter (± 32409) 0.99
es/preset-env/usage/property 21394 ns/iter (± 74) 20993 ns/iter (± 124) 1.02
es/resolver/typescript 121319696 ns/iter (± 2564322) 130204988 ns/iter (± 1749766) 0.93
es/fixer/typescript 96045068 ns/iter (± 1321318) 102867262 ns/iter (± 2535431) 0.93
es/hygiene/typescript 197160509 ns/iter (± 1463961) 200622231 ns/iter (± 2216127) 0.98
es/resolver_with_hygiene/typescript 335480084 ns/iter (± 3687895) 338647072 ns/iter (± 2561368) 0.99
es/visitor/base-perf/module_clone 74837 ns/iter (± 1378) 74142 ns/iter (± 732) 1.01
es/visitor/base-perf/fold_empty 87906 ns/iter (± 1519) 86116 ns/iter (± 783) 1.02
es/visitor/base-perf/fold_noop_impl_all 86983 ns/iter (± 1224) 86459 ns/iter (± 452) 1.01
es/visitor/base-perf/fold_noop_impl_vec 88044 ns/iter (± 1271) 86383 ns/iter (± 1063) 1.02
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 55 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 58 ns/iter (± 0) 61 ns/iter (± 0) 0.95
es/visitor/base-perf/boxing_boxed 103 ns/iter (± 0) 99 ns/iter (± 0) 1.04
es/visitor/base-perf/boxing_unboxed 101 ns/iter (± 0) 103 ns/iter (± 0) 0.98
es/visitor/base-perf/visit_contains_this 3405 ns/iter (± 52) 3489 ns/iter (± 92) 0.98
es/base/parallel/resolver/typescript 5648087437 ns/iter (± 360556699) 5184718103 ns/iter (± 220953869) 1.09
es/base/parallel/hygiene/typescript 2297920286 ns/iter (± 39827223) 2348964029 ns/iter (± 47925504) 0.98
misc/visitors/time-complexity/time 5 107 ns/iter (± 0) 93 ns/iter (± 0) 1.15
misc/visitors/time-complexity/time 10 327 ns/iter (± 0) 301 ns/iter (± 0) 1.09
misc/visitors/time-complexity/time 15 667 ns/iter (± 0) 629 ns/iter (± 1) 1.06
misc/visitors/time-complexity/time 20 1227 ns/iter (± 0) 1161 ns/iter (± 7) 1.06
misc/visitors/time-complexity/time 40 6208 ns/iter (± 1) 6030 ns/iter (± 39) 1.03
misc/visitors/time-complexity/time 60 15641 ns/iter (± 22) 15222 ns/iter (± 81) 1.03
es/full-target/es2016 187053 ns/iter (± 517) 188413 ns/iter (± 361) 0.99
es/full-target/es2017 181438 ns/iter (± 540) 183062 ns/iter (± 1010) 0.99
es/full-target/es2018 169778 ns/iter (± 298) 171343 ns/iter (± 386) 0.99
es2020_nullish_coalescing 66073 ns/iter (± 55) 65870 ns/iter (± 199) 1.00
es2020_optional_chaining 94674 ns/iter (± 6929) 95219 ns/iter (± 338) 0.99
es2022_class_properties 91736 ns/iter (± 186) 93510 ns/iter (± 216) 0.98
es2018_object_rest_spread 70697 ns/iter (± 122) 70722 ns/iter (± 126) 1.00
es2019_optional_catch_binding 60391 ns/iter (± 85) 60475 ns/iter (± 149) 1.00
es2017_async_to_generator 60930 ns/iter (± 110) 61118 ns/iter (± 102) 1.00
es2016_exponentiation 64044 ns/iter (± 115) 64286 ns/iter (± 127) 1.00
es2015_arrow 69032 ns/iter (± 190) 69814 ns/iter (± 285) 0.99
es2015_block_scoped_fn 65171 ns/iter (± 143) 65740 ns/iter (± 153) 0.99
es2015_block_scoping 146341 ns/iter (± 9246) 153818 ns/iter (± 9921) 0.95
es2015_classes 116197 ns/iter (± 542) 115841 ns/iter (± 383) 1.00
es2015_computed_props 60200 ns/iter (± 119) 60980 ns/iter (± 126) 0.99
es2015_destructuring 114945 ns/iter (± 1306) 116450 ns/iter (± 310) 0.99
es2015_duplicate_keys 63450 ns/iter (± 86) 63523 ns/iter (± 114) 1.00
es2015_parameters 78569 ns/iter (± 113) 79259 ns/iter (± 217) 0.99
es2015_fn_name 66221 ns/iter (± 603) 66630 ns/iter (± 723) 0.99
es2015_for_of 63417 ns/iter (± 88) 63545 ns/iter (± 196) 1.00
es2015_instanceof 62190 ns/iter (± 90) 62481 ns/iter (± 82) 1.00
es2015_shorthand_property 60418 ns/iter (± 106) 60482 ns/iter (± 118) 1.00
es2015_spread 60116 ns/iter (± 160) 60272 ns/iter (± 68) 1.00
es2015_sticky_regex 61974 ns/iter (± 123) 61591 ns/iter (± 91) 1.01
es2015_typeof_symbol 61559 ns/iter (± 78) 61718 ns/iter (± 111) 1.00
es/transform/baseline/base 50975 ns/iter (± 93) 51120 ns/iter (± 132) 1.00
es/transform/baseline/common_reserved_word 61702 ns/iter (± 46) 62069 ns/iter (± 117) 0.99
es/transform/baseline/common_typescript 145827 ns/iter (± 4597) 144627 ns/iter (± 6934) 1.01
es/target/es3 168360 ns/iter (± 216) 169614 ns/iter (± 290) 0.99
es/target/es2015 632775 ns/iter (± 1460) 632468 ns/iter (± 1603) 1.00
es/target/es2016 64146 ns/iter (± 154) 64270 ns/iter (± 131) 1.00
es/target/es2017 61024 ns/iter (± 109) 61171 ns/iter (± 106) 1.00
es/target/es2018 80915 ns/iter (± 114) 80813 ns/iter (± 178) 1.00
es/target/es2020 130871 ns/iter (± 152) 131813 ns/iter (± 351) 0.99
babelify-only 665932 ns/iter (± 1024) 680277 ns/iter (± 1283) 0.98
parse_and_babelify_angular 42843094 ns/iter (± 876793) 46598151 ns/iter (± 773435) 0.92
parse_and_babelify_backbone 5544731 ns/iter (± 69491) 5957795 ns/iter (± 138485) 0.93
parse_and_babelify_jquery 33754337 ns/iter (± 468431) 36185132 ns/iter (± 392918) 0.93
parse_and_babelify_jquery_mobile 58708733 ns/iter (± 1073545) 61559766 ns/iter (± 585079) 0.95
parse_and_babelify_mootools 35910700 ns/iter (± 579655) 37522992 ns/iter (± 910417) 0.96
parse_and_babelify_underscore 4452958 ns/iter (± 62616) 4536084 ns/iter (± 56583) 0.98
parse_and_babelify_yui 34918317 ns/iter (± 471959) 38003506 ns/iter (± 1314528) 0.92
html/minify/document/css_spec 42955590 ns/iter (± 541963) 46116209 ns/iter (± 448026) 0.93
html/minify/document/github 17567934 ns/iter (± 118183) 18264866 ns/iter (± 82901) 0.96
html/minify/document/stackoverflow 15603598 ns/iter (± 80527) 16235161 ns/iter (± 114361) 0.96
html/minify/document_fragment/css_spec 41855455 ns/iter (± 273474) 43120871 ns/iter (± 383413) 0.97
html/minify/document_fragment/github 16818981 ns/iter (± 62087) 17378605 ns/iter (± 38969) 0.97
html/minify/document_fragment/stackoverflow 15452872 ns/iter (± 110586) 15672940 ns/iter (± 82002) 0.99
html/document/visitor/compare/clone 338374 ns/iter (± 1682) 395331 ns/iter (± 5497) 0.86
html/document/visitor/compare/visit_mut_span 365172 ns/iter (± 1187) 429771 ns/iter (± 5336) 0.85
html/document/visitor/compare/visit_mut_span_panic 375534 ns/iter (± 1543) 439200 ns/iter (± 5032) 0.86
html/document/visitor/compare/fold_span 406947 ns/iter (± 1634) 469497 ns/iter (± 3804) 0.87
html/document/visitor/compare/fold_span_panic 458624 ns/iter (± 1630) 527176 ns/iter (± 4137) 0.87
html/document_fragment/visitor/compare/clone 341933 ns/iter (± 1815) 398746 ns/iter (± 4437) 0.86
html/document_fragment/visitor/compare/visit_mut_span 364195 ns/iter (± 1743) 426076 ns/iter (± 5150) 0.85
html/document_fragment/visitor/compare/visit_mut_span_panic 377711 ns/iter (± 1238) 441365 ns/iter (± 4848) 0.86
html/document_fragment/visitor/compare/fold_span 404054 ns/iter (± 1777) 467145 ns/iter (± 3404) 0.86
html/document_fragment/visitor/compare/fold_span_panic 464383 ns/iter (± 1533) 524175 ns/iter (± 3141) 0.89
html/lexer/css_2021_spec 15669153 ns/iter (± 6533) 15510763 ns/iter (± 7314) 1.01
html/lexer/github_com_17_05_2022 6092094 ns/iter (± 2287) 6026397 ns/iter (± 1516) 1.01
html/lexer/stackoverflow_com_17_05_2022 5678477 ns/iter (± 1611) 5624004 ns/iter (± 979) 1.01
html/parser/parser_document/css_2021_spec 26522982 ns/iter (± 298679) 27695551 ns/iter (± 108925) 0.96
html/parser/parser_document/github_com_17_05_2022 8855866 ns/iter (± 7744) 8950771 ns/iter (± 17747) 0.99
html/parser/parser_document/stackoverflow_com_17_05_2022 7781802 ns/iter (± 6694) 7917297 ns/iter (± 10534) 0.98
html/parser/parser_document_fragment/css_2021_spec 26370641 ns/iter (± 217722) 27818152 ns/iter (± 205169) 0.95
html/parser/parser_document_fragment/github_com_17_05_2022 8795665 ns/iter (± 11466) 8993539 ns/iter (± 19307) 0.98
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7745952 ns/iter (± 3984) 7815186 ns/iter (± 10066) 0.99

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

Please sign in to comment.