From 9f3556dd8d1568267f79e5ece89b56648cc37a0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Sat, 11 Mar 2023 18:21:51 +0900 Subject: [PATCH 1/5] Remove --- crates/swc_ecma_transforms_base/src/lib.rs | 1 - crates/swc_ecma_transforms_compat/src/lib.rs | 1 - 2 files changed, 2 deletions(-) diff --git a/crates/swc_ecma_transforms_base/src/lib.rs b/crates/swc_ecma_transforms_base/src/lib.rs index a6daad150987..402ce8b87674 100644 --- a/crates/swc_ecma_transforms_base/src/lib.rs +++ b/crates/swc_ecma_transforms_base/src/lib.rs @@ -1,5 +1,4 @@ #![cfg_attr(test, deny(warnings))] -#![feature(box_patterns)] pub use self::resolver::resolver; diff --git a/crates/swc_ecma_transforms_compat/src/lib.rs b/crates/swc_ecma_transforms_compat/src/lib.rs index 1459886ef436..0eb2f13e3809 100644 --- a/crates/swc_ecma_transforms_compat/src/lib.rs +++ b/crates/swc_ecma_transforms_compat/src/lib.rs @@ -3,7 +3,6 @@ #![allow(clippy::vec_box)] #![allow(clippy::boxed_local)] #![allow(clippy::match_like_matches_macro)] -#![feature(box_patterns)] pub use self::{ bugfixes::bugfixes, es2015::es2015, es2016::es2016, es2017::es2017, es2018::es2018, From 3cd9176319944094952b42d323796807a3e81440 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Sat, 11 Mar 2023 18:24:12 +0900 Subject: [PATCH 2/5] Fix some --- crates/swc_ecma_transforms_base/src/fixer.rs | 35 +++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/crates/swc_ecma_transforms_base/src/fixer.rs b/crates/swc_ecma_transforms_base/src/fixer.rs index 3410df93c194..995a8d9ffe59 100644 --- a/crates/swc_ecma_transforms_base/src/fixer.rs +++ b/crates/swc_ecma_transforms_base/src/fixer.rs @@ -907,27 +907,30 @@ impl Fixer<'_> { Expr::Call(CallExpr { callee: Callee::Expr(callee), .. - }) - | Expr::OptChain(OptChainExpr { - base: box OptChainBase::Call(OptCall { callee, .. }), - .. - }) if callee.is_seq() => { + }) if callee.is_seq() + || callee.is_arrow() + || callee.is_await_expr() + || callee.is_assign() => + { *callee = Box::new(Expr::Paren(ParenExpr { span: callee.span(), expr: callee.take(), })) } - - Expr::Call(CallExpr { - callee: Callee::Expr(callee), - .. - }) - | Expr::OptChain(OptChainExpr { - base: box OptChainBase::Call(OptCall { callee, .. }), - .. - }) if callee.is_arrow() || callee.is_await_expr() || callee.is_assign() => { - self.wrap(callee); - } + Expr::OptChain(OptChainExpr { base, .. }) => match &mut **base { + OptChainBase::Member(_) => {} + OptChainBase::Call(OptCall { callee, .. }) + if callee.is_seq() + || callee.is_arrow() + || callee.is_await_expr() + || callee.is_assign() => + { + *callee = Box::new(Expr::Paren(ParenExpr { + span: callee.span(), + expr: callee.take(), + })) + } + }, // Function expression cannot start with `function` Expr::Call(CallExpr { From 6897bdadf17d3228d4551f8219243ec45543e5ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Sat, 11 Mar 2023 18:25:01 +0900 Subject: [PATCH 3/5] Fix more --- crates/swc_ecma_transforms_base/src/fixer.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/crates/swc_ecma_transforms_base/src/fixer.rs b/crates/swc_ecma_transforms_base/src/fixer.rs index 995a8d9ffe59..550b9c7c4656 100644 --- a/crates/swc_ecma_transforms_base/src/fixer.rs +++ b/crates/swc_ecma_transforms_base/src/fixer.rs @@ -918,7 +918,6 @@ impl Fixer<'_> { })) } Expr::OptChain(OptChainExpr { base, .. }) => match &mut **base { - OptChainBase::Member(_) => {} OptChainBase::Call(OptCall { callee, .. }) if callee.is_seq() || callee.is_arrow() @@ -930,16 +929,23 @@ impl Fixer<'_> { expr: callee.take(), })) } + + OptChainBase::Call(OptCall { callee, .. }) if callee.is_fn_expr() => match self.ctx + { + Context::ForcedExpr | Context::FreeExpr => {} + + Context::Callee { is_new: true } => self.wrap(e), + + _ => self.wrap(callee), + }, + + _ => {} }, // Function expression cannot start with `function` Expr::Call(CallExpr { callee: Callee::Expr(callee), .. - }) - | Expr::OptChain(OptChainExpr { - base: box OptChainBase::Call(OptCall { callee, .. }), - .. }) if callee.is_fn_expr() => match self.ctx { Context::ForcedExpr | Context::FreeExpr => {} From a4621be4dd2dc0392fa1b978d9fa44acb68c6792 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Sat, 11 Mar 2023 18:26:33 +0900 Subject: [PATCH 4/5] Fix some --- .../es2022/class_properties/private_field.rs | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/crates/swc_ecma_transforms_compat/src/es2022/class_properties/private_field.rs b/crates/swc_ecma_transforms_compat/src/es2022/class_properties/private_field.rs index 608ebfaa5ceb..f99615dbd53a 100644 --- a/crates/swc_ecma_transforms_compat/src/es2022/class_properties/private_field.rs +++ b/crates/swc_ecma_transforms_compat/src/es2022/class_properties/private_field.rs @@ -474,17 +474,26 @@ impl<'a> VisitMut for PrivateAccessVisitor<'a> { member_expr.visit_mut_children_with(self); *e = self.visit_mut_private_get(member_expr, None).0; } - Expr::OptChain(OptChainExpr { - base: - box OptChainBase::Member( + Expr::OptChain(OptChainExpr { base, span, .. }) + if matches!( + &**base, + OptChainBase::Member(MemberExpr { + prop: MemberProp::PrivateName(..), + .. + },) + ) => + { + let member = match &mut **base { + OptChainBase::Member( member @ MemberExpr { prop: MemberProp::PrivateName(..), .. }, - ), - span, - .. - }) => { + ) => member, + _ => { + unreachable!() + } + }; member.visit_mut_children_with(self); let (ident, aliased) = alias_if_required(&member.obj, "_ref"); if aliased { From 17565f645b2ccd869060b7bdfc31575c37041612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Sat, 11 Mar 2023 18:27:39 +0900 Subject: [PATCH 5/5] Fix --- .../src/es2022/class_properties/private_field.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/crates/swc_ecma_transforms_compat/src/es2022/class_properties/private_field.rs b/crates/swc_ecma_transforms_compat/src/es2022/class_properties/private_field.rs index f99615dbd53a..fe314cd285aa 100644 --- a/crates/swc_ecma_transforms_compat/src/es2022/class_properties/private_field.rs +++ b/crates/swc_ecma_transforms_compat/src/es2022/class_properties/private_field.rs @@ -439,10 +439,19 @@ impl<'a> VisitMut for PrivateAccessVisitor<'a> { } Expr::OptChain(OptChainExpr { - base: box OptChainBase::Call(call), + base, question_dot_token, span, - }) if call.callee.is_member() => { + }) if match &**base { + OptChainBase::Call(call) => call.callee.is_member(), + _ => false, + } => + { + let call = match &mut **base { + OptChainBase::Call(call) => call, + _ => unreachable!(), + }; + let mut callee = call.callee.take().member().unwrap(); callee.visit_mut_with(self); call.args.visit_mut_with(self);