From b2c913cc9e724c6b499af4820a32a0b3835316e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 15:49:04 +0900 Subject: [PATCH 01/33] `Decl::$VARIANT(Box::new($ARG))` --- crates/swc_bundler/src/bundler/chunk/cjs.rs | 127 ++++++------ .../src/bundler/chunk/computed_key.rs | 5 +- crates/swc_bundler/src/bundler/chunk/merge.rs | 48 +++-- crates/swc_bundler/src/bundler/finalize.rs | 17 +- crates/swc_bundler/src/util.rs | 41 ++-- .../src/template_literal_caching.rs | 17 +- .../src/classes/constructor.rs | 33 ++-- .../swc_ecma_parser/src/parser/typescript.rs | 43 +++-- .../src/rename/ops.rs | 16 +- .../src/simplify/branch/mod.rs | 4 +- .../src/decorator_2022_03.rs | 34 ++-- .../src/explicit_resource_management.rs | 182 ++++++++++-------- .../swc_ecma_transforms_react/src/jsx/mod.rs | 95 ++++----- crates/swc_ecma_transforms_testing/src/lib.rs | 17 +- crates/swc_ecma_utils/src/constructor.rs | 23 ++- .../src/function/fn_env_hoister.rs | 59 +++--- crates/swc_typescript/src/fast_dts/mod.rs | 7 +- 17 files changed, 422 insertions(+), 346 deletions(-) diff --git a/crates/swc_bundler/src/bundler/chunk/cjs.rs b/crates/swc_bundler/src/bundler/chunk/cjs.rs index daf2ac5de82b..e78b2e48190e 100644 --- a/crates/swc_bundler/src/bundler/chunk/cjs.rs +++ b/crates/swc_bundler/src/bundler/chunk/cjs.rs @@ -150,25 +150,28 @@ fn wrap_module( // var load = __swcpack_require__.bind(void 0, moduleDecl) - Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Var, - declare: false, - decls: vec![VarDeclarator { + Stmt::Decl( + VarDecl { span: DUMMY_SP, - name: Pat::Ident(load_var.into()), - init: Some(Box::new(Expr::Call(CallExpr { + kind: VarDeclKind::Var, + declare: false, + decls: vec![VarDeclarator { span: DUMMY_SP, - callee: Ident::new("__swcpack_require__".into(), DUMMY_SP, helper_ctxt) - .make_member(quote_ident!("bind")) - .as_callee(), - args: vec![Expr::undefined(DUMMY_SP).as_arg(), module_fn.as_arg()], - ..Default::default() - }))), - definite: false, - }], - ..Default::default() - }))) + name: Pat::Ident(load_var.into()), + init: Some(Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: Ident::new("__swcpack_require__".into(), DUMMY_SP, helper_ctxt) + .make_member(quote_ident!("bind")) + .as_callee(), + args: vec![Expr::undefined(DUMMY_SP).as_arg(), module_fn.as_arg()], + ..Default::default() + }))), + definite: false, + }], + ..Default::default() + } + .into(), + ) } struct RequireReplacer<'a, 'b, L, R> @@ -291,55 +294,61 @@ where } ImportSpecifier::Namespace(ns) => { self.replaced = true; - *node = ModuleItem::Stmt(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: i.span, - kind: VarDeclKind::Var, - declare: false, - decls: vec![VarDeclarator { - span: ns.span, - name: ns.local.into(), - init: Some(Box::new( - CallExpr { - span: DUMMY_SP, - callee: load_var.as_callee(), - args: vec![], - - ..Default::default() - } - .into(), - )), - definite: false, - }], - ..Default::default() - })))); + *node = ModuleItem::Stmt(Stmt::Decl( + VarDecl { + span: i.span, + kind: VarDeclKind::Var, + declare: false, + decls: vec![VarDeclarator { + span: ns.span, + name: ns.local.into(), + init: Some(Box::new( + CallExpr { + span: DUMMY_SP, + callee: load_var.as_callee(), + args: vec![], + + ..Default::default() + } + .into(), + )), + definite: false, + }], + ..Default::default() + } + .into(), + )); return; } } } self.replaced = true; - *node = ModuleItem::Stmt(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: i.span, - kind: VarDeclKind::Var, - declare: false, - decls: vec![VarDeclarator { + *node = ModuleItem::Stmt(Stmt::Decl( + VarDecl { span: i.span, - name: Pat::Object(ObjectPat { - span: DUMMY_SP, - props, - optional: false, - type_ann: None, - }), - init: Some(Box::new(Expr::Call(CallExpr { - span: DUMMY_SP, - callee: load_var.as_callee(), - args: vec![], - ..Default::default() - }))), - definite: false, - }], - ..Default::default() - })))); + kind: VarDeclKind::Var, + declare: false, + decls: vec![VarDeclarator { + span: i.span, + name: Pat::Object(ObjectPat { + span: DUMMY_SP, + props, + optional: false, + type_ann: None, + }), + init: Some(Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: load_var.as_callee(), + args: vec![], + ..Default::default() + }))), + definite: false, + }], + ..Default::default() + } + .into(), + )); } } } diff --git a/crates/swc_bundler/src/bundler/chunk/computed_key.rs b/crates/swc_bundler/src/bundler/chunk/computed_key.rs index d7229406eb7c..606d984a77fb 100644 --- a/crates/swc_bundler/src/bundler/chunk/computed_key.rs +++ b/crates/swc_bundler/src/bundler/chunk/computed_key.rs @@ -179,10 +179,7 @@ where }], }; - module.append( - id, - ModuleItem::Stmt(Stmt::Decl(Decl::Var(Box::new(var_decl)))), - ); + module.append(id, ModuleItem::Stmt(Stmt::Decl(var_decl.into()))); // print_hygiene( // "wrap", diff --git a/crates/swc_bundler/src/bundler/chunk/merge.rs b/crates/swc_bundler/src/bundler/chunk/merge.rs index e260df1e78a1..50200f591c76 100644 --- a/crates/swc_bundler/src/bundler/chunk/merge.rs +++ b/crates/swc_bundler/src/bundler/chunk/merge.rs @@ -1057,15 +1057,16 @@ where } if !vars.is_empty() { - new.push(ModuleItem::Stmt(Stmt::Decl(Decl::Var( - Box::new(VarDecl { + new.push(ModuleItem::Stmt(Stmt::Decl( + VarDecl { span: DUMMY_SP, kind: VarDeclKind::Const, declare: Default::default(), decls: vars, ..Default::default() - }), - )))); + } + .into(), + ))); } continue; } @@ -1357,25 +1358,30 @@ impl VisitMut for ImportMetaHandler<'_, '_> { Ok(key_value_props) => { prepend_stmt( &mut n.body, - ModuleItem::Stmt(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: n.span, - kind: VarDeclKind::Const, - declare: false, - decls: vec![VarDeclarator { + ModuleItem::Stmt(Stmt::Decl( + VarDecl { span: n.span, - name: Pat::Ident(self.inline_ident.clone().into()), - init: Some(Box::new(Expr::Object(ObjectLit { + kind: VarDeclKind::Const, + declare: false, + decls: vec![VarDeclarator { span: n.span, - props: key_value_props - .iter() - .cloned() - .map(|kv| PropOrSpread::Prop(Box::new(Prop::KeyValue(kv)))) - .collect(), - }))), - definite: false, - }], - ..Default::default() - })))), + name: Pat::Ident(self.inline_ident.clone().into()), + init: Some(Box::new(Expr::Object(ObjectLit { + span: n.span, + props: key_value_props + .iter() + .cloned() + .map(|kv| { + PropOrSpread::Prop(Box::new(Prop::KeyValue(kv))) + }) + .collect(), + }))), + definite: false, + }], + ..Default::default() + } + .into(), + )), ); } Err(err) => self.err = Some(err), diff --git a/crates/swc_bundler/src/bundler/finalize.rs b/crates/swc_bundler/src/bundler/finalize.rs index da14b24dae4c..f6ac41cd2c5e 100644 --- a/crates/swc_bundler/src/bundler/finalize.rs +++ b/crates/swc_bundler/src/bundler/finalize.rs @@ -306,13 +306,16 @@ where init: Some(export.expr), definite: false, }; - Some(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Const, - declare: false, - decls: vec![var], - ..Default::default() - })))) + Some(Stmt::Decl( + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Const, + declare: false, + decls: vec![var], + ..Default::default() + } + .into(), + )) } ModuleDecl::ExportAll(_) => None, diff --git a/crates/swc_bundler/src/util.rs b/crates/swc_bundler/src/util.rs index e12ed60b38a9..f3f8a87dc0db 100644 --- a/crates/swc_bundler/src/util.rs +++ b/crates/swc_bundler/src/util.rs @@ -17,25 +17,28 @@ const TRACK: bool = false; pub(crate) trait VarDeclaratorExt: Into { fn into_module_item(self, injected_ctxt: SyntaxContext, name: &str) -> ModuleItem { - ModuleItem::Stmt(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - ctxt: injected_ctxt, - kind: VarDeclKind::Const, - declare: false, - decls: if TRACK { - vec![ - self.into(), - Str { - span: DUMMY_SP, - raw: None, - value: name.into(), - } - .assign_to(Ident::new_no_ctxt("INJECTED_FROM".into(), DUMMY_SP)), - ] - } else { - vec![self.into()] - }, - })))) + ModuleItem::Stmt(Stmt::Decl( + VarDecl { + span: DUMMY_SP, + ctxt: injected_ctxt, + kind: VarDeclKind::Const, + declare: false, + decls: if TRACK { + vec![ + self.into(), + Str { + span: DUMMY_SP, + raw: None, + value: name.into(), + } + .assign_to(Ident::new_no_ctxt("INJECTED_FROM".into(), DUMMY_SP)), + ] + } else { + vec![self.into()] + }, + } + .into(), + )) } } diff --git a/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs b/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs index 765e05e894e2..f77326a4a015 100644 --- a/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs +++ b/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs @@ -41,13 +41,16 @@ impl TemplateLiteralCaching { fn create_var_decl(&mut self) -> Option { if !self.decls.is_empty() { - return Some(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Let, - declare: false, - decls: self.decls.clone(), - ..Default::default() - })))); + return Some(Stmt::Decl( + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Let, + declare: false, + decls: self.decls.clone(), + ..Default::default() + } + .into(), + )); } None } diff --git a/crates/swc_ecma_compat_es2015/src/classes/constructor.rs b/crates/swc_ecma_compat_es2015/src/classes/constructor.rs index 58ee2a518d2b..3e6d6617c389 100644 --- a/crates/swc_ecma_compat_es2015/src/classes/constructor.rs +++ b/crates/swc_ecma_compat_es2015/src/classes/constructor.rs @@ -330,22 +330,25 @@ impl VisitMut for ConstructorFolder<'_> { .into_stmt() } Some(SuperFoldingMode::Var) => { - *stmt = Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - declare: false, - kind: VarDeclKind::Var, - decls: vec![VarDeclarator { + *stmt = Stmt::Decl( + VarDecl { span: DUMMY_SP, - name: quote_ident!( - SyntaxContext::empty().apply_mark(self.mark), - "_this" - ) - .into(), - init: Some(expr), - definite: false, - }], - ..Default::default() - }))) + declare: false, + kind: VarDeclKind::Var, + decls: vec![VarDeclarator { + span: DUMMY_SP, + name: quote_ident!( + SyntaxContext::empty().apply_mark(self.mark), + "_this" + ) + .into(), + init: Some(expr), + definite: false, + }], + ..Default::default() + } + .into(), + ) } None => { *stmt = Stmt::Return(ReturnStmt { diff --git a/crates/swc_ecma_parser/src/parser/typescript.rs b/crates/swc_ecma_parser/src/parser/typescript.rs index 48d760483c7d..474e0500767c 100644 --- a/crates/swc_ecma_parser/src/parser/typescript.rs +++ b/crates/swc_ecma_parser/src/parser/typescript.rs @@ -2839,8 +2839,8 @@ mod tests { span: DUMMY_SP, shebang: None, body: { - let first = - ModuleItem::Stmt(Stmt::Decl(Decl::TsTypeAlias(Box::new(TsTypeAliasDecl { + let first = ModuleItem::Stmt(Stmt::Decl( + TsTypeAliasDecl { span: DUMMY_SP, declare: false, id: Ident::new_no_ctxt("test".into(), DUMMY_SP), @@ -2853,7 +2853,9 @@ mod tests { raw: Some("-1".into()), }), })), - })))); + } + .into(), + )); vec![first] }, }; @@ -2873,26 +2875,29 @@ mod tests { span: DUMMY_SP, shebang: None, body: { - let second = ModuleItem::Stmt(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Const, - declare: false, - decls: vec![VarDeclarator { + let second = ModuleItem::Stmt(Stmt::Decl( + VarDecl { span: DUMMY_SP, - name: Pat::Ident(Ident::new_no_ctxt("t".into(), DUMMY_SP).into()), - init: Some(Box::new(Expr::Unary(UnaryExpr { + kind: VarDeclKind::Const, + declare: false, + decls: vec![VarDeclarator { span: DUMMY_SP, - op: op!(unary, "-"), - arg: Box::new(Expr::Lit(Lit::Num(Number { + name: Pat::Ident(Ident::new_no_ctxt("t".into(), DUMMY_SP).into()), + init: Some(Box::new(Expr::Unary(UnaryExpr { span: DUMMY_SP, - value: 1.0, - raw: Some("1".into()), + op: op!(unary, "-"), + arg: Box::new(Expr::Lit(Lit::Num(Number { + span: DUMMY_SP, + value: 1.0, + raw: Some("1".into()), + }))), }))), - }))), - definite: false, - }], - ..Default::default() - })))); + definite: false, + }], + ..Default::default() + } + .into(), + )); vec![second] }, }; diff --git a/crates/swc_ecma_transforms_base/src/rename/ops.rs b/crates/swc_ecma_transforms_base/src/rename/ops.rs index 80158c4635a3..3c3d0c65496e 100644 --- a/crates/swc_ecma_transforms_base/src/rename/ops.rs +++ b/crates/swc_ecma_transforms_base/src/rename/ops.rs @@ -356,17 +356,21 @@ where if renamed.is_empty() { *item = ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl { span, - decl: Decl::Var(Box::new(VarDecl { + decl: VarDecl { decls, ..*var.take() - })), + } + .into(), })); return; } - *item = ModuleItem::Stmt(Stmt::Decl(Decl::Var(Box::new(VarDecl { - decls, - ..*var.take() - })))); + *item = ModuleItem::Stmt(Stmt::Decl( + VarDecl { + decls, + ..*var.take() + } + .into(), + )); self.extra .push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( NamedExport { diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs index c2c4072f0986..808b4d10889a 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs @@ -427,12 +427,12 @@ impl VisitMut for Remover { if v { // Preserve variables if let Some(var) = alt.and_then(|alt| alt.extract_var_ids_as_var()) { - stmts.push(Stmt::Decl(Decl::Var(Box::new(var)))) + stmts.push(Stmt::Decl(var.into())) } stmts.push(*cons); } else { if let Some(var) = cons.extract_var_ids_as_var() { - stmts.push(Stmt::Decl(Decl::Var(Box::new(var)))) + stmts.push(Stmt::Decl(var.into())) } if let Some(alt) = alt { diff --git a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs index 7c4ee7aef273..025b8cc2b080 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs @@ -1583,13 +1583,16 @@ impl VisitMut for Decorator2022_03 { if !self.extra_lets.is_empty() { insert_builder.push_back( index, - Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Let, - decls: self.extra_lets.take(), - declare: false, - ..Default::default() - }))) + Stmt::Decl( + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Let, + decls: self.extra_lets.take(), + declare: false, + ..Default::default() + } + .into(), + ) .into(), ); } @@ -1787,13 +1790,16 @@ impl VisitMut for Decorator2022_03 { if !self.extra_lets.is_empty() { insert_builder.push_back( index, - Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Let, - decls: self.extra_lets.take(), - declare: false, - ..Default::default() - }))), + Stmt::Decl( + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Let, + decls: self.extra_lets.take(), + declare: false, + ..Default::default() + } + .into(), + ), ); } if !self.pre_class_inits.is_empty() { diff --git a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs index 84d99915dde6..e1fb153643aa 100644 --- a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs +++ b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs @@ -75,13 +75,16 @@ impl ExplicitResourceManagement { definite: Default::default(), }; - try_body.push(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Var, - declare: false, - decls: vec![using_ctx_var], - ..Default::default() - })))); + try_body.push(Stmt::Decl( + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Var, + declare: false, + decls: vec![using_ctx_var], + ..Default::default() + } + .into(), + )); for stmt in stmts.take() { match stmt.try_into_stmt() { @@ -122,21 +125,24 @@ impl ExplicitResourceManagement { })) .unwrap(), ); - try_body.push(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Var, - decls: vec![VarDeclarator { + try_body.push(Stmt::Decl( + VarDecl { span: DUMMY_SP, - name: ident.into(), - init: Some(match decl.decl { - DefaultDecl::Class(c) => Box::new(Expr::Class(c)), - DefaultDecl::Fn(f) => Box::new(Expr::Fn(f)), - DefaultDecl::TsInterfaceDecl(_) => unreachable!(), - }), - definite: Default::default(), - }], - ..Default::default() - })))); + kind: VarDeclKind::Var, + decls: vec![VarDeclarator { + span: DUMMY_SP, + name: ident.into(), + init: Some(match decl.decl { + DefaultDecl::Class(c) => Box::new(Expr::Class(c)), + DefaultDecl::Fn(f) => Box::new(Expr::Fn(f)), + DefaultDecl::TsInterfaceDecl(_) => unreachable!(), + }), + definite: Default::default(), + }], + ..Default::default() + } + .into(), + )); } Ok(ModuleDecl::ExportDefaultExpr(decl)) => { @@ -161,18 +167,21 @@ impl ExplicitResourceManagement { })) .unwrap(), ); - try_body.push(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Var, - declare: Default::default(), - decls: vec![VarDeclarator { + try_body.push(Stmt::Decl( + VarDecl { span: DUMMY_SP, - name: ident.into(), - init: Some(decl.expr), - definite: Default::default(), - }], - ..Default::default() - })))); + kind: VarDeclKind::Var, + declare: Default::default(), + decls: vec![VarDeclarator { + span: DUMMY_SP, + name: ident.into(), + init: Some(decl.expr), + definite: Default::default(), + }], + ..Default::default() + } + .into(), + )); } Ok(ModuleDecl::ExportDecl(e)) => { @@ -188,13 +197,16 @@ impl ExplicitResourceManagement { definite: Default::default(), }; - new.push(T::from_stmt(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Var, - declare: false, - decls: vec![var], - ..Default::default() - }))))); + new.push(T::from_stmt(Stmt::Decl( + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Var, + declare: false, + decls: vec![var], + ..Default::default() + } + .into(), + ))); try_body.push(Stmt::Decl(e.decl)); try_body.push(Stmt::Expr(ExprStmt { @@ -245,13 +257,16 @@ impl ExplicitResourceManagement { }) .collect(); - new.push(T::from_stmt(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Var, - declare: false, - decls: var_decls, - ..Default::default() - }))))); + new.push(T::from_stmt(Stmt::Decl( + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Var, + declare: false, + decls: var_decls, + ..Default::default() + } + .into(), + ))); try_body.push(Stmt::Decl(e.decl)); try_body.push(Stmt::Expr(ExprStmt { @@ -421,42 +436,45 @@ impl VisitMut for ExplicitResourceManagement { state.has_await |= decl.is_await; - *s = Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: if self.is_not_top_level { - VarDeclKind::Const - } else { - VarDeclKind::Var - }, - declare: Default::default(), - decls: decl - .decls - .take() - .into_iter() - .map(|d| { - let init = CallExpr { - span: decl.span, - callee: state - .using_ctx - .clone() - .make_member(if decl.is_await { - quote_ident!("a") - } else { - quote_ident!("u") - }) - .as_callee(), - args: vec![d.init.unwrap().as_arg()], - ..Default::default() - }; - - VarDeclarator { - init: Some(init.into()), - ..d - } - }) - .collect(), - ..Default::default() - }))); + *s = Stmt::Decl( + VarDecl { + span: DUMMY_SP, + kind: if self.is_not_top_level { + VarDeclKind::Const + } else { + VarDeclKind::Var + }, + declare: Default::default(), + decls: decl + .decls + .take() + .into_iter() + .map(|d| { + let init = CallExpr { + span: decl.span, + callee: state + .using_ctx + .clone() + .make_member(if decl.is_await { + quote_ident!("a") + } else { + quote_ident!("u") + }) + .as_callee(), + args: vec![d.init.unwrap().as_arg()], + ..Default::default() + }; + + VarDeclarator { + init: Some(init.into()), + ..d + } + }) + .collect(), + ..Default::default() + } + .into(), + ); } } diff --git a/crates/swc_ecma_transforms_react/src/jsx/mod.rs b/crates/swc_ecma_transforms_react/src/jsx/mod.rs index d1577d490975..25df23584496 100644 --- a/crates/swc_ecma_transforms_react/src/jsx/mod.rs +++ b/crates/swc_ecma_transforms_react/src/jsx/mod.rs @@ -1139,57 +1139,60 @@ where // const { createElement } = require('react') // const { jsx: jsx } = require('react/jsx-runtime') fn add_require(imports: Vec<(Ident, IdentName)>, src: &str, unresolved_mark: Mark) -> Stmt { - Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Const, - declare: false, - decls: vec![VarDeclarator { + Stmt::Decl( + VarDecl { span: DUMMY_SP, - name: Pat::Object(ObjectPat { + kind: VarDeclKind::Const, + declare: false, + decls: vec![VarDeclarator { span: DUMMY_SP, - props: imports - .into_iter() - .map(|(local, imported)| { - if imported.sym != local.sym { - ObjectPatProp::KeyValue(KeyValuePatProp { - key: PropName::Ident(imported), - value: Box::new(Pat::Ident(local.into())), - }) - } else { - ObjectPatProp::Assign(AssignPatProp { - span: DUMMY_SP, - key: local.into(), - value: None, - }) - } - }) - .collect(), - optional: false, - type_ann: None, - }), - // require('react') - init: Some(Box::new(Expr::Call(CallExpr { - span: DUMMY_SP, - callee: Callee::Expr(Box::new(Expr::Ident(Ident { - ctxt: SyntaxContext::empty().apply_mark(unresolved_mark), - sym: "require".into(), + name: Pat::Object(ObjectPat { + span: DUMMY_SP, + props: imports + .into_iter() + .map(|(local, imported)| { + if imported.sym != local.sym { + ObjectPatProp::KeyValue(KeyValuePatProp { + key: PropName::Ident(imported), + value: Box::new(Pat::Ident(local.into())), + }) + } else { + ObjectPatProp::Assign(AssignPatProp { + span: DUMMY_SP, + key: local.into(), + value: None, + }) + } + }) + .collect(), optional: false, + type_ann: None, + }), + // require('react') + init: Some(Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: Callee::Expr(Box::new(Expr::Ident(Ident { + ctxt: SyntaxContext::empty().apply_mark(unresolved_mark), + sym: "require".into(), + optional: false, + ..Default::default() + }))), + args: vec![ExprOrSpread { + spread: None, + expr: Box::new(Expr::Lit(Lit::Str(Str { + span: DUMMY_SP, + value: src.into(), + raw: None, + }))), + }], ..Default::default() }))), - args: vec![ExprOrSpread { - spread: None, - expr: Box::new(Expr::Lit(Lit::Str(Str { - span: DUMMY_SP, - value: src.into(), - raw: None, - }))), - }], - ..Default::default() - }))), - definite: false, - }], - ..Default::default() - }))) + definite: false, + }], + ..Default::default() + } + .into(), + ) } impl Jsx diff --git a/crates/swc_ecma_transforms_testing/src/lib.rs b/crates/swc_ecma_transforms_testing/src/lib.rs index 260cb6b0c168..2906f9d24af4 100644 --- a/crates/swc_ecma_transforms_testing/src/lib.rs +++ b/crates/swc_ecma_transforms_testing/src/lib.rs @@ -236,13 +236,16 @@ impl VisitMut for RegeneratorHandler { init: Some(init), definite: Default::default(), }; - *item = ModuleItem::Stmt(Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: import.span, - kind: VarDeclKind::Var, - declare: false, - decls: vec![decl], - ..Default::default() - })))) + *item = ModuleItem::Stmt(Stmt::Decl( + VarDecl { + span: import.span, + kind: VarDeclKind::Var, + declare: false, + decls: vec![decl], + ..Default::default() + } + .into(), + )) } } } diff --git a/crates/swc_ecma_utils/src/constructor.rs b/crates/swc_ecma_utils/src/constructor.rs index 3322a34ca327..c076dea55534 100644 --- a/crates/swc_ecma_utils/src/constructor.rs +++ b/crates/swc_ecma_utils/src/constructor.rs @@ -88,17 +88,20 @@ impl<'a> Fold for Injector<'a> { self.injected |= folder.injected; buf.extend(folder.injected_tmp.map(|ident| { - Stmt::Decl(Decl::Var(Box::new(VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Var, - decls: vec![VarDeclarator { + Stmt::Decl( + VarDecl { span: DUMMY_SP, - name: Pat::Ident(ident.into()), - init: None, - definite: false, - }], - ..Default::default() - }))) + kind: VarDeclKind::Var, + decls: vec![VarDeclarator { + span: DUMMY_SP, + name: Pat::Ident(ident.into()), + init: None, + definite: false, + }], + ..Default::default() + } + .into(), + ) })); buf.push(stmt); } diff --git a/crates/swc_ecma_utils/src/function/fn_env_hoister.rs b/crates/swc_ecma_utils/src/function/fn_env_hoister.rs index 6888f681f605..250ab620b513 100644 --- a/crates/swc_ecma_utils/src/function/fn_env_hoister.rs +++ b/crates/swc_ecma_utils/src/function/fn_env_hoister.rs @@ -123,11 +123,14 @@ impl FnEnvHoister { if decls.is_empty() { None } else { - Some(Stmt::Decl(Decl::Var(Box::new(VarDecl { - kind: VarDeclKind::Var, - decls, - ..Default::default() - })))) + Some(Stmt::Decl( + VarDecl { + kind: VarDeclKind::Var, + decls, + ..Default::default() + } + .into(), + )) } } @@ -180,11 +183,14 @@ impl FnEnvHoister { (None, None) } else { ( - Some(Stmt::Decl(Decl::Var(Box::new(VarDecl { - kind: VarDeclKind::Var, - decls, - ..Default::default() - })))), + Some(Stmt::Decl( + VarDecl { + kind: VarDeclKind::Var, + decls, + ..Default::default() + } + .into(), + )), this, ) } @@ -291,21 +297,24 @@ impl VisitMut for FnEnvHoister { if !self.extra_ident.is_empty() { b.stmts.insert( 0, - Stmt::Decl(Decl::Var(Box::new(VarDecl { - kind: VarDeclKind::Var, - decls: self - .extra_ident - .take() - .into_iter() - .map(|ident| VarDeclarator { - span: DUMMY_SP, - name: ident.into(), - init: None, - definite: false, - }) - .collect(), - ..Default::default() - }))), + Stmt::Decl( + VarDecl { + kind: VarDeclKind::Var, + decls: self + .extra_ident + .take() + .into_iter() + .map(|ident| VarDeclarator { + span: DUMMY_SP, + name: ident.into(), + init: None, + definite: false, + }) + .collect(), + ..Default::default() + } + .into(), + ), ) } } diff --git a/crates/swc_typescript/src/fast_dts/mod.rs b/crates/swc_typescript/src/fast_dts/mod.rs index 75cb8ca3bc18..a8828b3483eb 100644 --- a/crates/swc_typescript/src/fast_dts/mod.rs +++ b/crates/swc_typescript/src/fast_dts/mod.rs @@ -175,7 +175,7 @@ impl FastDts { .map(type_ann); if let Some(type_ann) = type_ann { - new_items.push(ModuleItem::Stmt(Stmt::Decl(Decl::Var(Box::new( + new_items.push(ModuleItem::Stmt(Stmt::Decl( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Const, @@ -191,8 +191,9 @@ impl FastDts { definite: false, }], ..Default::default() - }, - ))))); + } + .into(), + ))); new_items.push(ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultExpr( ExportDefaultExpr { From 470274d541ea966443692a0075634fc26ff45bf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 15:49:30 +0900 Subject: [PATCH 02/33] `Decl::$VARIANT($ARG)` --- .../src/bundler/chunk/computed_key.rs | 26 ++++++++----- crates/swc_bundler/src/bundler/chunk/merge.rs | 39 +++++++++++-------- crates/swc_bundler/src/bundler/finalize.rs | 26 ++++++++----- crates/swc_ecma_ast/src/decl.rs | 2 +- .../src/block_scoped_fn.rs | 2 +- .../swc_ecma_compat_es2015/src/classes/mod.rs | 25 ++++++------ .../src/template_literal.rs | 13 ++++--- .../src/class_properties/mod.rs | 24 ++++++------ .../swc_ecma_compat_es3/src/reserved_word.rs | 2 +- .../src/compress/optimize/loops.rs | 4 +- .../src/compress/optimize/sequences.rs | 2 +- .../src/compress/pure/dead_code.rs | 2 +- .../src/compress/pure/vars.rs | 12 +++--- .../src/parser/class_and_fn.rs | 10 +++-- crates/swc_ecma_parser/src/parser/stmt.rs | 24 +++++------- .../swc_ecma_parser/src/parser/typescript.rs | 10 +++-- .../src/helpers/mod.rs | 27 ++++++------- .../src/rename/ops.rs | 36 ++++++++++------- .../src/common_js.rs | 6 +-- .../src/module_decl_strip.rs | 4 +- .../src/system_js.rs | 17 ++++---- .../src/simplify/branch/mod.rs | 2 +- .../src/decorator_2022_03.rs | 2 +- .../src/decorators/mod.rs | 24 +++++++----- .../src/explicit_resource_management.rs | 2 +- crates/swc_estree_compat/src/swcify/stmt.rs | 8 ++-- 26 files changed, 191 insertions(+), 160 deletions(-) diff --git a/crates/swc_bundler/src/bundler/chunk/computed_key.rs b/crates/swc_bundler/src/bundler/chunk/computed_key.rs index 606d984a77fb..eda0c727bba1 100644 --- a/crates/swc_bundler/src/bundler/chunk/computed_key.rs +++ b/crates/swc_bundler/src/bundler/chunk/computed_key.rs @@ -256,11 +256,14 @@ impl Fold for ExportToReturn { ident.clone(), ); - Some(Stmt::Decl(Decl::Class(ClassDecl { - ident, - class: expr.class, - declare: false, - }))) + Some(Stmt::Decl( + ClassDecl { + ident, + class: expr.class, + declare: false, + } + .into(), + )) } DefaultDecl::Fn(expr) => { let ident = expr.ident; @@ -271,11 +274,14 @@ impl Fold for ExportToReturn { ident.clone(), ); - Some(Stmt::Decl(Decl::Fn(FnDecl { - ident, - function: expr.function, - declare: false, - }))) + Some(Stmt::Decl( + FnDecl { + ident, + function: expr.function, + declare: false, + } + .into(), + )) } DefaultDecl::TsInterfaceDecl(_) => None, }, diff --git a/crates/swc_bundler/src/bundler/chunk/merge.rs b/crates/swc_bundler/src/bundler/chunk/merge.rs index 50200f591c76..c372456ac19a 100644 --- a/crates/swc_bundler/src/bundler/chunk/merge.rs +++ b/crates/swc_bundler/src/bundler/chunk/merge.rs @@ -679,13 +679,14 @@ where // match c.ident { Some(ident) => { - new.push(ModuleItem::Stmt(Stmt::Decl(Decl::Class( + new.push(ModuleItem::Stmt(Stmt::Decl( ClassDecl { ident: ident.clone(), class: c.class, declare: false, - }, - )))); + } + .into(), + ))); new.push(ident.assign_to(local.clone()).into_module_item( injected_ctxt, @@ -706,11 +707,14 @@ where // match f.ident { Some(ident) => { - new.push(ModuleItem::Stmt(Stmt::Decl(Decl::Fn(FnDecl { - ident: ident.clone(), - function: f.function, - declare: false, - })))); + new.push(ModuleItem::Stmt(Stmt::Decl( + FnDecl { + ident: ident.clone(), + function: f.function, + declare: false, + } + .into(), + ))); new.push(ident.assign_to(local.clone()).into_module_item( injected_ctxt, @@ -724,11 +728,14 @@ where // // See: https://github.com/denoland/deno/issues/9346 let ident = private_ident!("default"); - new.push(ModuleItem::Stmt(Stmt::Decl(Decl::Fn(FnDecl { - ident: ident.clone(), - function: f.function, - declare: false, - })))); + new.push(ModuleItem::Stmt(Stmt::Decl( + FnDecl { + ident: ident.clone(), + function: f.function, + declare: false, + } + .into(), + ))); new.push(ident.assign_to(local.clone()).into_module_item( injected_ctxt, @@ -838,13 +845,13 @@ where let local = match export.decl { Decl::Class(c) => { let i = c.ident.clone(); - new.push(ModuleItem::Stmt(Stmt::Decl(Decl::Class(c)))); + new.push(ModuleItem::Stmt(Stmt::Decl(c.into()))); i } Decl::Fn(f) => { let i = f.ident.clone(); - new.push(ModuleItem::Stmt(Stmt::Decl(Decl::Fn(f)))); + new.push(ModuleItem::Stmt(Stmt::Decl(f.into()))); i } @@ -852,7 +859,7 @@ where let ids: Vec = find_pat_ids(&v); // - new.push(ModuleItem::Stmt(Stmt::Decl(Decl::Var(v)))); + new.push(ModuleItem::Stmt(Stmt::Decl(v.into()))); let export = ModuleItem::ModuleDecl(ModuleDecl::ExportNamed(NamedExport { diff --git a/crates/swc_bundler/src/bundler/finalize.rs b/crates/swc_bundler/src/bundler/finalize.rs index f6ac41cd2c5e..a894e59292b4 100644 --- a/crates/swc_bundler/src/bundler/finalize.rs +++ b/crates/swc_bundler/src/bundler/finalize.rs @@ -266,11 +266,14 @@ where }, )))); - Some(Stmt::Decl(Decl::Class(ClassDecl { - ident, - class: expr.class, - declare: false, - }))) + Some(Stmt::Decl( + ClassDecl { + ident, + class: expr.class, + declare: false, + } + .into(), + )) } DefaultDecl::Fn(expr) => { let ident = expr.ident; @@ -287,11 +290,14 @@ where }, )))); - Some(Stmt::Decl(Decl::Fn(FnDecl { - ident, - function: expr.function, - declare: false, - }))) + Some(Stmt::Decl( + FnDecl { + ident, + function: expr.function, + declare: false, + } + .into(), + )) } DefaultDecl::TsInterfaceDecl(_) => None, }, diff --git a/crates/swc_ecma_ast/src/decl.rs b/crates/swc_ecma_ast/src/decl.rs index 65b04d8ee678..0e0f4b4721e9 100644 --- a/crates/swc_ecma_ast/src/decl.rs +++ b/crates/swc_ecma_ast/src/decl.rs @@ -46,7 +46,7 @@ bridge_stmt_from!(Decl, FnDecl); impl Take for Decl { fn dummy() -> Self { - Decl::Var(Take::dummy()) + Take::dummy().into() } } diff --git a/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs b/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs index 1ae481bdec2b..7fd48fd3a165 100644 --- a/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs +++ b/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs @@ -40,7 +40,7 @@ impl VisitMut for BlockScopedFns { if let Stmt::Decl(Decl::Fn(decl)) = stmt { if IdentUsageFinder::find(&decl.ident.to_id(), &decl.function) { - extra_stmts.push(Stmt::Decl(Decl::Fn(decl))); + extra_stmts.push(Stmt::Decl(decl.into())); continue; } stmts.push( diff --git a/crates/swc_ecma_compat_es2015/src/classes/mod.rs b/crates/swc_ecma_compat_es2015/src/classes/mod.rs index 470c30634f3f..5862ecfa847f 100644 --- a/crates/swc_ecma_compat_es2015/src/classes/mod.rs +++ b/crates/swc_ecma_compat_es2015/src/classes/mod.rs @@ -750,18 +750,21 @@ where inject_class_call_check(&mut body, class_name.clone()); } - stmts.push(Stmt::Decl(Decl::Fn(FnDecl { - ident: class_name.clone(), - function: constructor_fn(Constructor { - body: Some(BlockStmt { - span: DUMMY_SP, - stmts: body, - ..Default::default() + stmts.push(Stmt::Decl( + FnDecl { + ident: class_name.clone(), + function: constructor_fn(Constructor { + body: Some(BlockStmt { + span: DUMMY_SP, + stmts: body, + ..Default::default() + }), + ..constructor }), - ..constructor - }), - declare: false, - }))); + declare: false, + } + .into(), + )); } // convert class methods diff --git a/crates/swc_ecma_compat_es2015/src/template_literal.rs b/crates/swc_ecma_compat_es2015/src/template_literal.rs index 312a260a81dc..8b10fcd6ee70 100644 --- a/crates/swc_ecma_compat_es2015/src/template_literal.rs +++ b/crates/swc_ecma_compat_es2015/src/template_literal.rs @@ -356,11 +356,14 @@ impl VisitMut for TemplateLiteral { ..Default::default() }; - self.added.push(Stmt::Decl(Decl::Fn(FnDecl { - declare: false, - ident: fn_ident.clone(), - function: f.into(), - }))); + self.added.push(Stmt::Decl( + FnDecl { + declare: false, + ident: fn_ident.clone(), + function: f.into(), + } + .into(), + )); *e = CallExpr { span: DUMMY_SP, diff --git a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs index 9d2125c91123..9cc30f9697eb 100644 --- a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs +++ b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs @@ -190,7 +190,7 @@ impl VisitMut for ClassProperties { let ident = ident.unwrap_or_else(|| private_ident!("_class")); let (decl, extra) = self.visit_mut_class_as_decl(ident.clone(), class); - extra.merge_with(&mut stmts, Stmt::Decl(Decl::Class(decl))); + extra.merge_with(&mut stmts, Stmt::Decl(decl.into())); stmts.push(Stmt::Return(ReturnStmt { span: DUMMY_SP, @@ -353,10 +353,7 @@ impl ClassProperties { let (decl, extra) = self.visit_mut_class_as_decl(ident.clone(), class); - extra.merge_with( - &mut buf, - T::from_stmt(Stmt::Decl(Decl::Class(decl))), - ); + extra.merge_with(&mut buf, T::from_stmt(Stmt::Decl(decl.into()))); buf.push( match T::try_from_module_decl(ModuleDecl::ExportNamed( @@ -397,7 +394,7 @@ impl ClassProperties { match T::try_from_module_decl(ModuleDecl::ExportDecl( ExportDecl { span, - decl: Decl::Class(decl), + decl: decl.into(), }, )) { Ok(t) => t, @@ -425,7 +422,7 @@ impl ClassProperties { declare: false, })) => { let (decl, extra) = self.visit_mut_class_as_decl(ident, class); - extra.merge_with(&mut buf, T::from_stmt(Stmt::Decl(Decl::Class(decl)))) + extra.merge_with(&mut buf, T::from_stmt(Stmt::Decl(decl.into()))) } _ => { stmt.visit_mut_children_with(self); @@ -956,11 +953,14 @@ impl ClassProperties { in_pat: false, }); - private_method_fn_decls.push(Stmt::Decl(Decl::Fn(FnDecl { - ident: fn_name, - function: method.function, - declare: false, - }))) + private_method_fn_decls.push(Stmt::Decl( + FnDecl { + ident: fn_name, + function: method.function, + declare: false, + } + .into(), + )) } ClassMember::StaticBlock(..) => { diff --git a/crates/swc_ecma_compat_es3/src/reserved_word.rs b/crates/swc_ecma_compat_es3/src/reserved_word.rs index 3b38ea2c4a4a..a1facd687cd0 100644 --- a/crates/swc_ecma_compat_es3/src/reserved_word.rs +++ b/crates/swc_ecma_compat_es3/src/reserved_word.rs @@ -101,7 +101,7 @@ impl VisitMut for ReservedWord { ); } - *module_item = ModuleItem::Stmt(Decl::Var(var.take()).into()); + *module_item = ModuleItem::Stmt(var.take().into().into()); } _ => {} diff --git a/crates/swc_ecma_minifier/src/compress/optimize/loops.rs b/crates/swc_ecma_minifier/src/compress/optimize/loops.rs index ae1feb8f50d7..217f508bdd14 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/loops.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/loops.rs @@ -28,7 +28,7 @@ impl Optimizer<'_> { report_change!("loops: Removing a for loop with instant break"); self.prepend_stmts .extend(f.init.take().map(|init| match init { - VarDeclOrExpr::VarDecl(var) => Stmt::Decl(Decl::Var(var)), + VarDeclOrExpr::VarDecl(var) => Stmt::Decl(var.into()), VarDeclOrExpr::Expr(expr) => Stmt::Expr(ExprStmt { span: DUMMY_SP, expr, @@ -91,7 +91,7 @@ impl Optimizer<'_> { self.prepend_stmts .extend(f.init.take().map(|init| match init { - VarDeclOrExpr::VarDecl(var) => Stmt::Decl(Decl::Var(var)), + VarDeclOrExpr::VarDecl(var) => Stmt::Decl(var.into()), VarDeclOrExpr::Expr(expr) => Stmt::Expr(ExprStmt { span: DUMMY_SP, expr, diff --git a/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs b/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs index 0715f36e2c83..45ff2fb9c61a 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs @@ -315,7 +315,7 @@ impl Optimizer<'_> { } ) && var.decls.iter().all(|v| v.init.is_none()) => { - new_stmts.push(T::from_stmt(Stmt::Decl(Decl::Var(var)))); + new_stmts.push(T::from_stmt(Stmt::Decl(var.into()))); } Stmt::Decl(Decl::Fn(..)) => { diff --git a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs index c8440d4704ac..e3ddb1ad005f 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs @@ -240,7 +240,7 @@ impl Pure<'_> { |(mut decls, mut hoisted_fns, mut new_stmts), stmt| { match stmt.take().try_into_stmt() { Ok(Stmt::Decl(Decl::Fn(f))) => { - hoisted_fns.push(Stmt::Decl(Decl::Fn(f)).into()); + hoisted_fns.push(Stmt::Decl(f.into()).into()); } Ok(t) => { let ids = extract_var_ids(&t).into_iter().map(|i| VarDeclarator { diff --git a/crates/swc_ecma_minifier/src/compress/pure/vars.rs b/crates/swc_ecma_minifier/src/compress/pure/vars.rs index 14c8b9382ffc..1b9ec5bc742c 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/vars.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/vars.rs @@ -78,7 +78,7 @@ impl Pure<'_> { v.decls.extend(var.decls); } _ => { - if let Some(s) = cur.take().map(|c| Stmt::Decl(Decl::Var(c))) { + if let Some(s) = cur.take().map(|c| Stmt::Decl(c.into())) { new.push(T::from_stmt(s)); } cur = Some(var); @@ -104,7 +104,7 @@ impl Pure<'_> { } _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(Stmt::Decl(Decl::Var(s)))); + new.push(T::from_stmt(Stmt::Decl(s.into()))); } new.push(T::from_stmt(Stmt::For(stmt))); } @@ -124,14 +124,14 @@ impl Pure<'_> { } _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(Stmt::Decl(Decl::Var(s)))); + new.push(T::from_stmt(Stmt::Decl(s.into()))); } new.push(T::from_stmt(Stmt::For(stmt))); } }, _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(Stmt::Decl(Decl::Var(s)))); + new.push(T::from_stmt(Stmt::Decl(s.into()))); } new.push(T::from_stmt(stmt)); } @@ -139,7 +139,7 @@ impl Pure<'_> { } Err(item) => { if let Some(s) = cur.take() { - new.push(T::from_stmt(Stmt::Decl(Decl::Var(s)))); + new.push(T::from_stmt(Stmt::Decl(s.into()))); } new.push(item); } @@ -147,7 +147,7 @@ impl Pure<'_> { }); if let Some(s) = cur.take() { - new.push(T::from_stmt(Stmt::Decl(Decl::Var(s)))); + new.push(T::from_stmt(Stmt::Decl(s.into()))); } drop_invalid_stmts(&mut new); diff --git a/crates/swc_ecma_parser/src/parser/class_and_fn.rs b/crates/swc_ecma_parser/src/parser/class_and_fn.rs index e0db38b63f11..16bb7a6bc752 100644 --- a/crates/swc_ecma_parser/src/parser/class_and_fn.rs +++ b/crates/swc_ecma_parser/src/parser/class_and_fn.rs @@ -1620,21 +1620,23 @@ impl OutputType for Decl { ) -> Result { let ident = ident.ok_or(SyntaxError::ExpectedIdent)?; - Ok(Decl::Fn(FnDecl { + Ok(FnDecl { declare: false, ident, function, - })) + } + .into()) } fn finish_class(_: Span, ident: Option, class: Box) -> Result { let ident = ident.ok_or(SyntaxError::ExpectedIdent)?; - Ok(Decl::Class(ClassDecl { + Ok(ClassDecl { declare: false, ident, class, - })) + } + .into()) } } diff --git a/crates/swc_ecma_parser/src/parser/stmt.rs b/crates/swc_ecma_parser/src/parser/stmt.rs index 29f1dc406fff..fdeec79425db 100644 --- a/crates/swc_ecma_parser/src/parser/stmt.rs +++ b/crates/swc_ecma_parser/src/parser/stmt.rs @@ -133,7 +133,7 @@ impl<'a, I: Tokens> Parser { let v = self.parse_using_decl(start, true)?; if let Some(v) = v { - return Ok(Stmt::Decl(Decl::Using(v))); + return Ok(Stmt::Decl(v.into())); } } @@ -164,7 +164,7 @@ impl<'a, I: Tokens> Parser { assert_and_bump!(self, "await"); let v = self.parse_using_decl(start, true)?; if let Some(v) = v { - return Ok(Stmt::Decl(Decl::Using(v))); + return Ok(Stmt::Decl(v.into())); } } } @@ -294,12 +294,12 @@ impl<'a, I: Tokens> Parser { tok!("var") => { let v = self.parse_var_stmt(false)?; - return Ok(Stmt::Decl(Decl::Var(v))); + return Ok(Stmt::Decl(v.into())); } tok!("const") if include_decl => { let v = self.parse_var_stmt(false)?; - return Ok(Stmt::Decl(Decl::Var(v))); + return Ok(Stmt::Decl(v.into())); } // 'let' can start an identifier reference. @@ -312,14 +312,14 @@ impl<'a, I: Tokens> Parser { if is_keyword { let v = self.parse_var_stmt(false)?; - return Ok(Stmt::Decl(Decl::Var(v))); + return Ok(Stmt::Decl(v.into())); } } tok!("using") if include_decl => { let v = self.parse_using_decl(start, false)?; if let Some(v) = v { - return Ok(Stmt::Decl(Decl::Using(v))); + return Ok(Stmt::Decl(v.into())); } } @@ -330,9 +330,7 @@ impl<'a, I: Tokens> Parser { { let start = self.input.cur_pos(); bump!(self); - return Ok(Stmt::Decl(Decl::TsInterface( - self.parse_ts_interface_decl(start)?, - ))); + return Ok(Stmt::Decl(self.parse_ts_interface_decl(start)?.into())); } } @@ -343,9 +341,7 @@ impl<'a, I: Tokens> Parser { { let start = self.input.cur_pos(); bump!(self); - return Ok(Stmt::Decl(Decl::TsTypeAlias( - self.parse_ts_type_alias_decl(start)?, - ))); + return Ok(Stmt::Decl(self.parse_ts_type_alias_decl(start)?.into())); } } @@ -356,9 +352,7 @@ impl<'a, I: Tokens> Parser { { let start = self.input.cur_pos(); bump!(self); - return Ok(Stmt::Decl(Decl::TsEnum( - self.parse_ts_enum_decl(start, false)?, - ))); + return Ok(Stmt::Decl(self.parse_ts_enum_decl(start, false)?.into())); } } diff --git a/crates/swc_ecma_parser/src/parser/typescript.rs b/crates/swc_ecma_parser/src/parser/typescript.rs index 474e0500767c..6cc65b584461 100644 --- a/crates/swc_ecma_parser/src/parser/typescript.rs +++ b/crates/swc_ecma_parser/src/parser/typescript.rs @@ -2388,7 +2388,7 @@ impl Parser { return p .parse_fn_decl(decorators) .map(|decl| match decl { - Decl::Fn(f) => Decl::Fn(FnDecl { + Decl::Fn(f) => FnDecl { declare: true, function: Box::new(Function { span: Span { @@ -2398,7 +2398,8 @@ impl Parser { ..*f.function }), ..f - }), + } + .into(), _ => decl, }) .map(Some); @@ -2408,7 +2409,7 @@ impl Parser { return p .parse_class_decl(start, start, decorators, false) .map(|decl| match decl { - Decl::Class(c) => Decl::Class(ClassDecl { + Decl::Class(c) => ClassDecl { declare: true, class: Box::new(Class { span: Span { @@ -2418,7 +2419,8 @@ impl Parser { ..*c.class }), ..c - }), + } + .into(), _ => decl, }) .map(Some); diff --git a/crates/swc_ecma_transforms_base/src/helpers/mod.rs b/crates/swc_ecma_transforms_base/src/helpers/mod.rs index 4a2e1398646e..aacaceb4c604 100644 --- a/crates/swc_ecma_transforms_base/src/helpers/mod.rs +++ b/crates/swc_ecma_transforms_base/src/helpers/mod.rs @@ -450,21 +450,18 @@ impl InjectHelpers { ..Default::default() }; let ctxt = SyntaxContext::empty().apply_mark(mark); - let decl = Decl::Var( - VarDecl { - kind: VarDeclKind::Var, - decls: vec![VarDeclarator { - span: DUMMY_SP, - name: Pat::Ident( - Ident::new(format!("_{}", name).into(), DUMMY_SP, ctxt).into(), - ), - init: Some(c.into()), - definite: false, - }], - ..Default::default() - } - .into(), - ); + let decl = VarDecl { + kind: VarDeclKind::Var, + decls: vec![VarDeclarator { + span: DUMMY_SP, + name: Pat::Ident(Ident::new(format!("_{}", name).into(), DUMMY_SP, ctxt).into()), + init: Some(c.into()), + definite: false, + }], + ..Default::default() + } + .into() + .into(); Stmt::Decl(decl) } diff --git a/crates/swc_ecma_transforms_base/src/rename/ops.rs b/crates/swc_ecma_transforms_base/src/rename/ops.rs index 3c3d0c65496e..29c2f94c63b6 100644 --- a/crates/swc_ecma_transforms_base/src/rename/ops.rs +++ b/crates/swc_ecma_transforms_base/src/rename/ops.rs @@ -277,11 +277,14 @@ where let orig_ident = ident.clone(); match self.rename_ident(&mut ident) { Ok(..) => { - *item = ModuleItem::Stmt(Stmt::Decl(Decl::Class(ClassDecl { - ident: ident.clone(), - class: class.take(), - declare: *declare, - }))); + *item = ModuleItem::Stmt(Stmt::Decl( + ClassDecl { + ident: ident.clone(), + class: class.take(), + declare: *declare, + } + .into(), + )); export!( ModuleExportName::Ident(orig_ident), ModuleExportName::Ident(ident.take()) @@ -290,11 +293,12 @@ where Err(..) => { *item = ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl { span: *span, - decl: Decl::Class(ClassDecl { + decl: ClassDecl { ident: ident.take(), class: class.take(), declare: *declare, - }), + } + .into(), })) } } @@ -315,11 +319,14 @@ where let orig_ident = ident.clone(); match self.rename_ident(&mut ident) { Ok(..) => { - *item = ModuleItem::Stmt(Stmt::Decl(Decl::Fn(FnDecl { - ident: ident.clone(), - function, - declare: *declare, - }))); + *item = ModuleItem::Stmt(Stmt::Decl( + FnDecl { + ident: ident.clone(), + function, + declare: *declare, + } + .into(), + )); export!( ModuleExportName::Ident(orig_ident), ModuleExportName::Ident(ident) @@ -328,11 +335,12 @@ where Err(..) => { *item = ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl { span: *span, - decl: Decl::Fn(FnDecl { + decl: FnDecl { ident, function, declare: *declare, - }), + } + .into(), })) } } diff --git a/crates/swc_ecma_transforms_module/src/common_js.rs b/crates/swc_ecma_transforms_module/src/common_js.rs index f8a6ccde113e..2de953f3f47b 100644 --- a/crates/swc_ecma_transforms_module/src/common_js.rs +++ b/crates/swc_ecma_transforms_module/src/common_js.rs @@ -348,11 +348,7 @@ where if decl_mod_ident { let stmt = if is_lazy { - Stmt::Decl(Decl::Fn(lazy_require( - import_expr, - mod_ident, - self.const_var_kind, - ))) + Stmt::Decl(lazy_require(import_expr, mod_ident, self.const_var_kind).into()) } else { Stmt::Decl( import_expr diff --git a/crates/swc_ecma_transforms_module/src/module_decl_strip.rs b/crates/swc_ecma_transforms_module/src/module_decl_strip.rs index 096c59895ef3..17ed1d729a39 100644 --- a/crates/swc_ecma_transforms_module/src/module_decl_strip.rs +++ b/crates/swc_ecma_transforms_module/src/module_decl_strip.rs @@ -78,13 +78,13 @@ impl VisitMut for ModuleDeclStrip { DefaultDecl::Class(class_expr) => list.extend( class_expr .as_class_decl() - .map(|decl| Stmt::Decl(Decl::Class(decl))) + .map(|decl| Stmt::Decl(decl.into())) .map(From::from), ), DefaultDecl::Fn(fn_expr) => list.extend( fn_expr .as_fn_decl() - .map(|decl| Stmt::Decl(Decl::Fn(decl))) + .map(|decl| Stmt::Decl(decl.into())) .map(From::from), ), DefaultDecl::TsInterfaceDecl(_) => continue, diff --git a/crates/swc_ecma_transforms_module/src/system_js.rs b/crates/swc_ecma_transforms_module/src/system_js.rs index 893c029a99d9..8b828628ea9a 100644 --- a/crates/swc_ecma_transforms_module/src/system_js.rs +++ b/crates/swc_ecma_transforms_module/src/system_js.rs @@ -856,7 +856,7 @@ impl Fold for SystemJs { fn_decl.ident.to_id(), fn_decl.ident.sym.clone(), ); - before_body_stmts.push(Stmt::Decl(Decl::Fn(fn_decl))); + before_body_stmts.push(Stmt::Decl(fn_decl.into())); } Decl::Var(var_decl) => { let mut decl = VarDecl { @@ -904,11 +904,14 @@ impl Fold for SystemJs { self.export_names.push("default".into()); self.export_values.push(ident.clone().into()); self.add_export_name(ident.to_id(), "default".into()); - before_body_stmts.push(Stmt::Decl(Decl::Fn(FnDecl { - ident: ident.clone(), - declare: false, - function: fn_expr.function, - }))); + before_body_stmts.push(Stmt::Decl( + FnDecl { + ident: ident.clone(), + declare: false, + function: fn_expr.function, + } + .into(), + )); } else { self.export_names.push("default".into()); self.export_values.push(fn_expr.into()); @@ -953,7 +956,7 @@ impl Fold for SystemJs { ); } Decl::Fn(fn_decl) => { - before_body_stmts.push(Stmt::Decl(Decl::Fn(fn_decl))); + before_body_stmts.push(Stmt::Decl(fn_decl.into())); } _ => execute_stmts.push(Stmt::Decl(decl)), }, diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs index 808b4d10889a..540cac2df9c1 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs @@ -1314,7 +1314,7 @@ impl Remover { for t in iter { match t.try_into_stmt() { Ok(Stmt::Decl(Decl::Fn(f))) => { - hoisted_fns.push(T::from_stmt(Stmt::Decl(Decl::Fn(f)))); + hoisted_fns.push(T::from_stmt(Stmt::Decl(f.into()))); } Ok(t) => { let ids = extract_var_ids(&t).into_iter().map(|i| { diff --git a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs index 025b8cc2b080..41375b942177 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs @@ -724,7 +724,7 @@ impl Decorator2022_03 { })); self.state = old_state; - Stmt::Decl(Decl::Class(c.take())) + Stmt::Decl(c.take().into()) } fn process_decorators(&mut self, decorators: &mut [Decorator]) { diff --git a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs index 840fc80cf4fe..2582565a1eca 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs @@ -99,11 +99,12 @@ impl Fold for Decorators { class, }) => { if !contains_decorator(&class) { - return Decl::Class(ClassDecl { + return ClassDecl { ident, declare: false, class, - }); + } + .into(); } let decorate_call = Box::new(self.fold_class_inner(ident.clone(), class)); @@ -586,16 +587,19 @@ impl Decorators { None } .into_iter() - .chain(iter::once(Stmt::Decl(Decl::Class(ClassDecl { - ident: ident.clone(), - class: Class { - decorators: Default::default(), - body: vec![constructor], - ..*class + .chain(iter::once(Stmt::Decl( + ClassDecl { + ident: ident.clone(), + class: Class { + decorators: Default::default(), + body: vec![constructor], + ..*class + } + .into(), + declare: false, } .into(), - declare: false, - })))) + ))) .chain(iter::once(Stmt::Return(ReturnStmt { span: DUMMY_SP, arg: Some( diff --git a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs index e1fb153643aa..5dcdee5972a8 100644 --- a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs +++ b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs @@ -93,7 +93,7 @@ impl ExplicitResourceManagement { } Ok(Stmt::Decl(Decl::Var(var))) => { // var.kind = VarDeclKind::Var; - try_body.push(Stmt::Decl(Decl::Var(var))); + try_body.push(Stmt::Decl(var.into())); } Ok(stmt) => try_body.push(stmt), Err(stmt) => match stmt.try_into_module_decl() { diff --git a/crates/swc_estree_compat/src/swcify/stmt.rs b/crates/swc_estree_compat/src/swcify/stmt.rs index e1a8492621f6..229c567a5c77 100644 --- a/crates/swc_estree_compat/src/swcify/stmt.rs +++ b/crates/swc_estree_compat/src/swcify/stmt.rs @@ -56,7 +56,7 @@ impl Swcify for Statement { Statement::Expr(v) => v.swcify(ctx).into(), Statement::ForIn(v) => v.swcify(ctx).into(), Statement::For(v) => v.swcify(ctx).into(), - Statement::FuncDecl(v) => Decl::Fn(v.swcify(ctx)).into(), + Statement::FuncDecl(v) => v.swcify(ctx).into().into(), Statement::If(v) => v.swcify(ctx).into(), Statement::Labeled(v) => v.swcify(ctx).into(), Statement::Return(v) => v.swcify(ctx).into(), @@ -66,7 +66,7 @@ impl Swcify for Statement { Statement::VarDecl(v) => v.swcify(ctx).into(), Statement::While(v) => v.swcify(ctx).into(), Statement::With(v) => v.swcify(ctx).into(), - Statement::ClassDecl(v) => Decl::Class(v.swcify(ctx)).into(), + Statement::ClassDecl(v) => v.swcify(ctx).into().into(), Statement::ExportAllDecl(v) => { return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) } @@ -85,8 +85,8 @@ impl Swcify for Statement { Statement::DeclareModuleExports(v) => { return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) } - Statement::DeclTypeAlias(v) => Stmt::Decl(Decl::from(v.swcify(ctx))), - Statement::DeclVar(v) => Stmt::Decl(Decl::from(v.swcify(ctx))), + Statement::DeclTypeAlias(v) => Stmt::Decl(v.swcify(ctx).into()), + Statement::DeclVar(v) => Stmt::Decl(v.swcify(ctx).into()), Statement::DeclExportDeclaration(v) => { return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) } From cd070bb5ea71bc38aa8eca57335e20c4e4841620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 15:50:01 +0900 Subject: [PATCH 03/33] `Stmt::$VARIANT(Box::new($ARG))` --- crates/swc_ecma_parser/src/parser/stmt.rs | 5 +++-- .../src/simplify/branch/mod.rs | 5 +++-- .../src/explicit_resource_management.rs | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/crates/swc_ecma_parser/src/parser/stmt.rs b/crates/swc_ecma_parser/src/parser/stmt.rs index fdeec79425db..888dffd9bbda 100644 --- a/crates/swc_ecma_parser/src/parser/stmt.rs +++ b/crates/swc_ecma_parser/src/parser/stmt.rs @@ -707,12 +707,13 @@ impl<'a, I: Tokens> Parser { } let span = span!(self, start); - Ok(Stmt::Try(Box::new(TryStmt { + Ok(TryStmt { span, block, handler, finalizer, - }))) + } + .into()) } fn parse_catch_clause(&mut self) -> PResult> { diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs index 540cac2df9c1..8959a3d9c329 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs @@ -581,12 +581,13 @@ impl VisitMut for Remover { return Stmt::Block(block); } - Stmt::Try(Box::new(TryStmt { + TryStmt { span, block, handler, finalizer, - })) + } + .into() } Stmt::Switch(mut s) => { diff --git a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs index 5dcdee5972a8..45614c146515 100644 --- a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs +++ b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs @@ -386,7 +386,7 @@ impl ExplicitResourceManagement { }), }; - new.push(T::from_stmt(Stmt::Try(Box::new(try_stmt)))); + new.push(T::from_stmt(try_stmt.into())); new.extend(extras); *stmts = new; From c09c5a7e5d6f7552a9e28f1c230577e7e858824c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 15:50:30 +0900 Subject: [PATCH 04/33] `Stmt::$VARIANT($ARG)` --- crates/swc_bundler/src/bundler/chunk/cjs.rs | 49 +- .../src/bundler/chunk/computed_key.rs | 21 +- crates/swc_bundler/src/bundler/chunk/merge.rs | 31 +- crates/swc_bundler/src/bundler/finalize.rs | 40 +- crates/swc_bundler/src/inline.rs | 2 +- crates/swc_bundler/src/util.rs | 5 +- .../src/template_literal_caching.rs | 5 +- .../src/block_scoped_fn.rs | 2 +- .../src/block_scoping/mod.rs | 44 +- .../src/classes/constructor.rs | 40 +- .../swc_ecma_compat_es2015/src/classes/mod.rs | 80 ++-- crates/swc_ecma_compat_es2015/src/for_of.rs | 17 +- .../swc_ecma_compat_es2015/src/generator.rs | 453 ++++++++++-------- .../swc_ecma_compat_es2015/src/parameters.rs | 262 +++++----- .../src/template_literal.rs | 5 +- .../src/async_to_generator.rs | 88 ++-- .../src/class_properties/member_init.rs | 44 +- .../src/class_properties/mod.rs | 42 +- .../src/private_in_object.rs | 22 +- .../src/compress/hoist_decls.rs | 27 +- .../src/compress/optimize/bools.rs | 5 +- .../src/compress/optimize/conditionals.rs | 55 ++- .../src/compress/optimize/if_return.rs | 22 +- .../src/compress/optimize/loops.rs | 55 ++- .../src/compress/optimize/mod.rs | 93 ++-- .../src/compress/optimize/sequences.rs | 53 +- .../src/compress/optimize/switches.rs | 35 +- .../src/compress/optimize/unused.rs | 27 +- .../src/compress/pure/dead_code.rs | 60 ++- .../src/compress/pure/if_return.rs | 33 +- .../src/compress/pure/loops.rs | 10 +- .../src/compress/pure/misc.rs | 4 +- .../src/compress/pure/mod.rs | 6 +- .../src/compress/pure/vars.rs | 20 +- .../src/compress/util/mod.rs | 2 +- crates/swc_ecma_parser/src/parser/stmt.rs | 98 ++-- .../src/parser/stmt/module_item.rs | 10 +- .../swc_ecma_parser/src/parser/typescript.rs | 10 +- crates/swc_ecma_preset_env/src/lib.rs | 10 +- crates/swc_ecma_transforms_base/src/fixer.rs | 13 +- .../src/helpers/mod.rs | 2 +- .../src/rename/ops.rs | 15 +- .../tests/fixer_test262.rs | 4 +- .../src/common_js.rs | 15 +- .../src/module_decl_strip.rs | 11 +- .../src/system_js.rs | 136 +++--- .../src/simplify/branch/mod.rs | 149 +++--- .../src/simplify/dce/mod.rs | 11 +- .../src/decorator_2022_03.rs | 93 ++-- .../src/decorators/legacy/mod.rs | 10 +- .../src/decorators/mod.rs | 60 +-- .../src/explicit_resource_management.rs | 175 +++---- .../swc_ecma_transforms_react/src/jsx/mod.rs | 97 ++-- .../src/refresh/hook.rs | 11 +- .../src/refresh/mod.rs | 48 +- .../src/refresh/util.rs | 5 +- crates/swc_ecma_transforms_testing/src/lib.rs | 5 +- .../src/transform.rs | 57 +-- crates/swc_ecma_utils/src/constructor.rs | 25 +- crates/swc_ecma_utils/src/factory.rs | 5 +- .../src/function/fn_env_hoister.rs | 45 +- .../src/function/function_wrapper.rs | 50 +- crates/swc_estree_compat/src/swcify/stmt.rs | 12 +- crates/swc_node_bundler/src/loaders/json.rs | 21 +- crates/swc_typescript/src/fast_dts/mod.rs | 5 +- 65 files changed, 1657 insertions(+), 1310 deletions(-) diff --git a/crates/swc_bundler/src/bundler/chunk/cjs.rs b/crates/swc_bundler/src/bundler/chunk/cjs.rs index e78b2e48190e..76200fe45757 100644 --- a/crates/swc_bundler/src/bundler/chunk/cjs.rs +++ b/crates/swc_bundler/src/bundler/chunk/cjs.rs @@ -150,28 +150,27 @@ fn wrap_module( // var load = __swcpack_require__.bind(void 0, moduleDecl) - Stmt::Decl( - VarDecl { + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Var, + declare: false, + decls: vec![VarDeclarator { span: DUMMY_SP, - kind: VarDeclKind::Var, - declare: false, - decls: vec![VarDeclarator { + name: Pat::Ident(load_var.into()), + init: Some(Box::new(Expr::Call(CallExpr { span: DUMMY_SP, - name: Pat::Ident(load_var.into()), - init: Some(Box::new(Expr::Call(CallExpr { - span: DUMMY_SP, - callee: Ident::new("__swcpack_require__".into(), DUMMY_SP, helper_ctxt) - .make_member(quote_ident!("bind")) - .as_callee(), - args: vec![Expr::undefined(DUMMY_SP).as_arg(), module_fn.as_arg()], - ..Default::default() - }))), - definite: false, - }], - ..Default::default() - } - .into(), - ) + callee: Ident::new("__swcpack_require__".into(), DUMMY_SP, helper_ctxt) + .make_member(quote_ident!("bind")) + .as_callee(), + args: vec![Expr::undefined(DUMMY_SP).as_arg(), module_fn.as_arg()], + ..Default::default() + }))), + definite: false, + }], + ..Default::default() + } + .into() + .into() } struct RequireReplacer<'a, 'b, L, R> @@ -294,7 +293,7 @@ where } ImportSpecifier::Namespace(ns) => { self.replaced = true; - *node = ModuleItem::Stmt(Stmt::Decl( + *node = ModuleItem::Stmt( VarDecl { span: i.span, kind: VarDeclKind::Var, @@ -316,15 +315,16 @@ where }], ..Default::default() } + .into() .into(), - )); + ); return; } } } self.replaced = true; - *node = ModuleItem::Stmt(Stmt::Decl( + *node = ModuleItem::Stmt( VarDecl { span: i.span, kind: VarDeclKind::Var, @@ -347,8 +347,9 @@ where }], ..Default::default() } + .into() .into(), - )); + ); } } } diff --git a/crates/swc_bundler/src/bundler/chunk/computed_key.rs b/crates/swc_bundler/src/bundler/chunk/computed_key.rs index eda0c727bba1..6b284cebde7d 100644 --- a/crates/swc_bundler/src/bundler/chunk/computed_key.rs +++ b/crates/swc_bundler/src/bundler/chunk/computed_key.rs @@ -112,7 +112,7 @@ where module.append_all(additional_items); - let return_stmt = Stmt::Return(ReturnStmt { + let return_stmt = ReturnStmt { span: DUMMY_SP, arg: Some( ObjectLit { @@ -121,7 +121,8 @@ where } .into(), ), - }); + } + .into(); module.iter().for_each(|(_, v)| { if let ModuleItem::ModuleDecl(ModuleDecl::ExportAll(ref export)) = v { @@ -179,7 +180,7 @@ where }], }; - module.append(id, ModuleItem::Stmt(Stmt::Decl(var_decl.into()))); + module.append(id, ModuleItem::Stmt(var_decl.into().into())); // print_hygiene( // "wrap", @@ -243,7 +244,7 @@ impl Fold for ExportToReturn { _ => unreachable!(), } - Some(Stmt::Decl(export.decl)) + Some(export.decl.into()) } ModuleDecl::ExportDefaultDecl(export) => match export.decl { @@ -256,14 +257,15 @@ impl Fold for ExportToReturn { ident.clone(), ); - Some(Stmt::Decl( + Some( ClassDecl { ident, class: expr.class, declare: false, } + .into() .into(), - )) + ) } DefaultDecl::Fn(expr) => { let ident = expr.ident; @@ -274,14 +276,15 @@ impl Fold for ExportToReturn { ident.clone(), ); - Some(Stmt::Decl( + Some( FnDecl { ident, function: expr.function, declare: false, } + .into() .into(), - )) + ) } DefaultDecl::TsInterfaceDecl(_) => None, }, @@ -336,7 +339,7 @@ impl Fold for ExportToReturn { if let Some(stmt) = stmt { ModuleItem::Stmt(stmt) } else { - ModuleItem::Stmt(Stmt::Empty(EmptyStmt { span: DUMMY_SP })) + ModuleItem::Stmt(EmptyStmt { span: DUMMY_SP }.into()) } } } diff --git a/crates/swc_bundler/src/bundler/chunk/merge.rs b/crates/swc_bundler/src/bundler/chunk/merge.rs index c372456ac19a..1a918566eac0 100644 --- a/crates/swc_bundler/src/bundler/chunk/merge.rs +++ b/crates/swc_bundler/src/bundler/chunk/merge.rs @@ -679,14 +679,15 @@ where // match c.ident { Some(ident) => { - new.push(ModuleItem::Stmt(Stmt::Decl( + new.push(ModuleItem::Stmt( ClassDecl { ident: ident.clone(), class: c.class, declare: false, } + .into() .into(), - ))); + )); new.push(ident.assign_to(local.clone()).into_module_item( injected_ctxt, @@ -707,14 +708,15 @@ where // match f.ident { Some(ident) => { - new.push(ModuleItem::Stmt(Stmt::Decl( + new.push(ModuleItem::Stmt( FnDecl { ident: ident.clone(), function: f.function, declare: false, } + .into() .into(), - ))); + )); new.push(ident.assign_to(local.clone()).into_module_item( injected_ctxt, @@ -728,14 +730,15 @@ where // // See: https://github.com/denoland/deno/issues/9346 let ident = private_ident!("default"); - new.push(ModuleItem::Stmt(Stmt::Decl( + new.push(ModuleItem::Stmt( FnDecl { ident: ident.clone(), function: f.function, declare: false, } + .into() .into(), - ))); + )); new.push(ident.assign_to(local.clone()).into_module_item( injected_ctxt, @@ -845,13 +848,13 @@ where let local = match export.decl { Decl::Class(c) => { let i = c.ident.clone(); - new.push(ModuleItem::Stmt(Stmt::Decl(c.into()))); + new.push(ModuleItem::Stmt(c.into().into())); i } Decl::Fn(f) => { let i = f.ident.clone(); - new.push(ModuleItem::Stmt(Stmt::Decl(f.into()))); + new.push(ModuleItem::Stmt(f.into().into())); i } @@ -859,7 +862,7 @@ where let ids: Vec = find_pat_ids(&v); // - new.push(ModuleItem::Stmt(Stmt::Decl(v.into()))); + new.push(ModuleItem::Stmt(v.into().into())); let export = ModuleItem::ModuleDecl(ModuleDecl::ExportNamed(NamedExport { @@ -1064,7 +1067,7 @@ where } if !vars.is_empty() { - new.push(ModuleItem::Stmt(Stmt::Decl( + new.push(ModuleItem::Stmt( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Const, @@ -1072,8 +1075,9 @@ where decls: vars, ..Default::default() } + .into() .into(), - ))); + )); } continue; } @@ -1365,7 +1369,7 @@ impl VisitMut for ImportMetaHandler<'_, '_> { Ok(key_value_props) => { prepend_stmt( &mut n.body, - ModuleItem::Stmt(Stmt::Decl( + ModuleItem::Stmt( VarDecl { span: n.span, kind: VarDeclKind::Const, @@ -1387,8 +1391,9 @@ impl VisitMut for ImportMetaHandler<'_, '_> { }], ..Default::default() } + .into() .into(), - )), + ), ); } Err(err) => self.err = Some(err), diff --git a/crates/swc_bundler/src/bundler/finalize.rs b/crates/swc_bundler/src/bundler/finalize.rs index a894e59292b4..836c9e324bc3 100644 --- a/crates/swc_bundler/src/bundler/finalize.rs +++ b/crates/swc_bundler/src/bundler/finalize.rs @@ -190,7 +190,7 @@ where _ => unreachable!(), } - Some(Stmt::Decl(export.decl)) + Some(export.decl.into()) } ModuleDecl::ExportNamed(NamedExport { @@ -266,14 +266,15 @@ where }, )))); - Some(Stmt::Decl( + Some( ClassDecl { ident, class: expr.class, declare: false, } + .into() .into(), - )) + ) } DefaultDecl::Fn(expr) => { let ident = expr.ident; @@ -290,14 +291,15 @@ where }, )))); - Some(Stmt::Decl( + Some( FnDecl { ident, function: expr.function, declare: false, } + .into() .into(), - )) + ) } DefaultDecl::TsInterfaceDecl(_) => None, }, @@ -312,7 +314,7 @@ where init: Some(export.expr), definite: false, }; - Some(Stmt::Decl( + Some( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Const, @@ -320,8 +322,9 @@ where decls: vec![var], ..Default::default() } + .into() .into(), - )) + ) } ModuleDecl::ExportAll(_) => None, @@ -330,16 +333,19 @@ where .collect(), ..Default::default() }; - body.stmts.push(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some( - ObjectLit { - span: DUMMY_SP, - props, - } - .into(), - ), - })); + body.stmts.push( + ReturnStmt { + span: DUMMY_SP, + arg: Some( + ObjectLit { + span: DUMMY_SP, + props, + } + .into(), + ), + } + .into(), + ); let f = Function { is_generator: false, diff --git a/crates/swc_bundler/src/inline.rs b/crates/swc_bundler/src/inline.rs index 36520ad86026..a58b24c0cac8 100644 --- a/crates/swc_bundler/src/inline.rs +++ b/crates/swc_bundler/src/inline.rs @@ -148,7 +148,7 @@ impl VisitMut for Inliner { match n { Stmt::Decl(Decl::Var(var)) if var.decls.is_empty() => { - *n = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *n = EmptyStmt { span: DUMMY_SP }.into(); } _ => {} } diff --git a/crates/swc_bundler/src/util.rs b/crates/swc_bundler/src/util.rs index f3f8a87dc0db..6b9a9318afd5 100644 --- a/crates/swc_bundler/src/util.rs +++ b/crates/swc_bundler/src/util.rs @@ -17,7 +17,7 @@ const TRACK: bool = false; pub(crate) trait VarDeclaratorExt: Into { fn into_module_item(self, injected_ctxt: SyntaxContext, name: &str) -> ModuleItem { - ModuleItem::Stmt(Stmt::Decl( + ModuleItem::Stmt( VarDecl { span: DUMMY_SP, ctxt: injected_ctxt, @@ -37,8 +37,9 @@ pub(crate) trait VarDeclaratorExt: Into { vec![self.into()] }, } + .into() .into(), - )) + ) } } diff --git a/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs b/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs index f77326a4a015..c478e37ea95b 100644 --- a/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs +++ b/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs @@ -41,7 +41,7 @@ impl TemplateLiteralCaching { fn create_var_decl(&mut self) -> Option { if !self.decls.is_empty() { - return Some(Stmt::Decl( + return Some( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Let, @@ -49,8 +49,9 @@ impl TemplateLiteralCaching { decls: self.decls.clone(), ..Default::default() } + .into() .into(), - )); + ); } None } diff --git a/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs b/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs index 7fd48fd3a165..d5ff655395c9 100644 --- a/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs +++ b/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs @@ -40,7 +40,7 @@ impl VisitMut for BlockScopedFns { if let Stmt::Decl(Decl::Fn(decl)) = stmt { if IdentUsageFinder::find(&decl.ident.to_id(), &decl.function) { - extra_stmts.push(Stmt::Decl(decl.into())); + extra_stmts.push(decl.into().into()); continue; } stmts.push( diff --git a/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs b/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs index c2e6a47fa205..8fe7f9e559a1 100644 --- a/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs +++ b/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs @@ -317,10 +317,13 @@ impl BlockScoping { right: "object".into(), } .into(), - cons: Box::new(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some(ret.clone().make_member(quote_ident!("v")).into()), - })), + cons: Box::new( + ReturnStmt { + span: DUMMY_SP, + arg: Some(ret.clone().make_member(quote_ident!("v")).into()), + } + .into(), + ), alt: None, } .into(), @@ -332,10 +335,11 @@ impl BlockScoping { IfStmt { span: DUMMY_SP, test: ret.clone().make_eq(quote_str!("break")).into(), - cons: Stmt::Break(BreakStmt { + cons: BreakStmt { span: DUMMY_SP, label: None, - }) + } + .into() .into(), alt: None, } @@ -404,11 +408,14 @@ impl BlockScoping { /// which fixes https://github.com/swc-project/swc/issues/6573 fn blockify_for_stmt_body(&self, body: &mut Box) -> bool { if !body.is_block() { - *body = Box::new(Stmt::Block(BlockStmt { - span: Default::default(), - stmts: vec![*body.take()], - ..Default::default() - })); + *body = Box::new( + BlockStmt { + span: Default::default(), + stmts: vec![*body.take()], + ..Default::default() + } + .into(), + ); true } else { false @@ -767,7 +774,7 @@ impl VisitMut for FlowHelper<'_> { "continue".into() }; - *node = Stmt::Return(ReturnStmt { + *node = ReturnStmt { span, arg: Some( Lit::Str(Str { @@ -777,7 +784,8 @@ impl VisitMut for FlowHelper<'_> { }) .into(), ), - }); + } + .into(); } Stmt::Break(BreakStmt { label, .. }) => { if (self.in_switch_case || self.in_nested_loop) && !self.has_outer_label(label) { @@ -792,7 +800,7 @@ impl VisitMut for FlowHelper<'_> { self.has_break = true; "break".into() }; - *node = Stmt::Return(ReturnStmt { + *node = ReturnStmt { span, arg: Some( Lit::Str(Str { @@ -802,13 +810,14 @@ impl VisitMut for FlowHelper<'_> { }) .into(), ), - }); + } + .into(); } Stmt::Return(s) => { self.has_return = true; s.visit_mut_with(self); - *node = Stmt::Return(ReturnStmt { + *node = ReturnStmt { span, arg: Some( ObjectLit { @@ -828,7 +837,8 @@ impl VisitMut for FlowHelper<'_> { } .into(), ), - }); + } + .into(); } _ => node.visit_mut_children_with(self), } diff --git a/crates/swc_ecma_compat_es2015/src/classes/constructor.rs b/crates/swc_ecma_compat_es2015/src/classes/constructor.rs index 3e6d6617c389..a372e93637f3 100644 --- a/crates/swc_ecma_compat_es2015/src/classes/constructor.rs +++ b/crates/swc_ecma_compat_es2015/src/classes/constructor.rs @@ -330,31 +330,31 @@ impl VisitMut for ConstructorFolder<'_> { .into_stmt() } Some(SuperFoldingMode::Var) => { - *stmt = Stmt::Decl( - VarDecl { + *stmt = VarDecl { + span: DUMMY_SP, + declare: false, + kind: VarDeclKind::Var, + decls: vec![VarDeclarator { span: DUMMY_SP, - declare: false, - kind: VarDeclKind::Var, - decls: vec![VarDeclarator { - span: DUMMY_SP, - name: quote_ident!( - SyntaxContext::empty().apply_mark(self.mark), - "_this" - ) - .into(), - init: Some(expr), - definite: false, - }], - ..Default::default() - } - .into(), - ) + name: quote_ident!( + SyntaxContext::empty().apply_mark(self.mark), + "_this" + ) + .into(), + init: Some(expr), + definite: false, + }], + ..Default::default() + } + .into() + .into() } None => { - *stmt = Stmt::Return(ReturnStmt { + *stmt = ReturnStmt { span: DUMMY_SP, arg: Some(expr), - }) + } + .into() } } } diff --git a/crates/swc_ecma_compat_es2015/src/classes/mod.rs b/crates/swc_ecma_compat_es2015/src/classes/mod.rs index 5862ecfa847f..481610817238 100644 --- a/crates/swc_ecma_compat_es2015/src/classes/mod.rs +++ b/crates/swc_ecma_compat_es2015/src/classes/mod.rs @@ -712,20 +712,26 @@ where let is_last_return = matches!(body.last(), Some(Stmt::Return(..))); if !is_last_return { if is_always_initialized { - body.push(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some(this.into()), - })); + body.push( + ReturnStmt { + span: DUMMY_SP, + arg: Some(this.into()), + } + .into(), + ); } else { let possible_return_value = Box::new(make_possible_return_value(ReturningMode::Returning { mark: this_mark, arg: None, })); - body.push(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some(possible_return_value), - })); + body.push( + ReturnStmt { + span: DUMMY_SP, + arg: Some(possible_return_value), + } + .into(), + ); } } } @@ -750,7 +756,7 @@ where inject_class_call_check(&mut body, class_name.clone()); } - stmts.push(Stmt::Decl( + stmts.push( FnDecl { ident: class_name.clone(), function: constructor_fn(Constructor { @@ -763,8 +769,9 @@ where }), declare: false, } + .into() .into(), - )); + ); } // convert class methods @@ -806,10 +813,13 @@ where class_name_sym.ctxt = class_name.ctxt; // `return Foo` - stmts.push(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some(class_name_sym.into()), - })); + stmts.push( + ReturnStmt { + span: DUMMY_SP, + arg: Some(class_name_sym.into()), + } + .into(), + ); stmts } @@ -1151,21 +1161,24 @@ where } let span = method.span(); let prop = *v.key_prop.clone(); - res.push(Stmt::Expr(ExprStmt { - span, - expr: AssignExpr { + res.push( + ExprStmt { span, - op: op!("="), - left: MemberExpr { + expr: AssignExpr { span, - obj: Box::new(proto.clone().into()), - prop: mk_key_prop_member(prop), + op: op!("="), + left: MemberExpr { + span, + obj: Box::new(proto.clone().into()), + prop: mk_key_prop_member(prop), + } + .into(), + right: escape_keywords(method), } .into(), - right: escape_keywords(method), } .into(), - })); + ); !(v.get.is_none() && v.set.is_none()) } else { true @@ -1176,21 +1189,24 @@ where if let Some(method) = v.method.take() { let span = method.span(); let prop = *v.key_prop.clone(); - res.push(Stmt::Expr(ExprStmt { - span, - expr: AssignExpr { + res.push( + ExprStmt { span, - op: op!("="), - left: MemberExpr { + expr: AssignExpr { span, - obj: Box::new(class_name.clone().into()), - prop: mk_key_prop_member(prop), + op: op!("="), + left: MemberExpr { + span, + obj: Box::new(class_name.clone().into()), + prop: mk_key_prop_member(prop), + } + .into(), + right: escape_keywords(method), } .into(), - right: escape_keywords(method), } .into(), - })); + ); !(v.get.is_none() && v.set.is_none()) } else { true diff --git a/crates/swc_ecma_compat_es2015/src/for_of.rs b/crates/swc_ecma_compat_es2015/src/for_of.rs index 231b090e642f..d6e788e36999 100644 --- a/crates/swc_ecma_compat_es2015/src/for_of.rs +++ b/crates/swc_ecma_compat_es2015/src/for_of.rs @@ -186,7 +186,7 @@ impl ForOf { } } - let stmt = Stmt::For(ForStmt { + let stmt = ForStmt { span, init: Some( VarDecl { @@ -201,7 +201,8 @@ impl ForOf { test, update, body: Box::new(Stmt::Block(body)), - }); + } + .into(); return match label { Some(label) => LabeledStmt { @@ -307,7 +308,7 @@ impl ForOf { } .into(); - let stmt = Stmt::For(ForStmt { + let stmt = ForStmt { span, init: Some( VarDecl { @@ -320,7 +321,8 @@ impl ForOf { test: Some(test), update: None, body: Box::new(Stmt::Block(body)), - }); + } + .into(); return match label { Some(label) => LabeledStmt { span, @@ -485,16 +487,17 @@ impl ForOf { } .into(), ), - body: Box::new(Stmt::Block(body)), + body: Box::new(body.into()), } .into(); let for_stmt = match label { - Some(label) => Stmt::Labeled(LabeledStmt { + Some(label) => LabeledStmt { span, label, body: Box::new(for_stmt), - }), + } + .into(), None => for_stmt, }; diff --git a/crates/swc_ecma_compat_es2015/src/generator.rs b/crates/swc_ecma_compat_es2015/src/generator.rs index 4b1d17027b09..bef7288e1cbb 100644 --- a/crates/swc_ecma_compat_es2015/src/generator.rs +++ b/crates/swc_ecma_compat_es2015/src/generator.rs @@ -126,10 +126,13 @@ impl VisitMut for Wrapper { } stmts.extend(v.hoisted_fns.into_iter().map(Decl::Fn).map(Stmt::Decl)); - stmts.push(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some(generator_object), - })); + stmts.push( + ReturnStmt { + span: DUMMY_SP, + arg: Some(generator_object), + } + .into(), + ); f.body.as_mut().unwrap().stmts = stmts; } } @@ -523,18 +526,21 @@ impl VisitMut for Generator { if contains_yield(&elem) && !pending_expressions.is_empty() { self.emit_worker( OpCode::Statement, - Some(OpArgs::Stmt(Box::new(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: if pending_expressions.len() == 1 { - pending_expressions.remove(0) - } else { - SeqExpr { - span: DUMMY_SP, - exprs: pending_expressions.take(), - } - .into() - }, - })))), + Some(OpArgs::Stmt(Box::new( + ExprStmt { + span: DUMMY_SP, + expr: if pending_expressions.len() == 1 { + pending_expressions.remove(0) + } else { + SeqExpr { + span: DUMMY_SP, + exprs: pending_expressions.take(), + } + .into() + }, + } + .into(), + ))), None, ); } @@ -976,7 +982,7 @@ impl VisitMut for Generator { if self.in_statement_containing_yield { let label = self.find_break_target(b.label.as_ref().map(|l| l.sym.clone())); if label.0 > 0 { - *node = Stmt::Return(self.create_inline_break(label, Some(b.span))); + *node = self.create_inline_break(label, Some(b.span)).into(); return; } } @@ -1029,7 +1035,7 @@ impl VisitMut for Generator { return; } - *node = Stmt::Expr(ExprStmt { + *node = ExprStmt { span: v.span, expr: if exprs.len() == 1 { exprs.remove(0) @@ -1040,7 +1046,8 @@ impl VisitMut for Generator { } .into() }, - }); + } + .into(); } Stmt::Decl(Decl::Fn(f)) => { self.hoisted_fns.push(f.take()); @@ -1212,10 +1219,13 @@ impl Generator { } } && !expressions.is_empty() { - self.emit_stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: Expr::from_exprs(expressions.take()), - })); + self.emit_stmt( + ExprStmt { + span: DUMMY_SP, + expr: Expr::from_exprs(expressions.take()), + } + .into(), + ); } let mut expression: Expr = match property { @@ -1476,14 +1486,14 @@ impl Generator { self.transform_and_emit_stmts(node.stmts, 0); } else { node.visit_mut_with(self); - self.emit_stmt(Stmt::Block(node)); + self.emit_stmt(node.into()); } } fn transform_and_emit_expr_stmt(&mut self, mut node: ExprStmt) { node.visit_mut_with(self); - self.emit_stmt(Stmt::Expr(node)); + self.emit_stmt(node.into()); } fn transform_and_emit_var_decl_list(&mut self, mut node: Box) { @@ -1517,18 +1527,21 @@ impl Generator { variables_written += cnt; cnt = 0; - self.emit_stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: if pending_expressions.len() == 1 { - pending_expressions.pop().unwrap() - } else { - SeqExpr { - span: DUMMY_SP, - exprs: take(&mut pending_expressions), - } - .into() - }, - })) + self.emit_stmt( + ExprStmt { + span: DUMMY_SP, + expr: if pending_expressions.len() == 1 { + pending_expressions.pop().unwrap() + } else { + SeqExpr { + span: DUMMY_SP, + exprs: take(&mut pending_expressions), + } + .into() + }, + } + .into(), + ) } } } @@ -1578,11 +1591,11 @@ impl Generator { self.mark_label(end_label); } else { node.visit_mut_with(self); - self.emit_stmt(Stmt::If(node)); + self.emit_stmt(node.into()); } } else { node.visit_mut_with(self); - self.emit_stmt(Stmt::If(node)); + self.emit_stmt(node.into()); } } @@ -1616,7 +1629,7 @@ impl Generator { self.end_loop_block(); } else { node.visit_mut_with(self); - self.emit_stmt(Stmt::DoWhile(node)); + self.emit_stmt(node.into()); } } @@ -1649,7 +1662,7 @@ impl Generator { } else { node.visit_mut_children_with(self); - self.emit_stmt(Stmt::While(node)); + self.emit_stmt(node.into()); } } @@ -1684,10 +1697,13 @@ impl Generator { } VarDeclOrExpr::Expr(mut init) => { init.visit_mut_with(self); - self.emit_stmt(Stmt::Expr(ExprStmt { - span: init.span(), - expr: init, - })); + self.emit_stmt( + ExprStmt { + span: init.span(), + expr: init, + } + .into(), + ); } } } @@ -1706,17 +1722,20 @@ impl Generator { if let Some(mut incrementor) = node.update { incrementor.visit_mut_with(self); - self.emit_stmt(Stmt::Expr(ExprStmt { - span: incrementor.span(), - expr: incrementor, - })); + self.emit_stmt( + ExprStmt { + span: incrementor.span(), + expr: incrementor, + } + .into(), + ); } self.emit_break(condition_label, None); self.end_loop_block(); } else { node.visit_mut_with(self); - self.emit_stmt(Stmt::For(node)); + self.emit_stmt(node.into()); } } @@ -1756,24 +1775,27 @@ impl Generator { ); node.right.visit_mut_with(self); - self.emit_stmt(Stmt::ForIn(ForInStmt { - span: DUMMY_SP, - left: ForHead::Pat(key.clone().into()), - right: node.right.take(), - body: Box::new(Stmt::Expr(ExprStmt { + self.emit_stmt( + ForInStmt { span: DUMMY_SP, - expr: CallExpr { + left: ForHead::Pat(key.clone().into()), + right: node.right.take(), + body: Box::new(Stmt::Expr(ExprStmt { span: DUMMY_SP, - callee: keys_array - .clone() - .make_member(quote_ident!("push")) - .as_callee(), - args: vec![key.as_arg()], - ..Default::default() - } - .into(), - })), - })); + expr: CallExpr { + span: DUMMY_SP, + callee: keys_array + .clone() + .make_member(quote_ident!("push")) + .as_callee(), + args: vec![key.as_arg()], + ..Default::default() + } + .into(), + })), + } + .into(), + ); self.emit_assignment(keys_index.clone().into(), 0.into(), None); @@ -1826,22 +1848,25 @@ impl Generator { self.transform_and_emit_embedded_stmt(*node.body); self.mark_label(increment_label); - self.emit_stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: UpdateExpr { + self.emit_stmt( + ExprStmt { span: DUMMY_SP, - prefix: false, - op: op!("++"), - arg: Box::new(keys_index.clone().into()), + expr: UpdateExpr { + span: DUMMY_SP, + prefix: false, + op: op!("++"), + arg: Box::new(keys_index.clone().into()), + } + .into(), } .into(), - })); + ); self.emit_break(condition_label, None); self.end_loop_block(); } else { node.visit_mut_with(self); - self.emit_stmt(Stmt::ForIn(node)); + self.emit_stmt(node.into()); } } @@ -1852,7 +1877,7 @@ impl Generator { } else { // invalid continue without a containing loop. Leave the node as is, // per #17875. - self.emit_stmt(Stmt::Continue(node)) + self.emit_stmt(node.into()) } } @@ -1863,7 +1888,7 @@ impl Generator { } else { // invalid break without a containing loop. Leave the node as is, // per #17875. - self.emit_stmt(Stmt::Break(node)) + self.emit_stmt(node.into()) } } @@ -1891,7 +1916,7 @@ impl Generator { self.end_with_block(); } else { node.visit_mut_with(self); - self.emit_stmt(Stmt::With(node)); + self.emit_stmt(node.into()); } } @@ -1981,11 +2006,14 @@ impl Generator { if !pending_clauses.is_empty() { clauses_written += pending_clauses.len(); - self.emit_stmt(Stmt::Switch(SwitchStmt { - span: DUMMY_SP, - discriminant: expression.clone().into(), - cases: take(&mut pending_clauses), - })); + self.emit_stmt( + SwitchStmt { + span: DUMMY_SP, + discriminant: expression.clone().into(), + cases: take(&mut pending_clauses), + } + .into(), + ); } if default_clauses_skipped > 0 { @@ -2007,7 +2035,7 @@ impl Generator { self.end_switch_block() } else { node.visit_mut_with(self); - self.emit_stmt(Stmt::Switch(node)) + self.emit_stmt(node.into()) } } @@ -2031,7 +2059,7 @@ impl Generator { self.end_labeled_block(); } else { node.visit_mut_with(self); - self.emit_stmt(Stmt::Labeled(node)); + self.emit_stmt(node.into()); } } @@ -2075,18 +2103,18 @@ impl Generator { // .mark endLabel self.begin_exception_block(); - self.transform_and_emit_embedded_stmt(Stmt::Block(node.block)); + self.transform_and_emit_embedded_stmt(node.block.into()); if let Some(catch) = node.handler { self.begin_catch_block(VarDeclarator { name: catch.param.clone().unwrap(), ..Take::dummy() }); - self.transform_and_emit_embedded_stmt(Stmt::Block(catch.body)); + self.transform_and_emit_embedded_stmt(catch.body.into()); } if let Some(finalizer) = node.finalizer { self.begin_finally_block(); - self.transform_and_emit_embedded_stmt(Stmt::Block(finalizer)); + self.transform_and_emit_embedded_stmt(finalizer.into()); } self.end_exception_block(); @@ -3000,7 +3028,7 @@ impl Generator { stmts.insert( 0, - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr: CallExpr { span: DUMMY_SP, @@ -3023,7 +3051,8 @@ impl Generator { ..Default::default() } .into(), - }), + } + .into(), ); } @@ -3032,16 +3061,19 @@ impl Generator { // label, so we add an assignment statement to // reflect the change in labels. - stmts.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: AssignExpr { + stmts.push( + ExprStmt { span: DUMMY_SP, - op: op!("="), - left: self.state.clone().make_member(quote_ident!("label")).into(), - right: (self.label_number + 1).into(), + expr: AssignExpr { + span: DUMMY_SP, + op: op!("="), + left: self.state.clone().make_member(quote_ident!("label")).into(), + right: (self.label_number + 1).into(), + } + .into(), } .into(), - })); + ); } stmts @@ -3267,16 +3299,19 @@ impl Generator { /// Writes an Assign operation to the current label's statement list. fn write_assign(&mut self, left: AssignTarget, right: Box, op_loc: Option) { - self.write_stmt(Stmt::Expr(ExprStmt { - span: op_loc.unwrap_or(DUMMY_SP), - expr: AssignExpr { - span: DUMMY_SP, - op: op!("="), - left, - right, + self.write_stmt( + ExprStmt { + span: op_loc.unwrap_or(DUMMY_SP), + expr: AssignExpr { + span: DUMMY_SP, + op: op!("="), + left, + right, + } + .into(), } .into(), - })) + ) } /// Writes a Throw operation to the current label's statement list. @@ -3288,10 +3323,13 @@ impl Generator { self.last_operation_was_completion = true; // let inst = self.create_instruction(Instruction::Return); - self.write_stmt(Stmt::Throw(ThrowStmt { - span: op_loc.unwrap_or(DUMMY_SP), - arg: expr, - })) + self.write_stmt( + ThrowStmt { + span: op_loc.unwrap_or(DUMMY_SP), + arg: expr, + } + .into(), + ) } /// Writes a Return operation to the current label's statement list. @@ -3303,23 +3341,26 @@ impl Generator { self.last_operation_was_completion = true; let inst = self.create_instruction(Instruction::Return); - self.write_stmt(Stmt::Return(ReturnStmt { - span: op_loc.unwrap_or(DUMMY_SP), - arg: Some( - ArrayLit { - span: DUMMY_SP, - elems: match expr { - Some(expr) => { - vec![Some(inst.as_arg()), Some(expr.as_arg())] - } - _ => { - vec![Some(inst.as_arg())] - } - }, - } - .into(), - ), - })) + self.write_stmt( + ReturnStmt { + span: op_loc.unwrap_or(DUMMY_SP), + arg: Some( + ArrayLit { + span: DUMMY_SP, + elems: match expr { + Some(expr) => { + vec![Some(inst.as_arg()), Some(expr.as_arg())] + } + _ => { + vec![Some(inst.as_arg())] + } + }, + } + .into(), + ), + } + .into(), + ) } /// Writes a Break operation to the current label's statement list. @@ -3331,16 +3372,19 @@ impl Generator { let inst = self.create_instruction(Instruction::Break); let label = self.create_label(Some(label)); - self.write_stmt(Stmt::Return(ReturnStmt { - span: op_loc.unwrap_or(DUMMY_SP), - arg: Some( - ArrayLit { - span: DUMMY_SP, - elems: vec![Some(inst.as_arg()), Some(label.as_arg())], - } - .into(), - ), - })) + self.write_stmt( + ReturnStmt { + span: op_loc.unwrap_or(DUMMY_SP), + arg: Some( + ArrayLit { + span: DUMMY_SP, + elems: vec![Some(inst.as_arg()), Some(label.as_arg())], + } + .into(), + ), + } + .into(), + ) } /// Writes a BreakWhenTrue operation to the current label's statement list. @@ -3351,21 +3395,24 @@ impl Generator { fn write_break_when_true(&mut self, label: Label, cond: Box, op_loc: Option) { let inst = self.create_instruction(Instruction::Break); let label = self.create_label(Some(label)); - self.write_stmt(Stmt::If(IfStmt { - span: DUMMY_SP, - test: cond, - cons: Box::new(Stmt::Return(ReturnStmt { - span: op_loc.unwrap_or(DUMMY_SP), - arg: Some( - ArrayLit { - span: DUMMY_SP, - elems: vec![Some(inst.as_arg()), Some(label.as_arg())], - } - .into(), - ), - })), - alt: None, - })) + self.write_stmt( + IfStmt { + span: DUMMY_SP, + test: cond, + cons: Box::new(Stmt::Return(ReturnStmt { + span: op_loc.unwrap_or(DUMMY_SP), + arg: Some( + ArrayLit { + span: DUMMY_SP, + elems: vec![Some(inst.as_arg()), Some(label.as_arg())], + } + .into(), + ), + })), + alt: None, + } + .into(), + ) } /// Writes a BreakWhenFalse operation to the current label's statement list. @@ -3376,26 +3423,29 @@ impl Generator { fn write_break_when_false(&mut self, label: Label, cond: Box, op_loc: Option) { let inst = self.create_instruction(Instruction::Break); let label = self.create_label(Some(label)); - self.write_stmt(Stmt::If(IfStmt { - span: DUMMY_SP, - test: UnaryExpr { + self.write_stmt( + IfStmt { span: DUMMY_SP, - op: op!("!"), - arg: cond, + test: UnaryExpr { + span: DUMMY_SP, + op: op!("!"), + arg: cond, + } + .into(), + cons: Box::new(Stmt::Return(ReturnStmt { + span: op_loc.unwrap_or(DUMMY_SP), + arg: Some( + ArrayLit { + span: DUMMY_SP, + elems: vec![Some(inst.as_arg()), Some(label.as_arg())], + } + .into(), + ), + })), + alt: None, } .into(), - cons: Box::new(Stmt::Return(ReturnStmt { - span: op_loc.unwrap_or(DUMMY_SP), - arg: Some( - ArrayLit { - span: DUMMY_SP, - elems: vec![Some(inst.as_arg()), Some(label.as_arg())], - } - .into(), - ), - })), - alt: None, - })) + ) } /// Writes a Yield operation to the current label's statement list. @@ -3414,16 +3464,19 @@ impl Generator { vec![Some(inst.as_arg())] } }; - self.write_stmt(Stmt::Return(ReturnStmt { - span: op_loc.unwrap_or(DUMMY_SP), - arg: Some( - ArrayLit { - span: DUMMY_SP, - elems, - } - .into(), - ), - })); + self.write_stmt( + ReturnStmt { + span: op_loc.unwrap_or(DUMMY_SP), + arg: Some( + ArrayLit { + span: DUMMY_SP, + elems, + } + .into(), + ), + } + .into(), + ); } /// Writes a YieldStar instruction to the current label's statement list. @@ -3434,16 +3487,19 @@ impl Generator { self.last_operation_was_abrupt = true; let arg1 = self.create_instruction(Instruction::YieldStar); - self.write_stmt(Stmt::Return(ReturnStmt { - span: op_loc.unwrap_or(DUMMY_SP), - arg: Some( - ArrayLit { - span: DUMMY_SP, - elems: vec![Some(arg1.as_arg()), Some(expr.as_arg())], - } - .into(), - ), - })) + self.write_stmt( + ReturnStmt { + span: op_loc.unwrap_or(DUMMY_SP), + arg: Some( + ArrayLit { + span: DUMMY_SP, + elems: vec![Some(arg1.as_arg()), Some(expr.as_arg())], + } + .into(), + ), + } + .into(), + ) } /// Writes an Endfinally instruction to the current label's statement list. @@ -3451,16 +3507,19 @@ impl Generator { self.last_operation_was_abrupt = true; let arg = self.create_instruction(Instruction::Endfinally); - self.write_stmt(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some( - ArrayLit { - span: DUMMY_SP, - elems: vec![Some(arg.as_arg())], - } - .into(), - ), - })) + self.write_stmt( + ReturnStmt { + span: DUMMY_SP, + arg: Some( + ArrayLit { + span: DUMMY_SP, + elems: vec![Some(arg.as_arg())], + } + .into(), + ), + } + .into(), + ) } fn hoist_variable_declaration(&mut self, id: &Ident) { diff --git a/crates/swc_ecma_compat_es2015/src/parameters.rs b/crates/swc_ecma_compat_es2015/src/parameters.rs index 440dd3409e22..3a678b713f7e 100644 --- a/crates/swc_ecma_compat_es2015/src/parameters.rs +++ b/crates/swc_ecma_compat_es2015/src/parameters.rs @@ -171,27 +171,30 @@ impl Params { pat: ident.clone().into(), decorators: Vec::new(), }); - loose_stmt.push(Stmt::If(IfStmt { - span, - test: BinExpr { - span: DUMMY_SP, - left: Box::new(Ident::from(ident).into()), - op: op!("==="), - right: Expr::undefined(DUMMY_SP), - } - .into(), - cons: Box::new(Stmt::Expr(ExprStmt { + loose_stmt.push( + IfStmt { span, - expr: AssignExpr { - span, - left: left.try_into().unwrap(), - op: op!("="), - right, + test: BinExpr { + span: DUMMY_SP, + left: Box::new(Ident::from(ident).into()), + op: op!("==="), + right: Expr::undefined(DUMMY_SP), } .into(), - })), - alt: None, - })) + cons: Box::new(Stmt::Expr(ExprStmt { + span, + expr: AssignExpr { + span, + left: left.try_into().unwrap(), + op: op!("="), + right, + } + .into(), + })), + alt: None, + } + .into(), + ) } else { let binding = private_ident!(span, "param"); params.push(Param { @@ -303,113 +306,121 @@ impl Params { } }; - unpack_rest = Some(Stmt::For(ForStmt { - span, - init: Some( - VarDecl { - kind: VarDeclKind::Var, - span, - decls: vec![ - // _len = arguments.length - i - VarDeclarator { - span, - name: len_ident.clone().into(), - init: Some( - member_expr!( - Default::default(), - span, - arguments.length - ) - .into(), - ), - definite: false, - }, - // a1 = new Array(_len - $i) - VarDeclarator { - span, - name: arg.clone().into(), - init: Some(Box::new(Expr::New(NewExpr { + unpack_rest = Some( + ForStmt { + span, + init: Some( + VarDecl { + kind: VarDeclKind::Var, + span, + decls: vec![ + // _len = arguments.length - i + VarDeclarator { span, - callee: Box::new( - quote_ident!(self.unresolved_ctxt, "Array").into(), + name: len_ident.clone().into(), + init: Some( + member_expr!( + Default::default(), + span, + arguments.length + ) + .into(), ), - args: Some(vec![{ - // `len` or `len - $i` - make_minus_i(&len_ident, true).as_arg() - }]), - ..Default::default() - }))), - definite: false, - }, - // _key = 0 - VarDeclarator { - span, - name: idx_ident.clone().into(), - init: Some(Box::new(Expr::Lit(Lit::Num(Number { + definite: false, + }, + // a1 = new Array(_len - $i) + VarDeclarator { span, - value: i as f64, - raw: None, - })))), - definite: false, - }, - ], - declare: false, - ..Default::default() - } - .into(), - ), - // `_key < _len` - test: Some( - BinExpr { - span, - left: Box::new(idx_ident.clone().into()), - op: op!("<"), - right: Box::new(len_ident.clone().into()), - } - .into(), - ), - // _key++ - update: Some( - UpdateExpr { - span, - op: op!("++"), - prefix: false, - arg: Box::new(idx_ident.clone().into()), - } - .into(), - ), - body: Box::new(Stmt::Block(BlockStmt { - span: DUMMY_SP, - stmts: vec![{ - let prop = Box::new(Expr::Ident(idx_ident.clone())); - // a1[_key - i] = arguments[_key]; - - AssignExpr { - span, - left: arg - .computed_member(make_minus_i(&idx_ident, false)) - .into(), - op: op!("="), - right: Box::new( - MemberExpr { - span: DUMMY_SP, - obj: Box::new( - quote_ident!(Default::default(), span, "arguments") - .into(), - ), - prop: MemberProp::Computed(ComputedPropName { + name: arg.clone().into(), + init: Some(Box::new(Expr::New(NewExpr { span, - expr: prop, - }), - } - .into(), - ), + callee: Box::new( + quote_ident!(self.unresolved_ctxt, "Array") + .into(), + ), + args: Some(vec![{ + // `len` or `len - $i` + make_minus_i(&len_ident, true).as_arg() + }]), + ..Default::default() + }))), + definite: false, + }, + // _key = 0 + VarDeclarator { + span, + name: idx_ident.clone().into(), + init: Some(Box::new(Expr::Lit(Lit::Num(Number { + span, + value: i as f64, + raw: None, + })))), + definite: false, + }, + ], + declare: false, + ..Default::default() } - .into_stmt() - }], - ..Default::default() - })), - })) + .into(), + ), + // `_key < _len` + test: Some( + BinExpr { + span, + left: Box::new(idx_ident.clone().into()), + op: op!("<"), + right: Box::new(len_ident.clone().into()), + } + .into(), + ), + // _key++ + update: Some( + UpdateExpr { + span, + op: op!("++"), + prefix: false, + arg: Box::new(idx_ident.clone().into()), + } + .into(), + ), + body: Box::new(Stmt::Block(BlockStmt { + span: DUMMY_SP, + stmts: vec![{ + let prop = Box::new(Expr::Ident(idx_ident.clone())); + // a1[_key - i] = arguments[_key]; + + AssignExpr { + span, + left: arg + .computed_member(make_minus_i(&idx_ident, false)) + .into(), + op: op!("="), + right: Box::new( + MemberExpr { + span: DUMMY_SP, + obj: Box::new( + quote_ident!( + Default::default(), + span, + "arguments" + ) + .into(), + ), + prop: MemberProp::Computed(ComputedPropName { + span, + expr: prop, + }), + } + .into(), + ), + } + .into_stmt() + }], + ..Default::default() + })), + } + .into(), + ) } _ => unreachable!(), } @@ -514,10 +525,13 @@ impl VisitMut for Params { if let BlockStmtOrExpr::Expr(v) = body { let mut stmts = vec![]; prepend_stmt(&mut stmts, decls); - stmts.push(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some(v.take()), - })); + stmts.push( + ReturnStmt { + span: DUMMY_SP, + arg: Some(v.take()), + } + .into(), + ); *body = BlockStmtOrExpr::BlockStmt(BlockStmt { span: DUMMY_SP, stmts, diff --git a/crates/swc_ecma_compat_es2015/src/template_literal.rs b/crates/swc_ecma_compat_es2015/src/template_literal.rs index 8b10fcd6ee70..b4550853b89b 100644 --- a/crates/swc_ecma_compat_es2015/src/template_literal.rs +++ b/crates/swc_ecma_compat_es2015/src/template_literal.rs @@ -356,14 +356,15 @@ impl VisitMut for TemplateLiteral { ..Default::default() }; - self.added.push(Stmt::Decl( + self.added.push( FnDecl { declare: false, ident: fn_ident.clone(), function: f.into(), } + .into() .into(), - )); + ); *e = CallExpr { span: DUMMY_SP, diff --git a/crates/swc_ecma_compat_es2017/src/async_to_generator.rs b/crates/swc_ecma_compat_es2017/src/async_to_generator.rs index ad77a64c0b2c..f489baf27c97 100644 --- a/crates/swc_ecma_compat_es2017/src/async_to_generator.rs +++ b/crates/swc_ecma_compat_es2017/src/async_to_generator.rs @@ -153,18 +153,21 @@ impl VisitMut for Actual { stmts: visitor .to_stmt() .into_iter() - .chain(iter::once(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some( - CallExpr { - span: DUMMY_SP, - callee: expr.as_callee(), - args: vec![], - ..Default::default() - } - .into(), - ), - }))) + .chain(iter::once( + ReturnStmt { + span: DUMMY_SP, + arg: Some( + CallExpr { + span: DUMMY_SP, + callee: expr.as_callee(), + args: vec![], + ..Default::default() + } + .into(), + ), + } + .into(), + )) .collect(), ..Default::default() }), @@ -205,7 +208,7 @@ impl VisitMut for Actual { let FnWrapperResult { name_fn, ref_fn } = wrapper.into(); *f = name_fn; - self.extra_stmts.push(Stmt::Decl(ref_fn.into())); + self.extra_stmts.push(ref_fn.into().into()); } fn visit_mut_module_item(&mut self, item: &mut ModuleItem) { @@ -231,7 +234,7 @@ impl VisitMut for Actual { } .into(), ); - self.extra_stmts.push(Stmt::Decl(ref_fn.into())); + self.extra_stmts.push(ref_fn.into().into()); }; } else { export_default.visit_mut_children_with(self); @@ -624,16 +627,19 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { ); } ForHead::Pat(p) => { - for_loop_body.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: AssignExpr { + for_loop_body.push( + ExprStmt { span: DUMMY_SP, - op: op!("="), - left: p.try_into().unwrap(), - right: Box::new(value.into()), + expr: AssignExpr { + span: DUMMY_SP, + op: op!("="), + left: p.try_into().unwrap(), + right: Box::new(value.into()), + } + .into(), } .into(), - })); + ); } ForHead::UsingDecl(..) => { @@ -676,7 +682,7 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { definite: false, }); - let for_stmt = Stmt::For(ForStmt { + let for_stmt = ForStmt { span: s.span, // var _iterator = _async_iterator(lol()), _step; init: Some( @@ -754,7 +760,8 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { .into(), ), body: Box::new(Stmt::Block(for_loop_body)), - }); + } + .into(); BlockStmt { span: body_span, @@ -765,7 +772,7 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { let catch_clause = { // _didIteratorError = true; - let mark_as_errorred = Stmt::Expr(ExprStmt { + let mark_as_errorred = ExprStmt { span: DUMMY_SP, expr: AssignExpr { span: DUMMY_SP, @@ -774,9 +781,10 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { right: true.into(), } .into(), - }); + } + .into(); // _iteratorError = err; - let store_error = Stmt::Expr(ExprStmt { + let store_error = ExprStmt { span: DUMMY_SP, expr: AssignExpr { span: DUMMY_SP, @@ -785,7 +793,8 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { right: Box::new(err_param.clone().into()), } .into(), - }); + } + .into(); CatchClause { span: DUMMY_SP, @@ -798,11 +807,12 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { }; let finally_block = { - let throw_iterator_error = Stmt::Throw(ThrowStmt { + let throw_iterator_error = ThrowStmt { span: DUMMY_SP, arg: iterator_error.clone().into(), - }); - let throw_iterator_error = Stmt::If(IfStmt { + } + .into(); + let throw_iterator_error = IfStmt { span: DUMMY_SP, test: did_iteration_error.clone().into(), cons: Box::new(Stmt::Block(BlockStmt { @@ -811,7 +821,8 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { ..Default::default() })), alt: None, - }); + } + .into(); let iterator_return: Expr = CallExpr { span: DUMMY_SP, @@ -827,7 +838,7 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { // yield _iterator.return(); // or // yield _awaitAsyncGenerator(_iterator.return()); - let yield_stmt = Stmt::Expr(ExprStmt { + let yield_stmt = ExprStmt { span: DUMMY_SP, expr: YieldExpr { span: DUMMY_SP, @@ -845,9 +856,10 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { }), } .into(), - }); + } + .into(); - let conditional_yield = Stmt::If(IfStmt { + let conditional_yield = IfStmt { span: DUMMY_SP, // _iteratorAbruptCompletion && _iterator.return != null test: BinExpr { @@ -872,7 +884,8 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { ..Default::default() })), alt: None, - }); + } + .into(); let body = BlockStmt { stmts: vec![conditional_yield], ..Default::default() @@ -933,9 +946,10 @@ fn handle_await_for(stmt: &mut Stmt, is_async_generator: bool) { try_stmt.into(), ]; - *stmt = Stmt::Block(BlockStmt { + *stmt = BlockStmt { span: s.span, stmts, ..Default::default() - }) + } + .into() } diff --git a/crates/swc_ecma_compat_es2022/src/class_properties/member_init.rs b/crates/swc_ecma_compat_es2022/src/class_properties/member_init.rs index e9f3eb43c91b..b2e6ea49d016 100644 --- a/crates/swc_ecma_compat_es2022/src/class_properties/member_init.rs +++ b/crates/swc_ecma_compat_es2022/src/class_properties/member_init.rs @@ -189,8 +189,8 @@ impl MemberInitRecord { for value in self.record { match value { - MemberInit::PubProp(PubProp { span, name, value }) => { - value_init.push(Stmt::Expr(ExprStmt { + MemberInit::PubProp(PubProp { span, name, value }) => value_init.push( + ExprStmt { span, expr: (if self.c.set_public_fields { let class = class_ident.clone(); @@ -217,11 +217,12 @@ impl MemberInitRecord { .into() }) .into(), - })) - } + } + .into(), + ), MemberInit::PrivProp(PrivProp { span, name, value }) => { value_init.push(if self.c.private_as_properties { - Stmt::Expr(ExprStmt { + ExprStmt { span, expr: CallExpr { span, @@ -234,7 +235,8 @@ impl MemberInitRecord { ..Default::default() } .into(), - }) + } + .into() } else { VarDecl { span, @@ -256,7 +258,7 @@ impl MemberInitRecord { getter, setter, }) => normal_init.push(if self.c.private_as_properties { - Stmt::Expr(ExprStmt { + ExprStmt { span, expr: CallExpr { span, @@ -269,7 +271,8 @@ impl MemberInitRecord { ..Default::default() } .into(), - }) + } + .into() } else { VarDecl { span, @@ -290,20 +293,23 @@ impl MemberInitRecord { fn_name, }) => { if self.c.private_as_properties { - normal_init.push(Stmt::Expr(ExprStmt { - span, - expr: CallExpr { + normal_init.push( + ExprStmt { span, - callee: obj_def_prop(), - args: vec![ - class_ident.clone().as_arg(), - name.as_arg(), - get_method_desc(Box::new(fn_name.into())).as_arg(), - ], - ..Default::default() + expr: CallExpr { + span, + callee: obj_def_prop(), + args: vec![ + class_ident.clone().as_arg(), + name.as_arg(), + get_method_desc(Box::new(fn_name.into())).as_arg(), + ], + ..Default::default() + } + .into(), } .into(), - })) + ) } else { unreachable!() } diff --git a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs index 9cc30f9697eb..6cd8ef623d4c 100644 --- a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs +++ b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs @@ -98,12 +98,13 @@ impl ClassExtra { if !self.vars.is_empty() { prepend_stmt( stmts, - Stmt::from(VarDecl { + VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, decls: self.vars, ..Default::default() - }) + } + .into() .into(), ) } @@ -111,12 +112,13 @@ impl ClassExtra { if !self.lets.is_empty() { prepend_stmt( stmts, - Stmt::from(VarDecl { + VarDecl { span: DUMMY_SP, kind: VarDeclKind::Let, decls: self.lets, ..Default::default() - }) + } + .into() .into(), ) } @@ -127,24 +129,26 @@ impl ClassExtra { fn merge_with>(self, stmts: &mut Vec, class: T) { if !self.vars.is_empty() { stmts.push( - Stmt::from(VarDecl { + VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, decls: self.vars, ..Default::default() - }) + } + .into() .into(), ) } if !self.lets.is_empty() { stmts.push( - Stmt::from(VarDecl { + VarDecl { span: DUMMY_SP, kind: VarDeclKind::Let, decls: self.lets, ..Default::default() - }) + } + .into() .into(), ) } @@ -190,12 +194,15 @@ impl VisitMut for ClassProperties { let ident = ident.unwrap_or_else(|| private_ident!("_class")); let (decl, extra) = self.visit_mut_class_as_decl(ident.clone(), class); - extra.merge_with(&mut stmts, Stmt::Decl(decl.into())); + extra.merge_with(&mut stmts, decl.into().into()); - stmts.push(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some(ident.into()), - })); + stmts.push( + ReturnStmt { + span: DUMMY_SP, + arg: Some(ident.into()), + } + .into(), + ); *body = BlockStmtOrExpr::BlockStmt(BlockStmt { span: DUMMY_SP, @@ -353,7 +360,7 @@ impl ClassProperties { let (decl, extra) = self.visit_mut_class_as_decl(ident.clone(), class); - extra.merge_with(&mut buf, T::from_stmt(Stmt::Decl(decl.into()))); + extra.merge_with(&mut buf, T::from_stmt(decl.into().into())); buf.push( match T::try_from_module_decl(ModuleDecl::ExportNamed( @@ -422,7 +429,7 @@ impl ClassProperties { declare: false, })) => { let (decl, extra) = self.visit_mut_class_as_decl(ident, class); - extra.merge_with(&mut buf, T::from_stmt(Stmt::Decl(decl.into()))) + extra.merge_with(&mut buf, T::from_stmt(decl.into().into())) } _ => { stmt.visit_mut_children_with(self); @@ -953,14 +960,15 @@ impl ClassProperties { in_pat: false, }); - private_method_fn_decls.push(Stmt::Decl( + private_method_fn_decls.push( FnDecl { ident: fn_name, function: method.function, declare: false, } + .into() .into(), - )) + ) } ClassMember::StaticBlock(..) => { diff --git a/crates/swc_ecma_compat_es2022/src/private_in_object.rs b/crates/swc_ecma_compat_es2022/src/private_in_object.rs index acc1396936b9..c3c67efef37c 100644 --- a/crates/swc_ecma_compat_es2022/src/private_in_object.rs +++ b/crates/swc_ecma_compat_es2022/src/private_in_object.rs @@ -184,10 +184,13 @@ impl VisitMut for PrivateInObject { }) = m { for expr in take(&mut self.cls.constructor_exprs) { - body.stmts.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr, - })); + body.stmts.push( + ExprStmt { + span: DUMMY_SP, + expr, + } + .into(), + ); } } } @@ -261,10 +264,13 @@ impl VisitMut for PrivateInObject { stmts: vec![], ..Default::default() }; - bs.stmts.push(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some(p.right.take()), - })); + bs.stmts.push( + ReturnStmt { + span: DUMMY_SP, + arg: Some(p.right.take()), + } + .into(), + ); bs.visit_mut_with(self); p.right = CallExpr { diff --git a/crates/swc_ecma_minifier/src/compress/hoist_decls.rs b/crates/swc_ecma_minifier/src/compress/hoist_decls.rs index 11e1666f2091..7cfbfceac786 100644 --- a/crates/swc_ecma_minifier/src/compress/hoist_decls.rs +++ b/crates/swc_ecma_minifier/src/compress/hoist_decls.rs @@ -172,18 +172,21 @@ impl Hoister<'_> { if exprs.is_empty() { continue; } - new_stmts.push(T::from_stmt(Stmt::Expr(ExprStmt { - span: var.span, - expr: if exprs.len() == 1 { - exprs.into_iter().next().unwrap() - } else { - SeqExpr { - span: DUMMY_SP, - exprs, - } - .into() - }, - }))) + new_stmts.push(T::from_stmt( + ExprStmt { + span: var.span, + expr: if exprs.len() == 1 { + exprs.into_iter().next().unwrap() + } else { + SeqExpr { + span: DUMMY_SP, + exprs, + } + .into() + }, + } + .into(), + )) } Stmt::Decl(Decl::Var(v)) diff --git a/crates/swc_ecma_minifier/src/compress/optimize/bools.rs b/crates/swc_ecma_minifier/src/compress/optimize/bools.rs index 342334f2e384..80e6273f322b 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/bools.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/bools.rs @@ -97,7 +97,7 @@ impl Optimizer<'_> { if let Stmt::Expr(cons) = &mut *stmt.cons { self.changed = true; report_change!("conditionals: `if (foo) bar;` => `foo && bar`"); - *s = Stmt::Expr(ExprStmt { + *s = ExprStmt { span: stmt.span, expr: BinExpr { span: stmt.test.span(), @@ -106,7 +106,8 @@ impl Optimizer<'_> { right: cons.expr.take(), } .into(), - }); + } + .into(); } } } diff --git a/crates/swc_ecma_minifier/src/compress/optimize/conditionals.rs b/crates/swc_ecma_minifier/src/compress/optimize/conditionals.rs index 49fe57d3f3b9..8bca4abb1c94 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/conditionals.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/conditionals.rs @@ -214,10 +214,11 @@ impl Optimizer<'_> { if let Stmt::Empty(..) = &*stmt.cons { if (self.options.conditionals || self.options.unused) && stmt.alt.is_none() { - *s = Stmt::Expr(ExprStmt { + *s = ExprStmt { span: stmt.span, expr: stmt.test.take(), - }); + } + .into(); self.changed = true; report_change!("conditionals: `if (foo);` => `foo` "); return; @@ -255,10 +256,11 @@ impl Optimizer<'_> { } .into(); self.compress_logical_exprs_as_bang_bang(&mut expr, true); - *s = Stmt::Expr(ExprStmt { + *s = ExprStmt { span: stmt.span, expr: expr.into(), - }); + } + .into(); } _ => { report_change!("Optimizing `if (foo); else bar();` as `foo || bar();`"); @@ -271,10 +273,11 @@ impl Optimizer<'_> { } .into(); self.compress_logical_exprs_as_bang_bang(&mut expr, false); - *s = Stmt::Expr(ExprStmt { + *s = ExprStmt { span: stmt.span, expr: expr.into(), - }); + } + .into(); } } return; @@ -292,10 +295,11 @@ impl Optimizer<'_> { self.changed = true; report_change!("conditionals: Merging cons and alt as only one argument differs"); - *s = Stmt::Expr(ExprStmt { + *s = ExprStmt { span: stmt.span, expr: Box::new(v), - }); + } + .into(); return; } @@ -306,7 +310,7 @@ impl Optimizer<'_> { not compressable)" ); self.changed = true; - *s = Stmt::Expr(ExprStmt { + *s = ExprStmt { span: stmt.span, expr: CondExpr { span: DUMMY_SP, @@ -315,7 +319,8 @@ impl Optimizer<'_> { alt: Box::new(alt.take()), } .into(), - }) + } + .into() } } @@ -811,14 +816,17 @@ impl Optimizer<'_> { s.alt = Some(if alt.len() == 1 { Box::new(alt.into_iter().next().unwrap()) } else { - Box::new(Stmt::Block(BlockStmt { - span: DUMMY_SP, - stmts: alt, - ..Default::default() - })) + Box::new( + BlockStmt { + span: DUMMY_SP, + stmts: alt, + ..Default::default() + } + .into(), + ) }); - new.push(Stmt::If(s)) + new.push(s.into()) } _ => { unreachable!() @@ -875,12 +883,15 @@ impl Optimizer<'_> { swap(&mut cons, &mut alt); } - new_stmts.push(T::from_stmt(Stmt::If(IfStmt { - span, - test, - cons, - alt: None, - }))); + new_stmts.push(T::from_stmt( + IfStmt { + span, + test, + cons, + alt: None, + } + .into(), + )); new_stmts.push(T::from_stmt(*alt)); } _ => { diff --git a/crates/swc_ecma_minifier/src/compress/optimize/if_return.rs b/crates/swc_ecma_minifier/src/compress/optimize/if_return.rs index 304b7731d7fd..a2604c644132 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/if_return.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/if_return.rs @@ -392,19 +392,25 @@ impl Optimizer<'_> { let expr = self.ignore_return_value(&mut cur); if let Some(cur) = expr { - new.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: Box::new(cur), - })) + new.push( + ExprStmt { + span: DUMMY_SP, + expr: Box::new(cur), + } + .into(), + ) } else { trace_op!("if_return: Ignoring return value"); } } _ => { - new.push(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some(cur), - })); + new.push( + ReturnStmt { + span: DUMMY_SP, + arg: Some(cur), + } + .into(), + ); } } } diff --git a/crates/swc_ecma_minifier/src/compress/optimize/loops.rs b/crates/swc_ecma_minifier/src/compress/optimize/loops.rs index 217f508bdd14..15fe9b5e3100 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/loops.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/loops.rs @@ -26,28 +26,34 @@ impl Optimizer<'_> { self.changed = true; report_change!("loops: Removing a for loop with instant break"); - self.prepend_stmts - .extend(f.init.take().map(|init| match init { - VarDeclOrExpr::VarDecl(var) => Stmt::Decl(var.into()), - VarDeclOrExpr::Expr(expr) => Stmt::Expr(ExprStmt { + self.prepend_stmts.extend(f.init.take().map(|init| { + match init { + VarDeclOrExpr::VarDecl(var) => var.into().into(), + VarDeclOrExpr::Expr(expr) => ExprStmt { span: DUMMY_SP, expr, - }), - })); + } + .into(), + } + })); self.prepend_stmts.extend(f.test.take().map(|expr| { - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr, - }) + } + .into() })); if label.is_some() { - self.prepend_stmts.push(Stmt::Break(BreakStmt { - span: DUMMY_SP, - label, - })); + self.prepend_stmts.push( + BreakStmt { + span: DUMMY_SP, + label, + } + .into(), + ); } - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }) + *s = EmptyStmt { span: DUMMY_SP }.into() } /// @@ -89,18 +95,23 @@ impl Optimizer<'_> { } self.changed |= f.init.is_some() | f.update.is_some(); - self.prepend_stmts - .extend(f.init.take().map(|init| match init { - VarDeclOrExpr::VarDecl(var) => Stmt::Decl(var.into()), - VarDeclOrExpr::Expr(expr) => Stmt::Expr(ExprStmt { + self.prepend_stmts.extend(f.init.take().map(|init| { + match init { + VarDeclOrExpr::VarDecl(var) => var.into().into(), + VarDeclOrExpr::Expr(expr) => ExprStmt { span: DUMMY_SP, expr, - }), - })); - self.prepend_stmts.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: f.test.take().unwrap(), + } + .into(), + } })); + self.prepend_stmts.push( + ExprStmt { + span: DUMMY_SP, + expr: f.test.take().unwrap(), + } + .into(), + ); f.update = None; *stmt = *f.body.take(); } else if let Known(true) = val { diff --git a/crates/swc_ecma_minifier/src/compress/optimize/mod.rs b/crates/swc_ecma_minifier/src/compress/optimize/mod.rs index 4fef938c4b39..1bd9237a9612 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/mod.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/mod.rs @@ -1330,7 +1330,7 @@ impl Optimizer<'_> { Stmt::Block(bs) => { if bs.stmts.is_empty() { report_change!("Converting empty block to empty statement"); - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); return; } @@ -1385,7 +1385,7 @@ impl Optimizer<'_> { if block.stmts.is_empty() { self.changed = true; report_change!("optimizer: Removing empty block"); - *stmt = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *stmt = EmptyStmt { span: DUMMY_SP }.into(); return; } } @@ -1447,7 +1447,7 @@ impl Optimizer<'_> { match s { Stmt::Block(block) if block.stmts.is_empty() => { - *s = Stmt::Empty(EmptyStmt { span: block.span }); + *s = EmptyStmt { span: block.span }.into(); } Stmt::Block(block) if block.stmts.len() == 1 && is_fine_for_if_cons(&block.stmts[0]) => @@ -1472,10 +1472,11 @@ impl Optimizer<'_> { if let Stmt::Expr(cons) = &mut *stmt.cons { self.changed = true; report_change!("Converting if statement to a form `test && cons`"); - *s = Stmt::Expr(ExprStmt { + *s = ExprStmt { span: stmt.span, expr: Box::new(stmt.test.take().make_bin(op!("&&"), *cons.expr.take())), - }); + } + .into(); } } } @@ -1525,10 +1526,13 @@ impl VisitMut for Optimizer<'_> { self.changed = true; report_change!("Converting a body of an arrow expression to BlockStmt"); - stmts.push(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some(v.take()), - })); + stmts.push( + ReturnStmt { + span: DUMMY_SP, + arg: Some(v.take()), + } + .into(), + ); n.body = Box::new(BlockStmtOrExpr::BlockStmt(BlockStmt { span: DUMMY_SP, stmts, @@ -2543,14 +2547,14 @@ impl VisitMut for Optimizer<'_> { match s { // We use var decl with no declarator to indicate we dropped an decl. Stmt::Decl(Decl::Var(v)) if v.decls.is_empty() => { - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); self.prepend_stmts = old_prepend; self.append_stmts = old_append; return; } Stmt::Expr(es) => { if es.expr.is_invalid() { - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); self.prepend_stmts = old_prepend; self.append_stmts = old_append; return; @@ -2617,7 +2621,7 @@ impl VisitMut for Optimizer<'_> { report_change!("Creating a fake block because of prepend or append"); let span = s.span(); - *s = Stmt::Block(BlockStmt { + *s = BlockStmt { span, ctxt: SyntaxContext::empty().apply_mark(self.marks.fake_block), stmts: self @@ -2632,7 +2636,8 @@ impl VisitMut for Optimizer<'_> { _ => true, }) .collect(), - }); + } + .into(); #[cfg(debug_assertions)] { @@ -2660,7 +2665,7 @@ impl VisitMut for Optimizer<'_> { if let Stmt::Expr(ExprStmt { expr, .. }) = s { if is_pure_undefined(&self.expr_ctx, expr) { - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); return; } @@ -2675,7 +2680,7 @@ impl VisitMut for Optimizer<'_> { } { report_change!("Removing 'use strict'"); - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); return; } @@ -2688,7 +2693,7 @@ impl VisitMut for Optimizer<'_> { self.changed = true; report_change!("unused: Dropping an expression without side effect"); dump_change_detail!("unused: Dropping \n{}\n", dump(&*expr, false)); - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); return; } } @@ -2700,7 +2705,7 @@ impl VisitMut for Optimizer<'_> { match s { // We use var decl with no declarator to indicate we dropped an decl. Stmt::Decl(Decl::Var(v)) if v.decls.is_empty() => { - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); return; } _ => {} @@ -3064,18 +3069,21 @@ impl VisitMut for Optimizer<'_> { if can_prepend { can_prepend = false; - self.prepend_stmts.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: if side_effects.len() == 1 { - side_effects.remove(0) - } else { - SeqExpr { - span: DUMMY_SP, - exprs: side_effects.take(), - } - .into() - }, - })); + self.prepend_stmts.push( + ExprStmt { + span: DUMMY_SP, + expr: if side_effects.len() == 1 { + side_effects.remove(0) + } else { + SeqExpr { + span: DUMMY_SP, + exprs: side_effects.take(), + } + .into() + }, + } + .into(), + ); } else { // We prepend side effects to the initializer. @@ -3090,18 +3098,21 @@ impl VisitMut for Optimizer<'_> { // We append side effects. if !side_effects.is_empty() { - self.append_stmts.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: if side_effects.len() == 1 { - side_effects.remove(0) - } else { - SeqExpr { - span: DUMMY_SP, - exprs: side_effects, - } - .into() - }, - })); + self.append_stmts.push( + ExprStmt { + span: DUMMY_SP, + expr: if side_effects.len() == 1 { + side_effects.remove(0) + } else { + SeqExpr { + span: DUMMY_SP, + exprs: side_effects, + } + .into() + }, + } + .into(), + ); } vars.retain_mut(|var| { diff --git a/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs b/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs index 45ff2fb9c61a..3a483fa7f672 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs @@ -170,19 +170,19 @@ impl Optimizer<'_> { Stmt::If(mut stmt) => { stmt.test.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(Stmt::If(stmt))); + new_stmts.push(T::from_stmt(stmt.into())); } Stmt::Switch(mut stmt) => { stmt.discriminant.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(Stmt::Switch(stmt))); + new_stmts.push(T::from_stmt(stmt.into())); } Stmt::With(mut stmt) => { stmt.obj.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(Stmt::With(stmt))); + new_stmts.push(T::from_stmt(stmt.into())); } Stmt::Return(mut stmt @ ReturnStmt { arg: Some(..), .. }) => { @@ -198,13 +198,13 @@ impl Optimizer<'_> { } } - new_stmts.push(T::from_stmt(Stmt::Return(stmt))); + new_stmts.push(T::from_stmt(stmt.into())); } Stmt::Throw(mut stmt) => { stmt.arg.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(Stmt::Throw(stmt))); + new_stmts.push(T::from_stmt(stmt.into())); } Stmt::For(mut stmt @ ForStmt { init: None, .. }) @@ -270,7 +270,7 @@ impl Optimizer<'_> { )); } - new_stmts.push(T::from_stmt(Stmt::For(stmt))); + new_stmts.push(T::from_stmt(stmt.into())); continue; } @@ -291,19 +291,19 @@ impl Optimizer<'_> { unreachable!() } } - new_stmts.push(T::from_stmt(Stmt::For(stmt))); + new_stmts.push(T::from_stmt(stmt.into())); } Stmt::ForIn(mut stmt) => { stmt.right.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(Stmt::ForIn(stmt))); + new_stmts.push(T::from_stmt(stmt.into())); } Stmt::ForOf(mut stmt) => { stmt.right.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(Stmt::ForOf(stmt))); + new_stmts.push(T::from_stmt(stmt.into())); } Stmt::Decl(Decl::Var(var)) @@ -315,7 +315,7 @@ impl Optimizer<'_> { } ) && var.decls.iter().all(|v| v.init.is_none()) => { - new_stmts.push(T::from_stmt(Stmt::Decl(var.into()))); + new_stmts.push(T::from_stmt(var.into().into())); } Stmt::Decl(Decl::Fn(..)) => { @@ -324,10 +324,13 @@ impl Optimizer<'_> { _ => { if !exprs.is_empty() { - new_stmts.push(T::from_stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: Expr::from_exprs(take(&mut exprs)), - }))) + new_stmts.push(T::from_stmt( + ExprStmt { + span: DUMMY_SP, + expr: Expr::from_exprs(take(&mut exprs)), + } + .into(), + )) } new_stmts.push(T::from_stmt(stmt)); @@ -336,10 +339,13 @@ impl Optimizer<'_> { } Err(item) => { if !exprs.is_empty() { - new_stmts.push(T::from_stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: Expr::from_exprs(take(&mut exprs)), - }))) + new_stmts.push(T::from_stmt( + ExprStmt { + span: DUMMY_SP, + expr: Expr::from_exprs(take(&mut exprs)), + } + .into(), + )) } new_stmts.push(item); @@ -348,10 +354,13 @@ impl Optimizer<'_> { } if !exprs.is_empty() { - new_stmts.push(T::from_stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: Expr::from_exprs(take(&mut exprs)), - }))) + new_stmts.push(T::from_stmt( + ExprStmt { + span: DUMMY_SP, + expr: Expr::from_exprs(take(&mut exprs)), + } + .into(), + )) } *stmts = new_stmts; diff --git a/crates/swc_ecma_minifier/src/compress/optimize/switches.rs b/crates/swc_ecma_minifier/src/compress/optimize/switches.rs index 32d65ba6145d..c6c877e2f822 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/switches.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/switches.rs @@ -145,17 +145,18 @@ impl Optimizer<'_> { } stmts.extend(last.cons); - *s = Stmt::Block(BlockStmt { + *s = BlockStmt { stmts, ..Default::default() - }) + } + .into() } else { report_change!("switches: Removing unreachable cases from a constant switch"); stmt.cases = cases; if !var_ids.is_empty() { - *s = Stmt::Block(BlockStmt { + *s = BlockStmt { stmts: vec![ VarDecl { span: DUMMY_SP, @@ -168,7 +169,8 @@ impl Optimizer<'_> { s.take(), ], ..Default::default() - }) + } + .into() } } } @@ -347,10 +349,11 @@ impl Optimizer<'_> { [] => { self.changed = true; report_change!("switches: Removing empty switch"); - *s = Stmt::Expr(ExprStmt { + *s = ExprStmt { span: sw.span, expr: sw.discriminant.take(), - }) + } + .into() } [case] => { if contains_nested_break(case) { @@ -372,7 +375,7 @@ impl Optimizer<'_> { } .into(); - *s = Stmt::If(IfStmt { + *s = IfStmt { span: sw.span, test, cons: Box::new(Stmt::Block(BlockStmt { @@ -381,7 +384,8 @@ impl Optimizer<'_> { ..Default::default() })), alt: None, - }) + } + .into() } else { // is default let mut stmts = vec![Stmt::Expr(ExprStmt { @@ -389,11 +393,12 @@ impl Optimizer<'_> { expr: discriminant, })]; stmts.extend(case.cons); - *s = Stmt::Block(BlockStmt { + *s = BlockStmt { span: sw.span, stmts, ..Default::default() - }) + } + .into() } } [first, second] if first.test.is_none() || second.test.is_none() => { @@ -412,7 +417,7 @@ impl Optimizer<'_> { } else { (second, first) }; - *s = Stmt::If(IfStmt { + *s = IfStmt { span: sw.span, test: BinExpr { span: DUMMY_SP, @@ -435,7 +440,8 @@ impl Optimizer<'_> { }) .into(), ), - }) + } + .into() } else { let mut stmts = vec![Stmt::If(IfStmt { span: DUMMY_SP, @@ -464,11 +470,12 @@ impl Optimizer<'_> { alt: None, })]; stmts.extend(second.cons.take()); - *s = Stmt::Block(BlockStmt { + *s = BlockStmt { span: sw.span, stmts, ..Default::default() - }) + } + .into() } } _ => (), diff --git a/crates/swc_ecma_minifier/src/compress/optimize/unused.rs b/crates/swc_ecma_minifier/src/compress/optimize/unused.rs index 64e7778dd770..b7f01caf5d45 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/unused.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/unused.rs @@ -490,18 +490,21 @@ impl Optimizer<'_> { let mut side_effects = extract_class_side_effect(&self.expr_ctx, *class.class); if !side_effects.is_empty() { - self.prepend_stmts.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: if side_effects.len() > 1 { - SeqExpr { - span: DUMMY_SP, - exprs: side_effects, - } - .into() - } else { - side_effects.remove(0) - }, - })) + self.prepend_stmts.push( + ExprStmt { + span: DUMMY_SP, + expr: if side_effects.len() > 1 { + SeqExpr { + span: DUMMY_SP, + exprs: side_effects, + } + .into() + } else { + side_effects.remove(0) + }, + } + .into(), + ) } } } diff --git a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs index e3ddb1ad005f..a7ff0ccc07ed 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs @@ -77,12 +77,15 @@ impl Pure<'_> { let mut cons = bs.take(); cons.stmts.remove(0); - ls.body = Box::new(Stmt::If(IfStmt { - span: ls.span, - test, - cons: Box::new(Stmt::Block(cons)), - alt: None, - })); + ls.body = Box::new( + IfStmt { + span: ls.span, + test, + cons: Box::new(Stmt::Block(cons)), + alt: None, + } + .into(), + ); return None; } } @@ -112,12 +115,15 @@ impl Pure<'_> { let mut new_cons = bs.take(); new_cons.stmts[0] = cons; - ls.body = Box::new(Stmt::If(IfStmt { - span: ls.span, - test, - cons: Box::new(Stmt::Block(new_cons)), - alt: None, - })); + ls.body = Box::new( + IfStmt { + span: ls.span, + test, + cons: Box::new(Stmt::Block(new_cons)), + alt: None, + } + .into(), + ); return None; } } @@ -240,7 +246,7 @@ impl Pure<'_> { |(mut decls, mut hoisted_fns, mut new_stmts), stmt| { match stmt.take().try_into_stmt() { Ok(Stmt::Decl(Decl::Fn(f))) => { - hoisted_fns.push(Stmt::Decl(f.into()).into()); + hoisted_fns.push(f.into().into().into()); } Ok(t) => { let ids = extract_var_ids(&t).into_iter().map(|i| VarDeclarator { @@ -259,13 +265,14 @@ impl Pure<'_> { if !decls.is_empty() { new_stmts.push( - Stmt::from(VarDecl { + VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, decls, declare: false, ..Default::default() - }) + } + .into() .into(), ); } @@ -290,10 +297,11 @@ impl Pure<'_> { match stmt.as_stmt_mut() { Some(s) if s.eq_ignore_span(last) => { if need_break { - *s = Stmt::Break(BreakStmt { + *s = BreakStmt { label: None, span: s.span(), - }); + } + .into(); } else { s.take(); } @@ -475,10 +483,11 @@ impl Pure<'_> { { report_change!("unused: Removing `return void` in end of a function"); self.changed = true; - *s = Stmt::Expr(ExprStmt { + *s = ExprStmt { span: *span, expr: arg.take(), - }); + } + .into(); } } } @@ -513,10 +522,13 @@ impl Pure<'_> { Stmt::If(mut s) => { if let Value::Known(v) = s.test.cast_to_bool(&self.expr_ctx).1 { let mut var_ids = vec![]; - new.push(T::from_stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: s.test.take(), - }))); + new.push(T::from_stmt( + ExprStmt { + span: DUMMY_SP, + expr: s.test.take(), + } + .into(), + )); if v { if let Some(alt) = s.alt.take() { @@ -573,7 +585,7 @@ impl Pure<'_> { } } } else { - new.push(T::from_stmt(Stmt::If(s))); + new.push(T::from_stmt(s.into())); } } _ => new.push(T::from_stmt(stmt)), diff --git a/crates/swc_ecma_minifier/src/compress/pure/if_return.rs b/crates/swc_ecma_minifier/src/compress/pure/if_return.rs index 886389c0720c..56d527c65f91 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/if_return.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/if_return.rs @@ -114,14 +114,17 @@ impl Pure<'_> { s.cons = if cons.len() == 1 && is_fine_for_if_cons(&cons[0]) { Box::new(cons.into_iter().next().unwrap()) } else { - Box::new(Stmt::Block(BlockStmt { - span: DUMMY_SP, - stmts: cons, - ..Default::default() - })) + Box::new( + BlockStmt { + span: DUMMY_SP, + stmts: cons, + ..Default::default() + } + .into(), + ) }; - new.push(Stmt::If(s)) + new.push(s.into()) } _ => { unreachable!() @@ -150,11 +153,14 @@ impl Pure<'_> { match &mut **alt_of_alt { Stmt::Block(..) => {} Stmt::Expr(..) => { - *alt_of_alt = Box::new(Stmt::Block(BlockStmt { - span: DUMMY_SP, - stmts: vec![*alt_of_alt.take()], - ..Default::default() - })); + *alt_of_alt = Box::new( + BlockStmt { + span: DUMMY_SP, + stmts: vec![*alt_of_alt.take()], + ..Default::default() + } + .into(), + ); } _ => { return; @@ -168,12 +174,13 @@ impl Pure<'_> { Stmt::Block(alt_of_alt) => { prepend_stmt( &mut alt_of_alt.stmts, - Stmt::If(IfStmt { + IfStmt { span: *span_of_alt, test: test_of_alt.take(), cons: cons_of_alt.take(), alt: None, - }), + } + .into(), ); } diff --git a/crates/swc_ecma_minifier/src/compress/pure/loops.rs b/crates/swc_ecma_minifier/src/compress/pure/loops.rs index 11e4924e0498..8b7ef1f99a27 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/loops.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/loops.rs @@ -17,13 +17,14 @@ impl Pure<'_> { Stmt::While(stmt) => { self.changed = true; report_change!("loops: Converting a while loop to a for loop"); - *s = Stmt::For(ForStmt { + *s = ForStmt { span: stmt.span, init: None, test: Some(stmt.test.take()), update: None, body: stmt.body.take(), - }); + } + .into(); } Stmt::DoWhile(stmt) => { let val = stmt.test.as_pure_bool(&self.expr_ctx); @@ -31,13 +32,14 @@ impl Pure<'_> { self.changed = true; report_change!("loops: Converting an always-true do-while loop to a for loop"); - *s = Stmt::For(ForStmt { + *s = ForStmt { span: stmt.span, init: None, test: Some(stmt.test.take()), update: None, body: stmt.body.take(), - }); + } + .into(); } } _ => {} diff --git a/crates/swc_ecma_minifier/src/compress/pure/misc.rs b/crates/swc_ecma_minifier/src/compress/pure/misc.rs index 958589a00de7..ddea65eafd31 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/misc.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/misc.rs @@ -828,10 +828,10 @@ impl Pure<'_> { let span = ret.span; match ret.arg.take() { Some(arg) => { - *s = Stmt::Expr(ExprStmt { span, expr: arg }); + *s = ExprStmt { span, expr: arg }.into(); } None => { - *s = Stmt::Empty(EmptyStmt { span }); + *s = EmptyStmt { span }.into(); } } diff --git a/crates/swc_ecma_minifier/src/compress/pure/mod.rs b/crates/swc_ecma_minifier/src/compress/pure/mod.rs index 73c8229c208e..9050eeccd22f 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/mod.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/mod.rs @@ -891,7 +891,7 @@ impl VisitMut for Pure<'_> { match s { Stmt::Expr(ExprStmt { expr, .. }) if expr.is_invalid() => { - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); return; } _ => {} @@ -911,7 +911,7 @@ impl VisitMut for Pure<'_> { if self.options.drop_debugger { if let Stmt::Debugger(..) = s { self.changed = true; - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); report_change!("drop_debugger: Dropped a debugger statement"); return; } @@ -935,7 +935,7 @@ impl VisitMut for Pure<'_> { if let Stmt::Expr(es) = s { if es.expr.is_invalid() { - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); return; } } diff --git a/crates/swc_ecma_minifier/src/compress/pure/vars.rs b/crates/swc_ecma_minifier/src/compress/pure/vars.rs index 1b9ec5bc742c..91e8c3427ec4 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/vars.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/vars.rs @@ -78,7 +78,7 @@ impl Pure<'_> { v.decls.extend(var.decls); } _ => { - if let Some(s) = cur.take().map(|c| Stmt::Decl(c.into())) { + if let Some(s) = cur.take().map(|c| c.into().into()) { new.push(T::from_stmt(s)); } cur = Some(var); @@ -100,13 +100,13 @@ impl Pure<'_> { cur.decls.append(&mut var.decls); var.decls = cur.decls.take(); - new.push(T::from_stmt(Stmt::For(stmt))); + new.push(T::from_stmt(stmt.into())); } _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(Stmt::Decl(s.into()))); + new.push(T::from_stmt(s.into().into())); } - new.push(T::from_stmt(Stmt::For(stmt))); + new.push(T::from_stmt(stmt.into())); } } } @@ -120,18 +120,18 @@ impl Pure<'_> { .and_then(|v| if v.decls.is_empty() { None } else { Some(v) }) .map(VarDeclOrExpr::VarDecl); - new.push(T::from_stmt(Stmt::For(stmt))); + new.push(T::from_stmt(stmt.into())); } _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(Stmt::Decl(s.into()))); + new.push(T::from_stmt(s.into().into())); } - new.push(T::from_stmt(Stmt::For(stmt))); + new.push(T::from_stmt(stmt.into())); } }, _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(Stmt::Decl(s.into()))); + new.push(T::from_stmt(s.into().into())); } new.push(T::from_stmt(stmt)); } @@ -139,7 +139,7 @@ impl Pure<'_> { } Err(item) => { if let Some(s) = cur.take() { - new.push(T::from_stmt(Stmt::Decl(s.into()))); + new.push(T::from_stmt(s.into().into())); } new.push(item); } @@ -147,7 +147,7 @@ impl Pure<'_> { }); if let Some(s) = cur.take() { - new.push(T::from_stmt(Stmt::Decl(s.into()))); + new.push(T::from_stmt(s.into().into())); } drop_invalid_stmts(&mut new); diff --git a/crates/swc_ecma_minifier/src/compress/util/mod.rs b/crates/swc_ecma_minifier/src/compress/util/mod.rs index abaa49ea2514..4697290bb7d2 100644 --- a/crates/swc_ecma_minifier/src/compress/util/mod.rs +++ b/crates/swc_ecma_minifier/src/compress/util/mod.rs @@ -658,7 +658,7 @@ impl UnreachableHandler { let mut v = Self::default(); s.visit_mut_with(&mut v); if v.vars.is_empty() { - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); } else { *s = VarDecl { span: DUMMY_SP, diff --git a/crates/swc_ecma_parser/src/parser/stmt.rs b/crates/swc_ecma_parser/src/parser/stmt.rs index 888dffd9bbda..0e86019dbba6 100644 --- a/crates/swc_ecma_parser/src/parser/stmt.rs +++ b/crates/swc_ecma_parser/src/parser/stmt.rs @@ -133,7 +133,7 @@ impl<'a, I: Tokens> Parser { let v = self.parse_using_decl(start, true)?; if let Some(v) = v { - return Ok(Stmt::Decl(v.into())); + return Ok(v.into().into()); } } @@ -144,7 +144,7 @@ impl<'a, I: Tokens> Parser { eat!(self, ';'); let span = span!(self, start); - return Ok(Stmt::Expr(ExprStmt { span, expr })); + return Ok(ExprStmt { span, expr }.into()); } let is_typescript = self.input.syntax().typescript(); @@ -164,7 +164,7 @@ impl<'a, I: Tokens> Parser { assert_and_bump!(self, "await"); let v = self.parse_using_decl(start, true)?; if let Some(v) = v { - return Ok(Stmt::Decl(v.into())); + return Ok(v.into().into()); } } } @@ -198,18 +198,19 @@ impl<'a, I: Tokens> Parser { } return Ok(if is_break { - Stmt::Break(BreakStmt { span, label }) + BreakStmt { span, label }.into() } else { - Stmt::Continue(ContinueStmt { span, label }) + ContinueStmt { span, label }.into() }); } tok!("debugger") => { bump!(self); expect!(self, ';'); - return Ok(Stmt::Debugger(DebuggerStmt { + return Ok(DebuggerStmt { span: span!(self, start), - })); + } + .into()); } tok!("do") => { @@ -261,10 +262,11 @@ impl<'a, I: Tokens> Parser { let _ = self.parse_catch_clause(); let _ = self.parse_finally_block(); - return Ok(Stmt::Expr(ExprStmt { + return Ok(ExprStmt { span, expr: Invalid { span }.into(), - })); + } + .into()); } // Error recovery @@ -274,10 +276,11 @@ impl<'a, I: Tokens> Parser { let _ = self.parse_finally_block(); - return Ok(Stmt::Expr(ExprStmt { + return Ok(ExprStmt { span, expr: Invalid { span }.into(), - })); + } + .into()); } tok!("try") => { @@ -294,12 +297,12 @@ impl<'a, I: Tokens> Parser { tok!("var") => { let v = self.parse_var_stmt(false)?; - return Ok(Stmt::Decl(v.into())); + return Ok(v.into().into()); } tok!("const") if include_decl => { let v = self.parse_var_stmt(false)?; - return Ok(Stmt::Decl(v.into())); + return Ok(v.into().into()); } // 'let' can start an identifier reference. @@ -312,14 +315,14 @@ impl<'a, I: Tokens> Parser { if is_keyword { let v = self.parse_var_stmt(false)?; - return Ok(Stmt::Decl(v.into())); + return Ok(v.into().into()); } } tok!("using") if include_decl => { let v = self.parse_using_decl(start, false)?; if let Some(v) = v { - return Ok(Stmt::Decl(v.into())); + return Ok(v.into().into()); } } @@ -330,7 +333,7 @@ impl<'a, I: Tokens> Parser { { let start = self.input.cur_pos(); bump!(self); - return Ok(Stmt::Decl(self.parse_ts_interface_decl(start)?.into())); + return Ok(self.parse_ts_interface_decl(start)?.into().into()); } } @@ -341,7 +344,7 @@ impl<'a, I: Tokens> Parser { { let start = self.input.cur_pos(); bump!(self); - return Ok(Stmt::Decl(self.parse_ts_type_alias_decl(start)?.into())); + return Ok(self.parse_ts_type_alias_decl(start)?.into().into()); } } @@ -352,7 +355,7 @@ impl<'a, I: Tokens> Parser { { let start = self.input.cur_pos(); bump!(self); - return Ok(Stmt::Decl(self.parse_ts_enum_decl(start, false)?.into())); + return Ok(self.parse_ts_enum_decl(start, false)?.into().into()); } } @@ -368,9 +371,10 @@ impl<'a, I: Tokens> Parser { } if eat_exact!(self, ';') { - return Ok(Stmt::Empty(EmptyStmt { + return Ok(EmptyStmt { span: span!(self, start), - })); + } + .into()); } // Handle async function foo() {} @@ -406,15 +410,16 @@ impl<'a, I: Tokens> Parser { eat!(self, ';'); - return Ok(Stmt::Expr(ExprStmt { + return Ok(ExprStmt { span: span!(self, start), expr, - })); + } + .into()); } if self.input.syntax().typescript() { if let Some(decl) = self.parse_ts_expr_stmt(decorators, ident.clone())? { - return Ok(Stmt::Decl(decl)); + return Ok(decl.into()); } } } @@ -446,10 +451,11 @@ impl<'a, I: Tokens> Parser { } if eat!(self, ';') { - Ok(Stmt::Expr(ExprStmt { + Ok(ExprStmt { span: span!(self, start), expr, - })) + } + .into()) } else { if let Token::BinOp(..) = *cur!(self, false)? { self.emit_err(self.input.cur_span(), SyntaxError::TS1005); @@ -561,7 +567,7 @@ impl<'a, I: Tokens> Parser { match &mut cur { Some(cur) => { - self.adjust_if_else_clause(cur, Box::new(Stmt::If(alt))); + self.adjust_if_else_clause(cur, Box::new(alt.into())); } _ => { cur = Some(alt); @@ -574,7 +580,7 @@ impl<'a, I: Tokens> Parser { if let Some(last) = last { self.adjust_if_else_clause(&mut cur, Box::new(last)); } - Some(Stmt::If(cur)) + Some(cur.into()) } _ => last, } @@ -602,10 +608,11 @@ impl<'a, I: Tokens> Parser { p.include_in_expr(true).parse_expr().map(Some)? }; expect!(p, ';'); - Ok(Stmt::Return(ReturnStmt { + Ok(ReturnStmt { span: span!(p, start), arg, - })) + } + .into()) }); if !self.ctx().in_function && !self.input.syntax().allow_return_outside_function() { @@ -668,11 +675,12 @@ impl<'a, I: Tokens> Parser { // eof or rbrace expect!(self, '}'); - Ok(Stmt::Switch(SwitchStmt { + Ok(SwitchStmt { span: span!(self, switch_start), discriminant, cases, - })) + } + .into()) } fn parse_throw_stmt(&mut self) -> PResult { @@ -689,7 +697,7 @@ impl<'a, I: Tokens> Parser { expect!(self, ';'); let span = span!(self, start); - Ok(Stmt::Throw(ThrowStmt { span, arg })) + Ok(ThrowStmt { span, arg }.into()) } fn parse_try_stmt(&mut self) -> PResult { @@ -1054,7 +1062,7 @@ impl<'a, I: Tokens> Parser { let span = span!(self, start); - Ok(Stmt::DoWhile(DoWhileStmt { span, test, body })) + Ok(DoWhileStmt { span, test, body }.into()) } fn parse_while_stmt(&mut self) -> PResult { @@ -1074,7 +1082,7 @@ impl<'a, I: Tokens> Parser { let body = self.with_ctx(ctx).parse_stmt(false).map(Box::new)?; let span = span!(self, start); - Ok(Stmt::While(WhileStmt { span, test, body })) + Ok(WhileStmt { span, test, body }.into()) } fn parse_with_stmt(&mut self) -> PResult { @@ -1103,7 +1111,7 @@ impl<'a, I: Tokens> Parser { let body = self.with_ctx(ctx).parse_stmt(false).map(Box::new)?; let span = span!(self, start); - Ok(Stmt::With(WithStmt { span, obj, body })) + Ok(WithStmt { span, obj, body }.into()) } pub(super) fn parse_block(&mut self, allow_directives: bool) -> PResult { @@ -1168,11 +1176,12 @@ impl<'a, I: Tokens> Parser { } } - Ok(Stmt::Labeled(LabeledStmt { + Ok(LabeledStmt { span: span!(p, start), label: l, body, - })) + } + .into()) }) } @@ -1208,33 +1217,36 @@ impl<'a, I: Tokens> Parser { syntax_error!(self, await_token, SyntaxError::AwaitForStmt); } - Stmt::For(ForStmt { + ForStmt { span, init, test, update, body, - }) + } + .into() } TempForHead::ForIn { left, right } => { if let Some(await_token) = await_token { syntax_error!(self, await_token, SyntaxError::AwaitForStmt); } - Stmt::ForIn(ForInStmt { + ForInStmt { span, left, right, body, - }) + } + .into() } - TempForHead::ForOf { left, right } => Stmt::ForOf(ForOfStmt { + TempForHead::ForOf { left, right } => ForOfStmt { span, is_await: await_token.is_some(), left, right, body, - }), + } + .into(), }) } diff --git a/crates/swc_ecma_parser/src/parser/stmt/module_item.rs b/crates/swc_ecma_parser/src/parser/stmt/module_item.rs index bf249256141b..03964a02b36e 100644 --- a/crates/swc_ecma_parser/src/parser/stmt/module_item.rs +++ b/crates/swc_ecma_parser/src/parser/stmt/module_item.rs @@ -9,10 +9,11 @@ impl Parser { eat!(self, ';'); - return Ok(Stmt::Expr(ExprStmt { + return Ok(ExprStmt { span: span!(self, start), expr, - }) + } + .into() .into()); } @@ -21,10 +22,11 @@ impl Parser { eat!(self, ';'); - return Ok(Stmt::Expr(ExprStmt { + return Ok(ExprStmt { span: span!(self, start), expr, - }) + } + .into() .into()); } diff --git a/crates/swc_ecma_parser/src/parser/typescript.rs b/crates/swc_ecma_parser/src/parser/typescript.rs index 6cc65b584461..3aff95e83085 100644 --- a/crates/swc_ecma_parser/src/parser/typescript.rs +++ b/crates/swc_ecma_parser/src/parser/typescript.rs @@ -2841,7 +2841,7 @@ mod tests { span: DUMMY_SP, shebang: None, body: { - let first = ModuleItem::Stmt(Stmt::Decl( + let first = ModuleItem::Stmt( TsTypeAliasDecl { span: DUMMY_SP, declare: false, @@ -2856,8 +2856,9 @@ mod tests { }), })), } + .into() .into(), - )); + ); vec![first] }, }; @@ -2877,7 +2878,7 @@ mod tests { span: DUMMY_SP, shebang: None, body: { - let second = ModuleItem::Stmt(Stmt::Decl( + let second = ModuleItem::Stmt( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Const, @@ -2898,8 +2899,9 @@ mod tests { }], ..Default::default() } + .into() .into(), - )); + ); vec![second] }, }; diff --git a/crates/swc_ecma_preset_env/src/lib.rs b/crates/swc_ecma_preset_env/src/lib.rs index 0946b638acc1..a7e8a3a16db2 100644 --- a/crates/swc_ecma_preset_env/src/lib.rs +++ b/crates/swc_ecma_preset_env/src/lib.rs @@ -509,7 +509,7 @@ impl VisitMut for Polyfills { prepend_stmts( &mut m.body, v.into_iter().map(|src| { - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr: CallExpr { span, @@ -529,14 +529,15 @@ impl VisitMut for Polyfills { ..Default::default() } .into(), - }) + } + .into() }), ); } else { prepend_stmts( &mut m.body, required.into_iter().map(|src| { - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr: CallExpr { span, @@ -555,7 +556,8 @@ impl VisitMut for Polyfills { ..Default::default() } .into(), - }) + } + .into() }), ); } diff --git a/crates/swc_ecma_transforms_base/src/fixer.rs b/crates/swc_ecma_transforms_base/src/fixer.rs index ed0bec5a5cd8..265e64e6c8b2 100644 --- a/crates/swc_ecma_transforms_base/src/fixer.rs +++ b/crates/swc_ecma_transforms_base/src/fixer.rs @@ -522,11 +522,14 @@ impl VisitMut for Fixer<'_> { node.visit_mut_children_with(self); if will_eat_else_token(&node.cons) { - node.cons = Box::new(Stmt::Block(BlockStmt { - span: node.cons.span(), - stmts: vec![*node.cons.take()], - ..Default::default() - })); + node.cons = Box::new( + BlockStmt { + span: node.cons.span(), + stmts: vec![*node.cons.take()], + ..Default::default() + } + .into(), + ); } } diff --git a/crates/swc_ecma_transforms_base/src/helpers/mod.rs b/crates/swc_ecma_transforms_base/src/helpers/mod.rs index aacaceb4c604..90c9327b3385 100644 --- a/crates/swc_ecma_transforms_base/src/helpers/mod.rs +++ b/crates/swc_ecma_transforms_base/src/helpers/mod.rs @@ -462,7 +462,7 @@ impl InjectHelpers { } .into() .into(); - Stmt::Decl(decl) + decl.into() } fn map_helper_ref_ident(&mut self, ref_ident: &Ident) -> Option { diff --git a/crates/swc_ecma_transforms_base/src/rename/ops.rs b/crates/swc_ecma_transforms_base/src/rename/ops.rs index 29c2f94c63b6..489c737c28af 100644 --- a/crates/swc_ecma_transforms_base/src/rename/ops.rs +++ b/crates/swc_ecma_transforms_base/src/rename/ops.rs @@ -277,14 +277,15 @@ where let orig_ident = ident.clone(); match self.rename_ident(&mut ident) { Ok(..) => { - *item = ModuleItem::Stmt(Stmt::Decl( + *item = ModuleItem::Stmt( ClassDecl { ident: ident.clone(), class: class.take(), declare: *declare, } + .into() .into(), - )); + ); export!( ModuleExportName::Ident(orig_ident), ModuleExportName::Ident(ident.take()) @@ -319,14 +320,15 @@ where let orig_ident = ident.clone(); match self.rename_ident(&mut ident) { Ok(..) => { - *item = ModuleItem::Stmt(Stmt::Decl( + *item = ModuleItem::Stmt( FnDecl { ident: ident.clone(), function, declare: *declare, } + .into() .into(), - )); + ); export!( ModuleExportName::Ident(orig_ident), ModuleExportName::Ident(ident) @@ -372,13 +374,14 @@ where })); return; } - *item = ModuleItem::Stmt(Stmt::Decl( + *item = ModuleItem::Stmt( VarDecl { decls, ..*var.take() } + .into() .into(), - )); + ); self.extra .push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( NamedExport { diff --git a/crates/swc_ecma_transforms_base/tests/fixer_test262.rs b/crates/swc_ecma_transforms_base/tests/fixer_test262.rs index 9729d9069f8d..0c57f9783732 100644 --- a/crates/swc_ecma_transforms_base/tests/fixer_test262.rs +++ b/crates/swc_ecma_transforms_base/tests/fixer_test262.rs @@ -361,8 +361,8 @@ impl Fold for Normalizer { match stmt { Stmt::Expr(ExprStmt { span, expr }) => match *expr { - Expr::Paren(ParenExpr { expr, .. }) => Stmt::Expr(ExprStmt { span, expr }), - _ => Stmt::Expr(ExprStmt { span, expr }), + Expr::Paren(ParenExpr { expr, .. }) => ExprStmt { span, expr }.into(), + _ => ExprStmt { span, expr }.into(), }, _ => stmt, } diff --git a/crates/swc_ecma_transforms_module/src/common_js.rs b/crates/swc_ecma_transforms_module/src/common_js.rs index 2de953f3f47b..dc930e684737 100644 --- a/crates/swc_ecma_transforms_module/src/common_js.rs +++ b/crates/swc_ecma_transforms_module/src/common_js.rs @@ -348,13 +348,14 @@ where if decl_mod_ident { let stmt = if is_lazy { - Stmt::Decl(lazy_require(import_expr, mod_ident, self.const_var_kind).into()) + lazy_require(import_expr, mod_ident, self.const_var_kind) + .into() + .into() } else { - Stmt::Decl( - import_expr - .into_var_decl(self.const_var_kind, mod_ident.into()) - .into(), - ) + import_expr + .into_var_decl(self.const_var_kind, mod_ident.into()) + .into() + .into() }; stmts.push(stmt); @@ -443,7 +444,7 @@ where let mut var_decl = require.into_var_decl(self.const_var_kind, id.into()); var_decl.span = span; - Stmt::Decl(var_decl.into()) + var_decl.into().into() } .into() } diff --git a/crates/swc_ecma_transforms_module/src/module_decl_strip.rs b/crates/swc_ecma_transforms_module/src/module_decl_strip.rs index 17ed1d729a39..b77588684100 100644 --- a/crates/swc_ecma_transforms_module/src/module_decl_strip.rs +++ b/crates/swc_ecma_transforms_module/src/module_decl_strip.rs @@ -70,7 +70,7 @@ impl VisitMut for ModuleDeclStrip { match module_decl { ModuleDecl::Import(..) => continue, ModuleDecl::ExportDecl(ExportDecl { decl, .. }) => { - list.push(Stmt::Decl(decl).into()); + list.push(decl.into().into()); } ModuleDecl::ExportNamed(..) => continue, ModuleDecl::ExportDefaultDecl(ExportDefaultDecl { decl, .. }) => match decl @@ -78,13 +78,13 @@ impl VisitMut for ModuleDeclStrip { DefaultDecl::Class(class_expr) => list.extend( class_expr .as_class_decl() - .map(|decl| Stmt::Decl(decl.into())) + .map(|decl| decl.into().into()) .map(From::from), ), DefaultDecl::Fn(fn_expr) => list.extend( fn_expr .as_fn_decl() - .map(|decl| Stmt::Decl(decl.into())) + .map(|decl| decl.into().into()) .map(From::from), ), DefaultDecl::TsInterfaceDecl(_) => continue, @@ -271,12 +271,13 @@ impl VisitMut for ModuleDeclStrip { ExportItem::new((n.span, Default::default()), ident.clone()), ); - self.export_default = Some(Stmt::Decl( + self.export_default = Some( n.expr .take() .into_var_decl(self.const_var_kind, ident.into()) + .into() .into(), - )); + ); } /// ```javascript diff --git a/crates/swc_ecma_transforms_module/src/system_js.rs b/crates/swc_ecma_transforms_module/src/system_js.rs index 8b828628ea9a..6211709479ce 100644 --- a/crates/swc_ecma_transforms_module/src/system_js.rs +++ b/crates/swc_ecma_transforms_module/src/system_js.rs @@ -284,55 +284,61 @@ impl SystemJs { } .into(), ); - meta.setter_fn_stmts.push(Stmt::ForIn(ForInStmt { - span: DUMMY_SP, - left: VarDecl { - kind: VarDeclKind::Var, - decls: vec![VarDeclarator { - span: DUMMY_SP, - name: key_ident.clone().into(), - init: None, - definite: false, - }], - ..Default::default() - } - .into(), - right: target.clone().into(), - - body: Box::new(Stmt::Block(BlockStmt { + meta.setter_fn_stmts.push( + ForInStmt { span: DUMMY_SP, - stmts: vec![Stmt::If(IfStmt { + left: VarDecl { + kind: VarDeclKind::Var, + decls: vec![VarDeclarator { + span: DUMMY_SP, + name: key_ident.clone().into(), + init: None, + definite: false, + }], + ..Default::default() + } + .into(), + right: target.clone().into(), + + body: Box::new(Stmt::Block(BlockStmt { span: DUMMY_SP, - test: Box::new(Expr::Bin(BinExpr { + stmts: vec![Stmt::If(IfStmt { span: DUMMY_SP, - op: op!("&&"), - left: Box::new( - key_ident - .clone() - .make_bin(op!("!=="), quote_str!("default")), - ), - right: Box::new( - key_ident - .clone() - .make_bin(op!("!=="), quote_str!("__esModule")), - ), - })), - cons: Box::new(Stmt::Block(BlockStmt { - stmts: vec![AssignExpr { + test: Box::new(Expr::Bin(BinExpr { span: DUMMY_SP, - op: op!("="), - left: export_obj.clone().computed_member(key_ident.clone()).into(), - right: target.computed_member(key_ident).into(), - } - .into_stmt()], - ..Default::default() - })), - alt: None, - })], + op: op!("&&"), + left: Box::new( + key_ident + .clone() + .make_bin(op!("!=="), quote_str!("default")), + ), + right: Box::new( + key_ident + .clone() + .make_bin(op!("!=="), quote_str!("__esModule")), + ), + })), + cons: Box::new(Stmt::Block(BlockStmt { + stmts: vec![AssignExpr { + span: DUMMY_SP, + op: op!("="), + left: export_obj + .clone() + .computed_member(key_ident.clone()) + .into(), + right: target.computed_member(key_ident).into(), + } + .into_stmt()], + ..Default::default() + })), + alt: None, + })], - ..Default::default() - })), - })); + ..Default::default() + })), + } + .into(), + ); for (sym, value) in meta .export_names .drain(..) @@ -471,49 +477,54 @@ impl SystemJs { if let Some(expr) = self.hoist_var_decl(var_decl) { expr.into_stmt() } else { - Stmt::Empty(EmptyStmt { span: DUMMY_SP }) + EmptyStmt { span: DUMMY_SP }.into() } // } else { // return Stmt::Decl(Decl::Var(var_decl)); // } } else { - Stmt::Decl(decl) + decl.into() } } Stmt::For(for_stmt) => { if let Some(init) = for_stmt.init { if let VarDeclOrExpr::VarDecl(var_decl) = init { if var_decl.kind == VarDeclKind::Var { - Stmt::For(ForStmt { + ForStmt { init: self .hoist_var_decl(var_decl) .map(|expr| VarDeclOrExpr::Expr(Box::new(expr))), ..for_stmt - }) + } + .into() } else { - Stmt::For(ForStmt { + ForStmt { init: Some(VarDeclOrExpr::VarDecl(var_decl)), ..for_stmt - }) + } + .into() } } else { - Stmt::For(ForStmt { + ForStmt { init: Some(init), ..for_stmt - }) + } + .into() } } else { - Stmt::For(for_stmt) + for_stmt.into() } } - Stmt::ForIn(for_in_stmt) => Stmt::ForIn(ForInStmt { + Stmt::ForIn(for_in_stmt) => ForInStmt { left: self.hoist_for_var_decl(for_in_stmt.left), ..for_in_stmt - }), - Stmt::ForOf(for_of_stmt) => Stmt::ForOf(ForOfStmt { + } + .into(), + Stmt::ForOf(for_of_stmt) => ForOfStmt { left: self.hoist_for_var_decl(for_of_stmt.left), ..for_of_stmt - }), + } + .into(), _ => stmt, } } @@ -856,7 +867,7 @@ impl Fold for SystemJs { fn_decl.ident.to_id(), fn_decl.ident.sym.clone(), ); - before_body_stmts.push(Stmt::Decl(fn_decl.into())); + before_body_stmts.push(fn_decl.into().into()); } Decl::Var(var_decl) => { let mut decl = VarDecl { @@ -904,14 +915,15 @@ impl Fold for SystemJs { self.export_names.push("default".into()); self.export_values.push(ident.clone().into()); self.add_export_name(ident.to_id(), "default".into()); - before_body_stmts.push(Stmt::Decl( + before_body_stmts.push( FnDecl { ident: ident.clone(), declare: false, function: fn_expr.function, } + .into() .into(), - )); + ); } else { self.export_names.push("default".into()); self.export_values.push(fn_expr.into()); @@ -956,9 +968,9 @@ impl Fold for SystemJs { ); } Decl::Fn(fn_decl) => { - before_body_stmts.push(Stmt::Decl(fn_decl.into())); + before_body_stmts.push(fn_decl.into().into()); } - _ => execute_stmts.push(Stmt::Decl(decl)), + _ => execute_stmts.push(decl.into()), }, _ => execute_stmts.push(stmt), }, diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs index 8959a3d9c329..e12e5bd003ca 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs @@ -401,10 +401,13 @@ impl VisitMut for Remover { if let Stmt::If(IfStmt { alt: Some(..), .. }) = *cons { return IfStmt { test, - cons: Box::new(Stmt::Block(BlockStmt { - stmts: vec![*cons], - ..Default::default() - })), + cons: Box::new( + BlockStmt { + stmts: vec![*cons], + ..Default::default() + } + .into(), + ), alt, span, } @@ -420,19 +423,19 @@ impl VisitMut for Remover { // Preserve effect of the test if !p.is_pure() { if let Some(expr) = ignore_result(test, true, &self.expr_ctx) { - stmts.push(Stmt::Expr(ExprStmt { span, expr })) + stmts.push(ExprStmt { span, expr }.into()) } } if v { // Preserve variables if let Some(var) = alt.and_then(|alt| alt.extract_var_ids_as_var()) { - stmts.push(Stmt::Decl(var.into())) + stmts.push(var.into().into()) } stmts.push(*cons); } else { if let Some(var) = cons.extract_var_ids_as_var() { - stmts.push(Stmt::Decl(var.into())) + stmts.push(var.into().into()) } if let Some(alt) = alt { @@ -441,7 +444,7 @@ impl VisitMut for Remover { } if stmts.is_empty() { - return Stmt::Empty(EmptyStmt { span }); + return EmptyStmt { span }.into(); } if cfg!(feature = "debug") { @@ -450,11 +453,12 @@ impl VisitMut for Remover { self.changed = true; - let mut block = Stmt::Block(BlockStmt { + let mut block = BlockStmt { span, stmts, ..Default::default() - }); + } + .into(); block.visit_mut_with(self); return block; } @@ -468,33 +472,34 @@ impl VisitMut for Remover { self.changed = true; return if let Some(expr) = ignore_result(test, true, &self.expr_ctx) { - Stmt::Expr(ExprStmt { span, expr }) + ExprStmt { span, expr }.into() } else { - Stmt::Empty(EmptyStmt { span }) + EmptyStmt { span }.into() }; } } - Stmt::If(IfStmt { + IfStmt { span, test, cons, alt, - }) + } + .into() } Stmt::Decl(Decl::Var(v)) if v.decls.is_empty() => { if cfg!(feature = "debug") { debug!("Dropping an empty var declaration"); } - Stmt::Empty(EmptyStmt { span: v.span }) + EmptyStmt { span: v.span }.into() } Stmt::Labeled(LabeledStmt { label, span, body, .. }) if body.is_empty() => { debug!("Dropping an empty label statement: `{}`", label); - Stmt::Empty(EmptyStmt { span }) + EmptyStmt { span }.into() } Stmt::Labeled(LabeledStmt { @@ -508,19 +513,19 @@ impl VisitMut for Remover { } => { debug!("Dropping a label statement with instant break: `{}`", label); - Stmt::Empty(EmptyStmt { span }) + EmptyStmt { span }.into() } // `1;` -> `;` Stmt::Expr(ExprStmt { span, expr, .. }) => { // Directives if let Expr::Lit(Lit::Str(..)) = &*expr { - return Stmt::Expr(ExprStmt { span, expr }); + return ExprStmt { span, expr }.into(); } match ignore_result(expr, false, &self.expr_ctx) { - Some(e) => Stmt::Expr(ExprStmt { span, expr: e }), - None => Stmt::Empty(EmptyStmt { span: DUMMY_SP }), + Some(e) => ExprStmt { span, expr: e }.into(), + None => EmptyStmt { span: DUMMY_SP }.into(), } } @@ -530,7 +535,7 @@ impl VisitMut for Remover { debug!("Drooping an empty block statement"); } - Stmt::Empty(EmptyStmt { span }) + EmptyStmt { span }.into() } else if stmts.len() == 1 && !is_block_scoped_stuff(&stmts[0]) && stmt_depth(&stmts[0]) <= 1 @@ -543,7 +548,7 @@ impl VisitMut for Remover { v.visit_mut_with(self); v } else { - Stmt::Block(BlockStmt { span, stmts, ctxt }) + BlockStmt { span, stmts, ctxt }.into() } } Stmt::Try(s) => { @@ -556,7 +561,7 @@ impl VisitMut for Remover { // Only leave the finally block if try block is empty if block.is_empty() { - let var = handler.and_then(|h| Stmt::from(h.body).extract_var_ids_as_var()); + let var = handler.and_then(|h| h.body.into().extract_var_ids_as_var()); return if let Some(mut finalizer) = finalizer { if let Some(var) = var.map(Box::new).map(Decl::from).map(Stmt::from) { @@ -567,7 +572,7 @@ impl VisitMut for Remover { var.map(Box::new) .map(Decl::from) .map(Stmt::from) - .unwrap_or_else(|| Stmt::Empty(EmptyStmt { span })) + .unwrap_or_else(|| EmptyStmt { span }.into()) }; } @@ -578,7 +583,7 @@ impl VisitMut for Remover { debug!("Converting a try statement to a block statement"); } - return Stmt::Block(block); + return block.into(); } TryStmt { @@ -595,11 +600,11 @@ impl VisitMut for Remover { .iter() .any(|case| matches!(case.test.as_deref(), Some(Expr::Update(..)))) { - return Stmt::Switch(s); + return s.into(); } if let Expr::Update(..) = &*s.discriminant { if s.cases.len() != 1 { - return Stmt::Switch(s); + return s.into(); } } @@ -669,8 +674,8 @@ impl VisitMut for Remover { debug!("Removing an empty switch statement"); } return match ignore_result(s.discriminant, true, &self.expr_ctx) { - Some(expr) => Stmt::Expr(ExprStmt { span: s.span, expr }), - None => Stmt::Empty(EmptyStmt { span: s.span }), + Some(expr) => ExprStmt { span: s.span, expr }.into(), + None => EmptyStmt { span: s.span }.into(), }; } @@ -688,11 +693,12 @@ impl VisitMut for Remover { prepend_stmt(&mut stmts, expr.into_stmt()); } - let mut block = Stmt::Block(BlockStmt { + let mut block = BlockStmt { span: s.span, stmts, ..Default::default() - }); + } + .into(); block.visit_mut_with(self); return block; } @@ -804,7 +810,7 @@ impl VisitMut for Remover { if !exprs.is_empty() { prepend_stmt( &mut stmts, - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr: if exprs.len() == 1 { exprs.remove(0) @@ -815,18 +821,20 @@ impl VisitMut for Remover { } .into() }, - }), + } + .into(), ); } if cfg!(feature = "debug") { debug!("Switch -> Block as we know discriminant"); } - let mut block = Stmt::Block(BlockStmt { + let mut block = BlockStmt { span: s.span, stmts, ..Default::default() - }); + } + .into(); block.visit_mut_with(self); return block; } @@ -868,11 +876,12 @@ impl VisitMut for Remover { ) } - let mut block = Stmt::Block(BlockStmt { + let mut block = BlockStmt { span: s.span, stmts, ..Default::default() - }); + } + .into(); block.visit_mut_with(self); @@ -983,7 +992,7 @@ impl VisitMut for Remover { if !exprs.is_empty() { prepend_stmt( &mut stmts, - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr: if exprs.len() == 1 { exprs.remove(0) @@ -994,18 +1003,20 @@ impl VisitMut for Remover { } .into() }, - }), + } + .into(), ); } if cfg!(feature = "debug") { debug!("Stmt -> Block as all cases are empty"); } - let mut block = Stmt::Block(BlockStmt { + let mut block = BlockStmt { span: s.span, stmts, ..Default::default() - }); + } + .into(); block.visit_mut_with(self); return block; } @@ -1058,7 +1069,7 @@ impl VisitMut for Remover { } .into(); } - return Stmt::Empty(EmptyStmt { span: s.span }); + return EmptyStmt { span: s.span }.into(); } } @@ -1081,15 +1092,16 @@ impl VisitMut for Remover { let body = if let Some(var) = decl { var.into() } else { - Stmt::Empty(EmptyStmt { span: s.span }) + EmptyStmt { span: s.span }.into() }; if s.init.is_some() { - Stmt::For(ForStmt { + ForStmt { body: Box::new(body), update: None, ..s - }) + } + .into() } else { body } @@ -1099,51 +1111,54 @@ impl VisitMut for Remover { if let (purity, Known(v)) = s.test.cast_to_bool(&self.expr_ctx) { if v { if purity.is_pure() { - Stmt::While(WhileStmt { + WhileStmt { test: Lit::Bool(Bool { span: s.test.span(), value: true, }) .into(), ..s - }) + } + .into() } else { - Stmt::While(s) + s.into() } } else { let body = s.body.extract_var_ids_as_var(); let body = body.map(Box::new).map(Decl::Var).map(Stmt::Decl); - let body = body.unwrap_or(Stmt::Empty(EmptyStmt { span: s.span })); + let body = body.unwrap_or(EmptyStmt { span: s.span }.into()); if purity.is_pure() { body } else { - Stmt::While(WhileStmt { + WhileStmt { body: Box::new(body), ..s - }) + } + .into() } } } else { - Stmt::While(s) + s.into() } } Stmt::DoWhile(s) => { - if has_conditional_stopper(&[Stmt::DoWhile(s.clone())]) { - return Stmt::DoWhile(s); + if has_conditional_stopper(&[s.clone().into()]) { + return s.into(); } if let Known(v) = s.test.as_pure_bool(&self.expr_ctx) { if v { // `for(;;);` is shorter than `do ; while(true);` - Stmt::For(ForStmt { + ForStmt { span: s.span, init: None, test: None, update: None, body: s.body, - }) + } + .into() } else { let mut body = prepare_loop_body_for_inlining(*s.body); body.visit_mut_with(self); @@ -1160,7 +1175,7 @@ impl VisitMut for Remover { } } } else { - Stmt::DoWhile(s) + s.into() } } @@ -1196,7 +1211,7 @@ impl VisitMut for Remover { debug!("Dropping a useless variable declaration"); } - return Stmt::Empty(EmptyStmt { span: v.span }); + return EmptyStmt { span: v.span }.into(); } VarDecl { decls, ..*v }.into() @@ -1315,7 +1330,7 @@ impl Remover { for t in iter { match t.try_into_stmt() { Ok(Stmt::Decl(Decl::Fn(f))) => { - hoisted_fns.push(T::from_stmt(Stmt::Decl(f.into()))); + hoisted_fns.push(T::from_stmt(f.into().into())); } Ok(t) => { let ids = extract_var_ids(&t).into_iter().map(|i| { @@ -1400,10 +1415,13 @@ impl Remover { let expr = ignore_result(test, true, &self.expr_ctx); if let Some(expr) = expr { - new_stmts.push(T::from_stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr, - }))); + new_stmts.push(T::from_stmt( + ExprStmt { + span: DUMMY_SP, + expr, + } + .into(), + )); } } @@ -1426,12 +1444,13 @@ impl Remover { } } } - _ => Stmt::If(IfStmt { + _ => IfStmt { test, cons, alt, span, - }), + } + .into(), } } diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs index 1542c62566b3..b958ee97ee15 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs @@ -919,7 +919,7 @@ impl VisitMut for TreeShaker { { debug!("Dropping an import because it's not used"); self.changed = true; - *n = ModuleItem::Stmt(Stmt::Empty(EmptyStmt { span: DUMMY_SP })); + *n = ModuleItem::Stmt(EmptyStmt { span: DUMMY_SP }.into()); } } _ => { @@ -970,20 +970,21 @@ impl VisitMut for TreeShaker { self.changed = true; if exprs.is_empty() { - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); return; } else { - *s = Stmt::Expr(ExprStmt { + *s = ExprStmt { span, expr: Expr::from_exprs(exprs), - }); + } + .into(); } } } if let Stmt::Decl(Decl::Var(v)) = s { if v.decls.is_empty() { - *s = Stmt::Empty(EmptyStmt { span: DUMMY_SP }); + *s = EmptyStmt { span: DUMMY_SP }.into(); } } diff --git a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs index 41375b942177..449782b6f450 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs @@ -215,22 +215,28 @@ impl Decorator2022_03 { } .into(); - self.state.extra_stmts.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr, - })); + self.state.extra_stmts.push( + ExprStmt { + span: DUMMY_SP, + expr, + } + .into(), + ); if let Some(init) = self.state.init_static.take() { - self.state.extra_stmts.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: CallExpr { + self.state.extra_stmts.push( + ExprStmt { span: DUMMY_SP, - callee: init.as_callee(), - args: vec![ThisExpr { span: DUMMY_SP }.as_arg()], - ..Default::default() + expr: CallExpr { + span: DUMMY_SP, + callee: init.as_callee(), + args: vec![ThisExpr { span: DUMMY_SP }.as_arg()], + ..Default::default() + } + .into(), } .into(), - })); + ); } } @@ -724,7 +730,7 @@ impl Decorator2022_03 { })); self.state = old_state; - Stmt::Decl(c.take().into()) + c.take().into().into() } fn process_decorators(&mut self, decorators: &mut [Decorator]) { @@ -914,10 +920,11 @@ impl VisitMut for Decorator2022_03 { match p.kind { MethodKind::Method => { - let call_stmt = Stmt::Return(ReturnStmt { + let call_stmt = ReturnStmt { span: DUMMY_SP, arg: Some(init.into()), - }); + } + .into(); p.kind = MethodKind::Getter; p.function.body = Some(BlockStmt { @@ -927,7 +934,7 @@ impl VisitMut for Decorator2022_03 { }); } MethodKind::Getter => { - let call_stmt = Stmt::Return(ReturnStmt { + let call_stmt = ReturnStmt { span: DUMMY_SP, arg: Some( CallExpr { @@ -938,7 +945,8 @@ impl VisitMut for Decorator2022_03 { } .into(), ), - }); + } + .into(); p.function.body = Some(BlockStmt { span: DUMMY_SP, @@ -947,7 +955,7 @@ impl VisitMut for Decorator2022_03 { }); } MethodKind::Setter => { - let call_stmt = Stmt::Return(ReturnStmt { + let call_stmt = ReturnStmt { span: DUMMY_SP, arg: Some( CallExpr { @@ -962,7 +970,8 @@ impl VisitMut for Decorator2022_03 { } .into(), ), - }); + } + .into(); p.function.body = Some(BlockStmt { span: DUMMY_SP, @@ -1583,26 +1592,26 @@ impl VisitMut for Decorator2022_03 { if !self.extra_lets.is_empty() { insert_builder.push_back( index, - Stmt::Decl( - VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Let, - decls: self.extra_lets.take(), - declare: false, - ..Default::default() - } - .into(), - ) + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Let, + decls: self.extra_lets.take(), + declare: false, + ..Default::default() + } + .into() + .into() .into(), ); } if !self.pre_class_inits.is_empty() { insert_builder.push_back( index, - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr: Expr::from_exprs(self.pre_class_inits.take()), - }) + } + .into() .into(), ); } @@ -1790,25 +1799,25 @@ impl VisitMut for Decorator2022_03 { if !self.extra_lets.is_empty() { insert_builder.push_back( index, - Stmt::Decl( - VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Let, - decls: self.extra_lets.take(), - declare: false, - ..Default::default() - } - .into(), - ), + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Let, + decls: self.extra_lets.take(), + declare: false, + ..Default::default() + } + .into() + .into(), ); } if !self.pre_class_inits.is_empty() { insert_builder.push_back( index, - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr: Expr::from_exprs(self.pre_class_inits.take()), - }), + } + .into(), ); } } diff --git a/crates/swc_ecma_transforms_proposal/src/decorators/legacy/mod.rs b/crates/swc_ecma_transforms_proposal/src/decorators/legacy/mod.rs index b5b434cc3f5b..401dc12a3131 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorators/legacy/mod.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorators/legacy/mod.rs @@ -81,10 +81,11 @@ impl TscDecorator { self.prepended_exprs .drain(..) .map(|expr| { - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr, - }) + } + .into() }) .map(T::from_stmt), ); @@ -95,10 +96,11 @@ impl TscDecorator { self.appended_exprs .drain(..) .map(|expr| { - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr, - }) + } + .into() }) .map(T::from_stmt), ); diff --git a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs index 2582565a1eca..39e2ce371d85 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs @@ -587,7 +587,7 @@ impl Decorators { None } .into_iter() - .chain(iter::once(Stmt::Decl( + .chain(iter::once( ClassDecl { ident: ident.clone(), class: Class { @@ -598,34 +598,38 @@ impl Decorators { .into(), declare: false, } + .into() .into(), - ))) - .chain(iter::once(Stmt::Return(ReturnStmt { - span: DUMMY_SP, - arg: Some( - ObjectLit { - span: DUMMY_SP, - props: vec![ - PropOrSpread::Prop(Box::new(Prop::KeyValue( - KeyValueProp { - key: PropName::Ident(quote_ident!("F")), - value: Box::new(Expr::Ident(ident)), - }, - ))), - PropOrSpread::Prop(Box::new(Prop::KeyValue( - KeyValueProp { - key: PropName::Ident(quote_ident!("d")), - value: Box::new(Expr::Array(ArrayLit { - span: DUMMY_SP, - elems: descriptors, - })), - }, - ))), - ], - } - .into(), - ), - }))) + )) + .chain(iter::once( + ReturnStmt { + span: DUMMY_SP, + arg: Some( + ObjectLit { + span: DUMMY_SP, + props: vec![ + PropOrSpread::Prop(Box::new(Prop::KeyValue( + KeyValueProp { + key: PropName::Ident(quote_ident!("F")), + value: Box::new(Expr::Ident(ident)), + }, + ))), + PropOrSpread::Prop(Box::new(Prop::KeyValue( + KeyValueProp { + key: PropName::Ident(quote_ident!("d")), + value: Box::new(Expr::Array(ArrayLit { + span: DUMMY_SP, + elems: descriptors, + })), + }, + ))), + ], + } + .into(), + ), + } + .into(), + )) .collect(), ..Default::default() }), diff --git a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs index 45614c146515..d59583b19998 100644 --- a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs +++ b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs @@ -75,7 +75,7 @@ impl ExplicitResourceManagement { definite: Default::default(), }; - try_body.push(Stmt::Decl( + try_body.push( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -83,8 +83,9 @@ impl ExplicitResourceManagement { decls: vec![using_ctx_var], ..Default::default() } + .into() .into(), - )); + ); for stmt in stmts.take() { match stmt.try_into_stmt() { @@ -93,7 +94,7 @@ impl ExplicitResourceManagement { } Ok(Stmt::Decl(Decl::Var(var))) => { // var.kind = VarDeclKind::Var; - try_body.push(Stmt::Decl(var.into())); + try_body.push(var.into().into()); } Ok(stmt) => try_body.push(stmt), Err(stmt) => match stmt.try_into_module_decl() { @@ -125,7 +126,7 @@ impl ExplicitResourceManagement { })) .unwrap(), ); - try_body.push(Stmt::Decl( + try_body.push( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -141,8 +142,9 @@ impl ExplicitResourceManagement { }], ..Default::default() } + .into() .into(), - )); + ); } Ok(ModuleDecl::ExportDefaultExpr(decl)) => { @@ -167,7 +169,7 @@ impl ExplicitResourceManagement { })) .unwrap(), ); - try_body.push(Stmt::Decl( + try_body.push( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -180,8 +182,9 @@ impl ExplicitResourceManagement { }], ..Default::default() } + .into() .into(), - )); + ); } Ok(ModuleDecl::ExportDecl(e)) => { @@ -197,7 +200,7 @@ impl ExplicitResourceManagement { definite: Default::default(), }; - new.push(T::from_stmt(Stmt::Decl( + new.push(T::from_stmt( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -205,20 +208,24 @@ impl ExplicitResourceManagement { decls: vec![var], ..Default::default() } + .into() .into(), - ))); + )); - try_body.push(Stmt::Decl(e.decl)); - try_body.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: AssignExpr { + try_body.push(e.decl.into()); + try_body.push( + ExprStmt { span: DUMMY_SP, - op: op!("="), - left: var_name.clone().into(), - right: ident.clone().into(), + expr: AssignExpr { + span: DUMMY_SP, + op: op!("="), + left: var_name.clone().into(), + right: ident.clone().into(), + } + .into(), } .into(), - })); + ); let specifier = ExportSpecifier::Named(ExportNamedSpecifier { span: DUMMY_SP, @@ -257,7 +264,7 @@ impl ExplicitResourceManagement { }) .collect(); - new.push(T::from_stmt(Stmt::Decl( + new.push(T::from_stmt( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -265,28 +272,32 @@ impl ExplicitResourceManagement { decls: var_decls, ..Default::default() } + .into() .into(), - ))); + )); - try_body.push(Stmt::Decl(e.decl)); - try_body.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: Expr::from_exprs( - orig_var_names - .iter() - .zip(var_names.iter()) - .map(|(orig, var_name)| { - AssignExpr { - span: DUMMY_SP, - op: op!("="), - left: var_name.clone().into(), - right: orig.clone().into(), - } - .into() - }) - .collect(), - ), - })); + try_body.push(e.decl.into()); + try_body.push( + ExprStmt { + span: DUMMY_SP, + expr: Expr::from_exprs( + orig_var_names + .iter() + .zip(var_names.iter()) + .map(|(orig, var_name)| { + AssignExpr { + span: DUMMY_SP, + op: op!("="), + left: var_name.clone().into(), + right: orig.clone().into(), + } + .into() + }) + .collect(), + ), + } + .into(), + ); let specifiers = orig_var_names .iter() .zip(var_names.iter()) @@ -416,11 +427,14 @@ impl VisitMut for ExplicitResourceManagement { let mut body = vec![*n.body.take()]; self.wrap_with_try(state, &mut body); - n.body = Box::new(Stmt::Block(BlockStmt { - span: DUMMY_SP, - stmts: body, - ..Default::default() - })) + n.body = Box::new( + BlockStmt { + span: DUMMY_SP, + stmts: body, + ..Default::default() + } + .into(), + ) } } @@ -436,45 +450,44 @@ impl VisitMut for ExplicitResourceManagement { state.has_await |= decl.is_await; - *s = Stmt::Decl( - VarDecl { - span: DUMMY_SP, - kind: if self.is_not_top_level { - VarDeclKind::Const - } else { - VarDeclKind::Var - }, - declare: Default::default(), - decls: decl - .decls - .take() - .into_iter() - .map(|d| { - let init = CallExpr { - span: decl.span, - callee: state - .using_ctx - .clone() - .make_member(if decl.is_await { - quote_ident!("a") - } else { - quote_ident!("u") - }) - .as_callee(), - args: vec![d.init.unwrap().as_arg()], - ..Default::default() - }; + *s = VarDecl { + span: DUMMY_SP, + kind: if self.is_not_top_level { + VarDeclKind::Const + } else { + VarDeclKind::Var + }, + declare: Default::default(), + decls: decl + .decls + .take() + .into_iter() + .map(|d| { + let init = CallExpr { + span: decl.span, + callee: state + .using_ctx + .clone() + .make_member(if decl.is_await { + quote_ident!("a") + } else { + quote_ident!("u") + }) + .as_callee(), + args: vec![d.init.unwrap().as_arg()], + ..Default::default() + }; - VarDeclarator { - init: Some(init.into()), - ..d - } - }) - .collect(), - ..Default::default() - } - .into(), - ); + VarDeclarator { + init: Some(init.into()), + ..d + } + }) + .collect(), + ..Default::default() + } + .into() + .into(); } } diff --git a/crates/swc_ecma_transforms_react/src/jsx/mod.rs b/crates/swc_ecma_transforms_react/src/jsx/mod.rs index 25df23584496..465a98c95c1c 100644 --- a/crates/swc_ecma_transforms_react/src/jsx/mod.rs +++ b/crates/swc_ecma_transforms_react/src/jsx/mod.rs @@ -1139,60 +1139,59 @@ where // const { createElement } = require('react') // const { jsx: jsx } = require('react/jsx-runtime') fn add_require(imports: Vec<(Ident, IdentName)>, src: &str, unresolved_mark: Mark) -> Stmt { - Stmt::Decl( - VarDecl { + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Const, + declare: false, + decls: vec![VarDeclarator { span: DUMMY_SP, - kind: VarDeclKind::Const, - declare: false, - decls: vec![VarDeclarator { + name: Pat::Object(ObjectPat { span: DUMMY_SP, - name: Pat::Object(ObjectPat { - span: DUMMY_SP, - props: imports - .into_iter() - .map(|(local, imported)| { - if imported.sym != local.sym { - ObjectPatProp::KeyValue(KeyValuePatProp { - key: PropName::Ident(imported), - value: Box::new(Pat::Ident(local.into())), - }) - } else { - ObjectPatProp::Assign(AssignPatProp { - span: DUMMY_SP, - key: local.into(), - value: None, - }) - } - }) - .collect(), + props: imports + .into_iter() + .map(|(local, imported)| { + if imported.sym != local.sym { + ObjectPatProp::KeyValue(KeyValuePatProp { + key: PropName::Ident(imported), + value: Box::new(Pat::Ident(local.into())), + }) + } else { + ObjectPatProp::Assign(AssignPatProp { + span: DUMMY_SP, + key: local.into(), + value: None, + }) + } + }) + .collect(), + optional: false, + type_ann: None, + }), + // require('react') + init: Some(Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: Callee::Expr(Box::new(Expr::Ident(Ident { + ctxt: SyntaxContext::empty().apply_mark(unresolved_mark), + sym: "require".into(), optional: false, - type_ann: None, - }), - // require('react') - init: Some(Box::new(Expr::Call(CallExpr { - span: DUMMY_SP, - callee: Callee::Expr(Box::new(Expr::Ident(Ident { - ctxt: SyntaxContext::empty().apply_mark(unresolved_mark), - sym: "require".into(), - optional: false, - ..Default::default() - }))), - args: vec![ExprOrSpread { - spread: None, - expr: Box::new(Expr::Lit(Lit::Str(Str { - span: DUMMY_SP, - value: src.into(), - raw: None, - }))), - }], ..Default::default() }))), - definite: false, - }], - ..Default::default() - } - .into(), - ) + args: vec![ExprOrSpread { + spread: None, + expr: Box::new(Expr::Lit(Lit::Str(Str { + span: DUMMY_SP, + value: src.into(), + raw: None, + }))), + }], + ..Default::default() + }))), + definite: false, + }], + ..Default::default() + } + .into() + .into() } impl Jsx diff --git a/crates/swc_ecma_transforms_react/src/refresh/hook.rs b/crates/swc_ecma_transforms_react/src/refresh/hook.rs index 9c5cca7ece47..19e528cb6e27 100644 --- a/crates/swc_ecma_transforms_react/src/refresh/hook.rs +++ b/crates/swc_ecma_transforms_react/src/refresh/hook.rs @@ -196,10 +196,13 @@ impl<'a> HookRegister<'a> { fn gen_hook_register_stmt(&mut self, ident: Ident, sig: HookSig) { self.ident.push(sig.handle.clone()); - self.extra_stmt.push(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: Box::new(self.wrap_with_register(sig.handle, ident.into(), sig.hooks)), - })) + self.extra_stmt.push( + ExprStmt { + span: DUMMY_SP, + expr: Box::new(self.wrap_with_register(sig.handle, ident.into(), sig.hooks)), + } + .into(), + ) } } diff --git a/crates/swc_ecma_transforms_react/src/refresh/mod.rs b/crates/swc_ecma_transforms_react/src/refresh/mod.rs index 025da190a038..4c27723a8e93 100644 --- a/crates/swc_ecma_transforms_react/src/refresh/mod.rs +++ b/crates/swc_ecma_transforms_react/src/refresh/mod.rs @@ -400,23 +400,32 @@ impl VisitMut for Refresh { refresh_regs.push((registration_handle.clone(), persistent_id.to_id())); - items.push(ModuleItem::Stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: Box::new(make_assign_stmt(registration_handle, persistent_id.into())), - }))); + items.push(ModuleItem::Stmt( + ExprStmt { + span: DUMMY_SP, + expr: Box::new(make_assign_stmt( + registration_handle, + persistent_id.into(), + )), + } + .into(), + )); } Persist::Hoc(mut hoc) => { hoc.reg = hoc.reg.into_iter().rev().collect(); if hoc.insert { let (ident, name) = hoc.reg.last().unwrap(); - items.push(ModuleItem::Stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: Box::new(make_assign_stmt( - ident.clone(), - Ident::new(name.0.clone(), DUMMY_SP, name.1).into(), - )), - }))) + items.push(ModuleItem::Stmt( + ExprStmt { + span: DUMMY_SP, + expr: Box::new(make_assign_stmt( + ident.clone(), + Ident::new(name.0.clone(), DUMMY_SP, name.1).into(), + )), + } + .into(), + )) } refresh_regs.append(&mut hoc.reg); } @@ -459,15 +468,18 @@ impl VisitMut for Refresh { // ``` let refresh_reg = self.options.refresh_reg.as_str(); for (handle, persistent_id) in refresh_regs { - items.push(ModuleItem::Stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: CallExpr { - callee: quote_ident!(refresh_reg).as_callee(), - args: vec![handle.as_arg(), quote_str!(persistent_id.0).as_arg()], - ..Default::default() + items.push(ModuleItem::Stmt( + ExprStmt { + span: DUMMY_SP, + expr: CallExpr { + callee: quote_ident!(refresh_reg).as_callee(), + args: vec![handle.as_arg(), quote_str!(persistent_id.0).as_arg()], + ..Default::default() + } + .into(), } .into(), - }))); + )); } *module_items = items diff --git a/crates/swc_ecma_transforms_react/src/refresh/util.rs b/crates/swc_ecma_transforms_react/src/refresh/util.rs index 68b8507b36b5..ebc93354d8de 100644 --- a/crates/swc_ecma_transforms_react/src/refresh/util.rs +++ b/crates/swc_ecma_transforms_react/src/refresh/util.rs @@ -52,10 +52,11 @@ pub fn make_assign_stmt(handle: Ident, expr: Box) -> Expr { } pub fn make_call_stmt(handle: Ident) -> Stmt { - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr: Box::new(make_call_expr(handle)), - }) + } + .into() } pub fn make_call_expr(handle: Ident) -> Expr { diff --git a/crates/swc_ecma_transforms_testing/src/lib.rs b/crates/swc_ecma_transforms_testing/src/lib.rs index 2906f9d24af4..38a53f3ebd2d 100644 --- a/crates/swc_ecma_transforms_testing/src/lib.rs +++ b/crates/swc_ecma_transforms_testing/src/lib.rs @@ -236,7 +236,7 @@ impl VisitMut for RegeneratorHandler { init: Some(init), definite: Default::default(), }; - *item = ModuleItem::Stmt(Stmt::Decl( + *item = ModuleItem::Stmt( VarDecl { span: import.span, kind: VarDeclKind::Var, @@ -244,8 +244,9 @@ impl VisitMut for RegeneratorHandler { decls: vec![decl], ..Default::default() } + .into() .into(), - )) + ) } } } diff --git a/crates/swc_ecma_transforms_typescript/src/transform.rs b/crates/swc_ecma_transforms_typescript/src/transform.rs index e4930f694a30..beab859496a7 100644 --- a/crates/swc_ecma_transforms_typescript/src/transform.rs +++ b/crates/swc_ecma_transforms_typescript/src/transform.rs @@ -404,10 +404,11 @@ impl Transform { let expr = Self::wrap_enum_or_module_with_iife(&self.namespace_id, module_ident, body, is_export); - Stmt::Expr(ExprStmt { + ExprStmt { span, expr: expr.into(), - }) + } + .into() } fn transform_ts_namespace_body(id: Id, body: TsNamespaceBody) -> BlockStmt { @@ -484,7 +485,7 @@ impl Transform { var_decl.span = decl.span; - Stmt::Decl(var_decl.into()) + var_decl.into().into() }; stmts.push(stmt); @@ -605,10 +606,11 @@ impl Transform { is_export, ); - Stmt::Expr(ExprStmt { + ExprStmt { span, expr: expr.into(), - }) + } + .into() } fn transform_ts_enum_member( @@ -671,7 +673,7 @@ impl Transform { match decl { Decl::Fn(FnDecl { ref ident, .. }) | Decl::Class(ClassDecl { ref ident, .. }) => { let assign_stmt = Self::assign_prop(id, ident, span); - [Stmt::Decl(decl), assign_stmt].map(Option::Some) + [decl.into(), assign_stmt].map(Option::Some) } Decl::Var(var_decl) => [ Self::transform_export_var_decl_in_ts_module_block( @@ -718,7 +720,7 @@ impl Transform { .into() }; - Some(Stmt::Expr(ExprStmt { span, expr })) + Some(ExprStmt { span, expr }.into()) } } @@ -833,10 +835,11 @@ impl Transform { .clone() .make_assign_to(op!("="), id.clone().make_member(prop.clone().into()).into()); - Stmt::Expr(ExprStmt { + ExprStmt { span, expr: expr.into(), - }) + } + .into() } fn add_var_for_enum_or_module_declaration( @@ -1073,7 +1076,7 @@ impl Transform { .into() } else { var_decl.span = decl.span; - Stmt::Decl(var_decl.into()).into() + var_decl.into().into().into() }; n.push(module_item); } @@ -1124,21 +1127,20 @@ impl Transform { }) .into(), // const __require = _createRequire(import.meta.url); - Stmt::Decl( - create_require - .as_call( - DUMMY_SP, - vec![MetaPropExpr { - span: DUMMY_SP, - kind: MetaPropKind::ImportMeta, - } - .make_member(quote_ident!("url")) - .as_arg()], - ) - .into_var_decl(VarDeclKind::Const, require.clone().into()) - .into(), - ) - .into(), + create_require + .as_call( + DUMMY_SP, + vec![MetaPropExpr { + span: DUMMY_SP, + kind: MetaPropKind::ImportMeta, + } + .make_member(quote_ident!("url")) + .as_arg()], + ) + .into_var_decl(VarDeclKind::Const, require.clone().into()) + .into() + .into() + .into(), ]); } @@ -1148,7 +1150,7 @@ impl Transform { let TsExportAssignment { expr, span } = cjs_export_assign; n.push( - Stmt::Expr(ExprStmt { + ExprStmt { span, expr: Box::new( expr.make_assign_to( @@ -1161,7 +1163,8 @@ impl Transform { .into(), ), ), - }) + } + .into() .into(), ); } diff --git a/crates/swc_ecma_utils/src/constructor.rs b/crates/swc_ecma_utils/src/constructor.rs index c076dea55534..4a7f04938767 100644 --- a/crates/swc_ecma_utils/src/constructor.rs +++ b/crates/swc_ecma_utils/src/constructor.rs @@ -88,20 +88,19 @@ impl<'a> Fold for Injector<'a> { self.injected |= folder.injected; buf.extend(folder.injected_tmp.map(|ident| { - Stmt::Decl( - VarDecl { + VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Var, + decls: vec![VarDeclarator { span: DUMMY_SP, - kind: VarDeclKind::Var, - decls: vec![VarDeclarator { - span: DUMMY_SP, - name: Pat::Ident(ident.into()), - init: None, - definite: false, - }], - ..Default::default() - } - .into(), - ) + name: Pat::Ident(ident.into()), + init: None, + definite: false, + }], + ..Default::default() + } + .into() + .into() })); buf.push(stmt); } diff --git a/crates/swc_ecma_utils/src/factory.rs b/crates/swc_ecma_utils/src/factory.rs index b62bbc7a9c11..494702b6607c 100644 --- a/crates/swc_ecma_utils/src/factory.rs +++ b/crates/swc_ecma_utils/src/factory.rs @@ -45,10 +45,11 @@ pub trait ExprFactory: Into> { /// Creates an expression statement with `self`. #[cfg_attr(not(debug_assertions), inline(always))] fn into_stmt(self) -> Stmt { - Stmt::Expr(ExprStmt { + ExprStmt { span: DUMMY_SP, expr: self.into(), - }) + } + .into() } /// Creates a statement whcih return `self`. diff --git a/crates/swc_ecma_utils/src/function/fn_env_hoister.rs b/crates/swc_ecma_utils/src/function/fn_env_hoister.rs index 250ab620b513..ab2d30adaf50 100644 --- a/crates/swc_ecma_utils/src/function/fn_env_hoister.rs +++ b/crates/swc_ecma_utils/src/function/fn_env_hoister.rs @@ -123,14 +123,15 @@ impl FnEnvHoister { if decls.is_empty() { None } else { - Some(Stmt::Decl( + Some( VarDecl { kind: VarDeclKind::Var, decls, ..Default::default() } + .into() .into(), - )) + ) } } @@ -183,14 +184,15 @@ impl FnEnvHoister { (None, None) } else { ( - Some(Stmt::Decl( + Some( VarDecl { kind: VarDeclKind::Var, decls, ..Default::default() } + .into() .into(), - )), + ), this, ) } @@ -297,24 +299,23 @@ impl VisitMut for FnEnvHoister { if !self.extra_ident.is_empty() { b.stmts.insert( 0, - Stmt::Decl( - VarDecl { - kind: VarDeclKind::Var, - decls: self - .extra_ident - .take() - .into_iter() - .map(|ident| VarDeclarator { - span: DUMMY_SP, - name: ident.into(), - init: None, - definite: false, - }) - .collect(), - ..Default::default() - } - .into(), - ), + VarDecl { + kind: VarDeclKind::Var, + decls: self + .extra_ident + .take() + .into_iter() + .map(|ident| VarDeclarator { + span: DUMMY_SP, + name: ident.into(), + init: None, + definite: false, + }) + .collect(), + ..Default::default() + } + .into() + .into(), ) } } diff --git a/crates/swc_ecma_utils/src/function/function_wrapper.rs b/crates/swc_ecma_utils/src/function/function_wrapper.rs index 827c3ffd65e1..6b7ead3fe814 100644 --- a/crates/swc_ecma_utils/src/function/function_wrapper.rs +++ b/crates/swc_ecma_utils/src/function/function_wrapper.rs @@ -112,38 +112,37 @@ impl FunctionWrapper { |ident| private_ident!(ident.span, format!("_{}", ident.sym)), ); - let ref_stmt: Stmt = Stmt::Decl( - VarDecl { - kind: VarDeclKind::Var, - decls: vec![VarDeclarator { - span: DUMMY_SP, - name: Pat::Ident(ref_ident.clone().into()), - init: Some(Box::new(self.function.take())), - definite: false, - }], + let ref_stmt: Stmt = VarDecl { + kind: VarDeclKind::Var, + decls: vec![VarDeclarator { + span: DUMMY_SP, + name: Pat::Ident(ref_ident.clone().into()), + init: Some(Box::new(self.function.take())), + definite: false, + }], - ..Default::default() - } - .into(), - ); + ..Default::default() + } + .into() + .into(); let fn_decl_stmt = { let FnExpr { function, .. } = self.build_function_forward(ref_ident, None); - Stmt::Decl( - FnDecl { - ident: name_ident.clone(), - declare: false, - function, - } - .into(), - ) + FnDecl { + ident: name_ident.clone(), + declare: false, + function, + } + .into() + .into() }; - let return_stmt = Stmt::Return(ReturnStmt { + let return_stmt = ReturnStmt { span: DUMMY_SP, arg: Some(Box::new(name_ident.into())), - }); + } + .into(); let block_stmt = BlockStmt { stmts: vec![ref_stmt, fn_decl_stmt, return_stmt], @@ -231,14 +230,15 @@ impl FunctionWrapper { /// } /// ``` fn build_function_forward(&mut self, ref_ident: Ident, name_ident: Option) -> FnExpr { - let apply = Stmt::Return(ReturnStmt { + let apply = ReturnStmt { span: DUMMY_SP, arg: Some(Box::new(ref_ident.apply( DUMMY_SP, ThisExpr { span: DUMMY_SP }.into(), vec![quote_ident!("arguments").as_arg()], ))), - }); + } + .into(); FnExpr { ident: name_ident, diff --git a/crates/swc_estree_compat/src/swcify/stmt.rs b/crates/swc_estree_compat/src/swcify/stmt.rs index 229c567a5c77..f9b77883a229 100644 --- a/crates/swc_estree_compat/src/swcify/stmt.rs +++ b/crates/swc_estree_compat/src/swcify/stmt.rs @@ -78,15 +78,15 @@ impl Swcify for Statement { Statement::ImportDecl(v) => { return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) } - Statement::DeclClass(v) => Stmt::Decl(v.swcify(ctx).into()), - Statement::DeclFunc(v) => Stmt::Decl(v.swcify(ctx).into()), - Statement::DeclInterface(v) => Stmt::Decl(v.swcify(ctx).into()), - Statement::DeclModule(v) => Stmt::Decl(v.swcify(ctx).into()), + Statement::DeclClass(v) => v.swcify(ctx).into().into(), + Statement::DeclFunc(v) => v.swcify(ctx).into().into(), + Statement::DeclInterface(v) => v.swcify(ctx).into().into(), + Statement::DeclModule(v) => v.swcify(ctx).into().into(), Statement::DeclareModuleExports(v) => { return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) } - Statement::DeclTypeAlias(v) => Stmt::Decl(v.swcify(ctx).into()), - Statement::DeclVar(v) => Stmt::Decl(v.swcify(ctx).into()), + Statement::DeclTypeAlias(v) => v.swcify(ctx).into().into(), + Statement::DeclVar(v) => v.swcify(ctx).into().into(), Statement::DeclExportDeclaration(v) => { return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) } diff --git a/crates/swc_node_bundler/src/loaders/json.rs b/crates/swc_node_bundler/src/loaders/json.rs index d9e6c3e0022b..279382675fcd 100644 --- a/crates/swc_node_bundler/src/loaders/json.rs +++ b/crates/swc_node_bundler/src/loaders/json.rs @@ -9,21 +9,24 @@ pub(super) fn load_json_as_module(fm: &Arc) -> Result let expr = parse_file_as_expr(fm, Syntax::default(), EsVersion::Es2020, None, &mut vec![]) .map_err(|err| anyhow!("failed parse json as javascript object: {:#?}", err))?; - let export = ModuleItem::Stmt(Stmt::Expr(ExprStmt { - span: DUMMY_SP, - expr: AssignExpr { + let export = ModuleItem::Stmt( + ExprStmt { span: DUMMY_SP, - op: op!("="), - left: MemberExpr { + expr: AssignExpr { span: DUMMY_SP, - obj: Box::new(Ident::new_no_ctxt("module".into(), DUMMY_SP).into()), - prop: MemberProp::Ident(IdentName::new("exports".into(), DUMMY_SP)), + op: op!("="), + left: MemberExpr { + span: DUMMY_SP, + obj: Box::new(Ident::new_no_ctxt("module".into(), DUMMY_SP).into()), + prop: MemberProp::Ident(IdentName::new("exports".into(), DUMMY_SP)), + } + .into(), + right: expr, } .into(), - right: expr, } .into(), - })); + ); Ok(Module { span: DUMMY_SP, diff --git a/crates/swc_typescript/src/fast_dts/mod.rs b/crates/swc_typescript/src/fast_dts/mod.rs index a8828b3483eb..75e601a842c8 100644 --- a/crates/swc_typescript/src/fast_dts/mod.rs +++ b/crates/swc_typescript/src/fast_dts/mod.rs @@ -175,7 +175,7 @@ impl FastDts { .map(type_ann); if let Some(type_ann) = type_ann { - new_items.push(ModuleItem::Stmt(Stmt::Decl( + new_items.push(ModuleItem::Stmt( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Const, @@ -192,8 +192,9 @@ impl FastDts { }], ..Default::default() } + .into() .into(), - ))); + )); new_items.push(ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultExpr( ExportDefaultExpr { From cc6298133915b8ff0159ab99e4c50f1135035a8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 15:51:10 +0900 Subject: [PATCH 05/33] `ModuleDecl::$VARIANT($ARG)` --- .../src/bundler/chunk/computed_key.rs | 35 +++--- crates/swc_bundler/src/bundler/chunk/merge.rs | 40 ++++--- crates/swc_ecma_ast/src/module_decl.rs | 2 +- .../swc_ecma_compat_es2015/src/classes/mod.rs | 14 +-- .../swc_ecma_compat_es2018/src/object_rest.rs | 2 +- .../src/export_namespace_from.rs | 33 +++--- .../src/class_properties/mod.rs | 14 +-- .../src/pass/merge_exports.rs | 14 +-- .../src/pass/postcompress.rs | 20 ++-- .../src/parser/stmt/module_item.rs | 84 +++++++++------ crates/swc_ecma_preset_env/src/lib.rs | 50 +++++---- .../src/rename/ops.rs | 69 ++++++------ .../src/const_modules.rs | 2 +- .../src/decorator_2022_03.rs | 17 +-- .../src/decorators/mod.rs | 9 +- .../src/explicit_resource_management.rs | 102 ++++++++++-------- .../src/export_default_from.rs | 14 +-- .../swc_ecma_transforms_react/src/jsx/mod.rs | 23 ++-- .../src/refresh/mod.rs | 7 +- .../src/transform.rs | 17 +-- crates/swc_estree_compat/src/swcify/stmt.rs | 18 ++-- crates/swc_typescript/src/fast_dts/mod.rs | 21 ++-- 22 files changed, 339 insertions(+), 268 deletions(-) diff --git a/crates/swc_bundler/src/bundler/chunk/computed_key.rs b/crates/swc_bundler/src/bundler/chunk/computed_key.rs index 6b284cebde7d..8e881b6a81ee 100644 --- a/crates/swc_bundler/src/bundler/chunk/computed_key.rs +++ b/crates/swc_bundler/src/bundler/chunk/computed_key.rs @@ -82,19 +82,22 @@ where }); additional_items.push(( module_id, - ModuleItem::ModuleDecl(ModuleDecl::ExportNamed(NamedExport { - span: DUMMY_SP, - specifiers: vec![specifier], - src: None, - type_only: false, - with: Some( - ExportMetadata { - injected: true, - ..Default::default() - } - .into_with(), - ), - })), + ModuleItem::ModuleDecl( + NamedExport { + span: DUMMY_SP, + specifiers: vec![specifier], + src: None, + type_only: false, + with: Some( + ExportMetadata { + injected: true, + ..Default::default() + } + .into_with(), + ), + } + .into(), + ), )); } } @@ -289,9 +292,7 @@ impl Fold for ExportToReturn { DefaultDecl::TsInterfaceDecl(_) => None, }, ModuleDecl::ExportDefaultExpr(_) => None, - ModuleDecl::ExportAll(export) => { - return ModuleItem::ModuleDecl(ModuleDecl::ExportAll(export)) - } + ModuleDecl::ExportAll(export) => return ModuleItem::ModuleDecl(export.into()), ModuleDecl::ExportNamed(export) => { for specifier in &export.specifiers { match specifier { @@ -328,7 +329,7 @@ impl Fold for ExportToReturn { { None } else { - return ModuleItem::ModuleDecl(ModuleDecl::ExportNamed(export)); + return ModuleItem::ModuleDecl(export.into()); } } ModuleDecl::TsImportEquals(_) => None, diff --git a/crates/swc_bundler/src/bundler/chunk/merge.rs b/crates/swc_bundler/src/bundler/chunk/merge.rs index 1a918566eac0..0e0cfa4bf65c 100644 --- a/crates/swc_bundler/src/bundler/chunk/merge.rs +++ b/crates/swc_bundler/src/bundler/chunk/merge.rs @@ -578,7 +578,7 @@ where ModuleItem::ModuleDecl(ModuleDecl::Import(mut import)) => { // Preserve imports from node.js builtin modules. if self.config.external_modules.contains(&import.src.value) { - new.push(ModuleItem::ModuleDecl(ModuleDecl::Import(import))); + new.push(ModuleItem::ModuleDecl(import.into())); continue; } @@ -589,7 +589,7 @@ where .find(|s| s.0.src.value == import.src.value) { if !self.scope.get_module(src.module_id).unwrap().is_es6 { - new.push(ModuleItem::ModuleDecl(ModuleDecl::Import(import))); + new.push(ModuleItem::ModuleDecl(import.into())); continue; } } @@ -661,7 +661,7 @@ where } import.specifiers.clear(); - new.push(ModuleItem::ModuleDecl(ModuleDecl::Import(import))); + new.push(ModuleItem::ModuleDecl(import.into())); } ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultDecl(export)) => { // At here, we create multiple items. @@ -772,7 +772,7 @@ where exported: Some(ModuleExportName::Ident(exported)), is_type_only: false, }); - extra.push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( + extra.push(ModuleItem::ModuleDecl( NamedExport { span: export.span, specifiers: vec![specifier], @@ -785,8 +785,9 @@ where } .into_with(), ), - }, - ))); + } + .into(), + )); } ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultExpr(export)) => { @@ -824,7 +825,7 @@ where is_type_only: false, }); tracing::trace!("Exporting `default` with `export default expr`"); - extra.push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( + extra.push(ModuleItem::ModuleDecl( NamedExport { span: export.span, specifiers: vec![specifier], @@ -837,8 +838,9 @@ where } .into_with(), ), - }, - ))); + } + .into(), + )); } ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(export)) => { @@ -864,8 +866,8 @@ where new.push(ModuleItem::Stmt(v.into().into())); - let export = - ModuleItem::ModuleDecl(ModuleDecl::ExportNamed(NamedExport { + let export = ModuleItem::ModuleDecl( + NamedExport { span: export.span, specifiers: ids .into_iter() @@ -911,7 +913,9 @@ where } .into_with(), ), - })); + } + .into(), + ); extra.push(export); continue; } @@ -946,7 +950,7 @@ where is_type_only: false, }); - extra.push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( + extra.push(ModuleItem::ModuleDecl( NamedExport { span: export.span, specifiers: vec![specifier], @@ -959,8 +963,9 @@ where } .into_with(), ), - }, - ))); + } + .into(), + )); } ModuleItem::ModuleDecl(ModuleDecl::ExportNamed(NamedExport { @@ -1172,13 +1177,14 @@ where }, ); extra.push(ModuleItem::ModuleDecl( - ModuleDecl::ExportNamed(NamedExport { + NamedExport { span: ns.span, specifiers: vec![specifier], src: None, with: None, type_only: false, - }), + } + .into(), )); } None => { diff --git a/crates/swc_ecma_ast/src/module_decl.rs b/crates/swc_ecma_ast/src/module_decl.rs index 076ce6711e14..383cf802c420 100644 --- a/crates/swc_ecma_ast/src/module_decl.rs +++ b/crates/swc_ecma_ast/src/module_decl.rs @@ -45,7 +45,7 @@ pub enum ModuleDecl { impl Take for ModuleDecl { fn dummy() -> Self { - ModuleDecl::Import(ImportDecl::dummy()) + ImportDecl::dummy().into() } } diff --git a/crates/swc_ecma_compat_es2015/src/classes/mod.rs b/crates/swc_ecma_compat_es2015/src/classes/mod.rs index 481610817238..5c8d4b3a455a 100644 --- a/crates/swc_ecma_compat_es2015/src/classes/mod.rs +++ b/crates/swc_ecma_compat_es2015/src/classes/mod.rs @@ -141,7 +141,7 @@ where buf.push(T::from_stmt(decl.into())); buf.push( - match T::try_from_module_decl(ModuleDecl::ExportNamed( + match T::try_from_module_decl( NamedExport { span: DUMMY_SP, specifiers: vec![ExportNamedSpecifier { @@ -156,8 +156,9 @@ where src: None, type_only: false, with: None, - }, - )) { + } + .into(), + ) { Ok(t) => t, Err(..) => unreachable!(), }, @@ -176,12 +177,13 @@ where let mut decl = self.fold_class_as_var_decl(ident, class); decl.visit_mut_children_with(self); buf.push( - match T::try_from_module_decl(ModuleDecl::ExportDecl( + match T::try_from_module_decl( ExportDecl { span, decl: decl.into(), - }, - )) { + } + .into(), + ) { Ok(t) => t, Err(..) => unreachable!(), }, diff --git a/crates/swc_ecma_compat_es2018/src/object_rest.rs b/crates/swc_ecma_compat_es2018/src/object_rest.rs index ea958209f03d..11fbb1a68568 100644 --- a/crates/swc_ecma_compat_es2018/src/object_rest.rs +++ b/crates/swc_ecma_compat_es2018/src/object_rest.rs @@ -307,7 +307,7 @@ impl VisitMut for ObjectRest { var_decl.visit_mut_with(self); self.vars.append(&mut var_decl.decls); - *decl = ModuleDecl::ExportNamed(export); + *decl = export.into(); } _ => { decl.visit_mut_children_with(self); diff --git a/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs b/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs index 5cd22d3f4e04..bd6d917ec8b8 100644 --- a/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs +++ b/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs @@ -74,35 +74,40 @@ impl VisitMut for ExportNamespaceFrom { } } - stmts.push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { - span, - specifiers: import_specifiers, - src: src.clone(), - type_only: false, - with: with.clone(), - phase: Default::default(), - }))); + stmts.push(ModuleItem::ModuleDecl( + ImportDecl { + span, + specifiers: import_specifiers, + src: src.clone(), + type_only: false, + with: with.clone(), + phase: Default::default(), + } + .into(), + )); - stmts.push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( + stmts.push(ModuleItem::ModuleDecl( NamedExport { span, specifiers: export_specifiers, src: None, type_only: false, with: None, - }, - ))); + } + .into(), + )); if !origin_specifiers.is_empty() { - stmts.push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( + stmts.push(ModuleItem::ModuleDecl( NamedExport { span, specifiers: origin_specifiers, src: Some(src), type_only: false, with, - }, - ))); + } + .into(), + )); } } _ => { diff --git a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs index 6cd8ef623d4c..f1bd32e1f9e0 100644 --- a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs +++ b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs @@ -363,7 +363,7 @@ impl ClassProperties { extra.merge_with(&mut buf, T::from_stmt(decl.into().into())); buf.push( - match T::try_from_module_decl(ModuleDecl::ExportNamed( + match T::try_from_module_decl( NamedExport { span, specifiers: vec![ExportNamedSpecifier { @@ -378,8 +378,9 @@ impl ClassProperties { src: None, type_only: false, with: None, - }, - )) { + } + .into(), + ) { Ok(t) => t, Err(..) => unreachable!(), }, @@ -398,12 +399,13 @@ impl ClassProperties { let (decl, extra) = self.visit_mut_class_as_decl(ident, class); extra.merge_with( &mut buf, - match T::try_from_module_decl(ModuleDecl::ExportDecl( + match T::try_from_module_decl( ExportDecl { span, decl: decl.into(), - }, - )) { + } + .into(), + ) { Ok(t) => t, Err(..) => unreachable!(), }, diff --git a/crates/swc_ecma_minifier/src/pass/merge_exports.rs b/crates/swc_ecma_minifier/src/pass/merge_exports.rs index 7e9b0bf5c59d..0f094bab175b 100644 --- a/crates/swc_ecma_minifier/src/pass/merge_exports.rs +++ b/crates/swc_ecma_minifier/src/pass/merge_exports.rs @@ -42,28 +42,30 @@ impl VisitMut for Merger { }); if !self.specifiers.is_empty() { - stmts.push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( + stmts.push(ModuleItem::ModuleDecl( NamedExport { src: None, specifiers: self.specifiers.take(), span: DUMMY_SP, type_only: Default::default(), with: Default::default(), - }, - ))); + } + .into(), + )); } // export {}, to preserve module semantics if was_module && stmts.iter().all(|s| matches!(s, ModuleItem::Stmt(..))) { - stmts.push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( + stmts.push(ModuleItem::ModuleDecl( NamedExport { src: None, specifiers: Default::default(), span: DUMMY_SP, type_only: Default::default(), with: Default::default(), - }, - ))); + } + .into(), + )); } } diff --git a/crates/swc_ecma_minifier/src/pass/postcompress.rs b/crates/swc_ecma_minifier/src/pass/postcompress.rs index 16643890c480..7f2941df753f 100644 --- a/crates/swc_ecma_minifier/src/pass/postcompress.rs +++ b/crates/swc_ecma_minifier/src/pass/postcompress.rs @@ -56,31 +56,35 @@ impl VisitMut for PostcompressOptimizer<'_> { Expr::Fn(f) => { if f.ident.is_some() { if self.options.top_level() { - *m = ModuleDecl::ExportDefaultDecl(ExportDefaultDecl { + *m = ExportDefaultDecl { span: e.span, decl: DefaultDecl::Fn(f.take()), - }) + } + .into() } } else { - *m = ModuleDecl::ExportDefaultDecl(ExportDefaultDecl { + *m = ExportDefaultDecl { span: e.span, decl: DefaultDecl::Fn(f.take()), - }) + } + .into() } } Expr::Class(c) => { if c.ident.is_some() { if self.options.top_level() { - *m = ModuleDecl::ExportDefaultDecl(ExportDefaultDecl { + *m = ExportDefaultDecl { span: e.span, decl: DefaultDecl::Class(c.take()), - }) + } + .into() } } else { - *m = ModuleDecl::ExportDefaultDecl(ExportDefaultDecl { + *m = ExportDefaultDecl { span: e.span, decl: DefaultDecl::Class(c.take()), - }) + } + .into() } } _ => (), diff --git a/crates/swc_ecma_parser/src/parser/stmt/module_item.rs b/crates/swc_ecma_parser/src/parser/stmt/module_item.rs index 03964a02b36e..212fbccac60e 100644 --- a/crates/swc_ecma_parser/src/parser/stmt/module_item.rs +++ b/crates/swc_ecma_parser/src/parser/stmt/module_item.rs @@ -68,14 +68,17 @@ impl Parser { None }; expect!(self, ';'); - return Ok(ModuleItem::from(ModuleDecl::Import(ImportDecl { - span: span!(self, start), - src, - specifiers: vec![], - type_only: false, - with, - phase: Default::default(), - }))); + return Ok(ModuleItem::from( + ImportDecl { + span: span!(self, start), + src, + specifiers: vec![], + type_only: false, + with, + phase: Default::default(), + } + .into(), + )); } let mut type_only = false; @@ -194,14 +197,17 @@ impl Parser { expect!(self, ';'); - Ok(ModuleItem::from(ModuleDecl::Import(ImportDecl { - span: span!(self, start), - specifiers, - src, - type_only, - with, - phase, - }))) + Ok(ModuleItem::from( + ImportDecl { + span: span!(self, start), + specifiers, + src, + type_only, + with, + phase, + } + .into(), + )) } /// Parse `foo`, `foo2 as bar` in `import { foo, foo2 as bar }` @@ -369,10 +375,11 @@ impl Parser { if declare { // TODO: Remove if let Some(decl) = self.try_parse_ts_declare(after_export_start, decorators.clone())? { - return Ok(ModuleDecl::ExportDecl(ExportDecl { + return Ok(ExportDecl { span: span!(self, start), decl, - })); + } + .into()); } } @@ -383,10 +390,11 @@ impl Parser { }; // TODO: remove clone if let Some(decl) = self.try_parse_ts_export_decl(decorators.clone(), sym) { - return Ok(ModuleDecl::ExportDecl(ExportDecl { + return Ok(ExportDecl { span: span!(self, start), decl, - })); + } + .into()); } } @@ -490,16 +498,16 @@ impl Parser { if is!(self, "class") { let class_start = cur_pos!(self); let decl = self.parse_default_class(start, class_start, decorators, false)?; - return Ok(ModuleDecl::ExportDefaultDecl(decl)); + return Ok(decl.into()); } else if is!(self, "async") && peeked_is!(self, "function") && !self.input.has_linebreak_between_cur_and_peeked() { let decl = self.parse_default_async_fn(start, decorators)?; - return Ok(ModuleDecl::ExportDefaultDecl(decl)); + return Ok(decl.into()); } else if is!(self, "function") { let decl = self.parse_default_fn(start, decorators)?; - return Ok(ModuleDecl::ExportDefaultDecl(decl)); + return Ok(decl.into()); } else if self.input.syntax().export_default_from() && (is!(self, "from") || (is!(self, ',') && (peeked_is!(self, '{') || peeked_is!(self, '*')))) @@ -508,10 +516,11 @@ impl Parser { } else { let expr = self.include_in_expr(true).parse_assignment_expr()?; expect!(self, ';'); - return Ok(ModuleDecl::ExportDefaultExpr(ExportDefaultExpr { + return Ok(ExportDefaultExpr { span: span!(self, start), expr, - })); + } + .into()); } } @@ -550,10 +559,11 @@ impl Parser { .parse_ts_enum_decl(enum_start, /* is_const */ true) .map(Decl::from) .map(|decl| { - ModuleDecl::ExportDecl(ExportDecl { + ExportDecl { span: span!(self, start), decl, - }) + } + .into() }); } else if !type_only && (is!(self, "var") @@ -598,12 +608,13 @@ impl Parser { // improve error message for `export * from foo` let (src, with) = self.parse_from_clause_and_semi()?; - return Ok(ModuleDecl::ExportAll(ExportAll { + return Ok(ExportAll { span: span!(self, start), src, type_only, with, - })); + } + .into()); } let mut specifiers = vec![]; @@ -645,13 +656,14 @@ impl Parser { if has_default || has_ns { if is!(self, "from") { let (src, with) = self.parse_from_clause_and_semi()?; - return Ok(ModuleDecl::ExportNamed(NamedExport { + return Ok(NamedExport { span: span!(self, start), specifiers, src: Some(src), type_only, with, - })); + } + .into()); } else if !self.input.syntax().export_default_from() { // emit error expect!(self, "from"); @@ -718,19 +730,21 @@ impl Parser { Some(v) => (Some(v.0), v.1), None => (None, None), }; - return Ok(ModuleDecl::ExportNamed(NamedExport { + return Ok(NamedExport { span: span!(self, start), specifiers, src, type_only, with, - })); + } + .into()); }; - Ok(ModuleDecl::ExportDecl(ExportDecl { + Ok(ExportDecl { span: span!(self, start), decl, - })) + } + .into()) } fn parse_named_export_specifier(&mut self, type_only: bool) -> PResult { diff --git a/crates/swc_ecma_preset_env/src/lib.rs b/crates/swc_ecma_preset_env/src/lib.rs index a7e8a3a16db2..0ae686034a8b 100644 --- a/crates/swc_ecma_preset_env/src/lib.rs +++ b/crates/swc_ecma_preset_env/src/lib.rs @@ -461,38 +461,44 @@ impl VisitMut for Polyfills { prepend_stmts( &mut m.body, v.into_iter().map(|src| { - ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { - span, - specifiers: vec![], - src: Str { - span: DUMMY_SP, - raw: None, - value: src, + ModuleItem::ModuleDecl( + ImportDecl { + span, + specifiers: vec![], + src: Str { + span: DUMMY_SP, + raw: None, + value: src, + } + .into(), + type_only: false, + with: None, + phase: Default::default(), } .into(), - type_only: false, - with: None, - phase: Default::default(), - })) + ) }), ); } else { prepend_stmts( &mut m.body, required.into_iter().map(|src| { - ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { - span, - specifiers: vec![], - src: Str { - span: DUMMY_SP, - raw: None, - value: src, + ModuleItem::ModuleDecl( + ImportDecl { + span, + specifiers: vec![], + src: Str { + span: DUMMY_SP, + raw: None, + value: src, + } + .into(), + type_only: false, + with: None, + phase: Default::default(), } .into(), - type_only: false, - with: None, - phase: Default::default(), - })) + ) }), ); } diff --git a/crates/swc_ecma_transforms_base/src/rename/ops.rs b/crates/swc_ecma_transforms_base/src/rename/ops.rs index 489c737c28af..9dd56f3f587c 100644 --- a/crates/swc_ecma_transforms_base/src/rename/ops.rs +++ b/crates/swc_ecma_transforms_base/src/rename/ops.rs @@ -292,15 +292,18 @@ where ); } Err(..) => { - *item = ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl { - span: *span, - decl: ClassDecl { - ident: ident.take(), - class: class.take(), - declare: *declare, + *item = ModuleItem::ModuleDecl( + ExportDecl { + span: *span, + decl: ClassDecl { + ident: ident.take(), + class: class.take(), + declare: *declare, + } + .into(), } .into(), - })) + ) } } } @@ -335,15 +338,18 @@ where ); } Err(..) => { - *item = ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl { - span: *span, - decl: FnDecl { - ident, - function, - declare: *declare, + *item = ModuleItem::ModuleDecl( + ExportDecl { + span: *span, + decl: FnDecl { + ident, + function, + declare: *declare, + } + .into(), } .into(), - })) + ) } } } @@ -364,14 +370,17 @@ where }); if renamed.is_empty() { - *item = ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl { - span, - decl: VarDecl { - decls, - ..*var.take() + *item = ModuleItem::ModuleDecl( + ExportDecl { + span, + decl: VarDecl { + decls, + ..*var.take() + } + .into(), } .into(), - })); + ); return; } *item = ModuleItem::Stmt( @@ -382,16 +391,16 @@ where .into() .into(), ); - self.extra - .push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( - NamedExport { - span, - specifiers: renamed, - src: None, - type_only: false, - with: None, - }, - ))); + self.extra.push(ModuleItem::ModuleDecl( + NamedExport { + span, + specifiers: renamed, + src: None, + type_only: false, + with: None, + } + .into(), + )); } _ => { item.visit_mut_children_with(self); diff --git a/crates/swc_ecma_transforms_optimization/src/const_modules.rs b/crates/swc_ecma_transforms_optimization/src/const_modules.rs index 27f5cc45b22c..ae373f78f8ae 100644 --- a/crates/swc_ecma_transforms_optimization/src/const_modules.rs +++ b/crates/swc_ecma_transforms_optimization/src/const_modules.rs @@ -141,7 +141,7 @@ impl VisitMut for ConstModules { None } else { - Some(ModuleItem::ModuleDecl(ModuleDecl::Import(import))) + Some(ModuleItem::ModuleDecl(import.into())) } } _ => Some(item), diff --git a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs index 449782b6f450..964890ef03bf 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs @@ -1641,13 +1641,16 @@ impl VisitMut for Decorator2022_03 { if !self.extra_exports.is_empty() { insert_builder.push_back( n.len() + 1, - ModuleItem::ModuleDecl(ModuleDecl::ExportNamed(NamedExport { - span: DUMMY_SP, - specifiers: self.extra_exports.take(), - src: None, - type_only: false, - with: None, - })), + ModuleItem::ModuleDecl( + NamedExport { + span: DUMMY_SP, + specifiers: self.extra_exports.take(), + src: None, + type_only: false, + with: None, + } + .into(), + ), ); } diff --git a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs index 39e2ce371d85..8451f3c762d8 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs @@ -157,10 +157,11 @@ impl Fold for Decorators { class, )); - ModuleDecl::ExportDefaultExpr(ExportDefaultExpr { + ExportDefaultExpr { span, expr: decorate_call, - }) + } + .into() } _ => decl, } @@ -244,9 +245,7 @@ impl Fold for Decorators { }) => handle_class!(class, ident), _ => { - let item = ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultExpr( - ExportDefaultExpr { span, expr }, - )); + let item = ModuleItem::ModuleDecl(ExportDefaultExpr { span, expr }.into()); buf.push(item.fold_with(self)); } }, diff --git a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs index d59583b19998..15ba8b763527 100644 --- a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs +++ b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs @@ -109,21 +109,25 @@ impl ExplicitResourceManagement { // export { C as default } new.push( - T::try_from_module_decl(ModuleDecl::ExportNamed(NamedExport { - span: DUMMY_SP, - specifiers: vec![ExportSpecifier::Named(ExportNamedSpecifier { + T::try_from_module_decl( + NamedExport { span: DUMMY_SP, - orig: ModuleExportName::Ident(ident.clone()), - exported: Some(ModuleExportName::Ident(Ident::new_no_ctxt( - "default".into(), - DUMMY_SP, - ))), - is_type_only: Default::default(), - })], - src: None, - type_only: Default::default(), - with: None, - })) + specifiers: vec![ExportSpecifier::Named( + ExportNamedSpecifier { + span: DUMMY_SP, + orig: ModuleExportName::Ident(ident.clone()), + exported: Some(ModuleExportName::Ident( + Ident::new_no_ctxt("default".into(), DUMMY_SP), + )), + is_type_only: Default::default(), + }, + )], + src: None, + type_only: Default::default(), + with: None, + } + .into(), + ) .unwrap(), ); try_body.push( @@ -152,21 +156,25 @@ impl ExplicitResourceManagement { // export { _default as default } new.push( - T::try_from_module_decl(ModuleDecl::ExportNamed(NamedExport { - span: DUMMY_SP, - specifiers: vec![ExportSpecifier::Named(ExportNamedSpecifier { + T::try_from_module_decl( + NamedExport { span: DUMMY_SP, - orig: ModuleExportName::Ident(ident.clone()), - exported: Some(ModuleExportName::Ident(Ident::new_no_ctxt( - "default".into(), - DUMMY_SP, - ))), - is_type_only: Default::default(), - })], - src: None, - type_only: Default::default(), - with: None, - })) + specifiers: vec![ExportSpecifier::Named( + ExportNamedSpecifier { + span: DUMMY_SP, + orig: ModuleExportName::Ident(ident.clone()), + exported: Some(ModuleExportName::Ident( + Ident::new_no_ctxt("default".into(), DUMMY_SP), + )), + is_type_only: Default::default(), + }, + )], + src: None, + type_only: Default::default(), + with: None, + } + .into(), + ) .unwrap(), ); try_body.push( @@ -235,13 +243,16 @@ impl ExplicitResourceManagement { }); extras.push( - T::try_from_module_decl(ModuleDecl::ExportNamed(NamedExport { - span: DUMMY_SP, - specifiers: vec![specifier], - src: None, - type_only: false, - with: None, - })) + T::try_from_module_decl( + NamedExport { + span: DUMMY_SP, + specifiers: vec![specifier], + src: None, + type_only: false, + with: None, + } + .into(), + ) .unwrap(), ); } @@ -312,20 +323,21 @@ impl ExplicitResourceManagement { .collect(); extras.push( - T::try_from_module_decl(ModuleDecl::ExportNamed(NamedExport { - span: DUMMY_SP, - specifiers, - src: None, - type_only: false, - with: None, - })) + T::try_from_module_decl( + NamedExport { + span: DUMMY_SP, + specifiers, + src: None, + type_only: false, + with: None, + } + .into(), + ) .unwrap(), ); } _ => { - new.push( - T::try_from_module_decl(ModuleDecl::ExportDecl(e)).unwrap(), - ); + new.push(T::try_from_module_decl(e.into()).unwrap()); } }; } diff --git a/crates/swc_ecma_transforms_proposal/src/export_default_from.rs b/crates/swc_ecma_transforms_proposal/src/export_default_from.rs index 9dd59be39264..0eadf6597614 100644 --- a/crates/swc_ecma_transforms_proposal/src/export_default_from.rs +++ b/crates/swc_ecma_transforms_proposal/src/export_default_from.rs @@ -74,26 +74,28 @@ impl VisitMut for ExportDefaultFrom { } } - stmts.push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( + stmts.push(ModuleItem::ModuleDecl( NamedExport { span, specifiers: export_specifiers, src: Some(src.clone()), type_only: false, with: None, - }, - ))); + } + .into(), + )); if !origin_specifiers.is_empty() { - stmts.push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed( + stmts.push(ModuleItem::ModuleDecl( NamedExport { span, specifiers: origin_specifiers, src: Some(src), type_only: false, with, - }, - ))); + } + .into(), + )); } } _ => { diff --git a/crates/swc_ecma_transforms_react/src/jsx/mod.rs b/crates/swc_ecma_transforms_react/src/jsx/mod.rs index 465a98c95c1c..efab56690917 100644 --- a/crates/swc_ecma_transforms_react/src/jsx/mod.rs +++ b/crates/swc_ecma_transforms_react/src/jsx/mod.rs @@ -1097,19 +1097,22 @@ where prepend_stmt( stmts, - ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { - span: DUMMY_SP, - specifiers, - src: Str { + ModuleItem::ModuleDecl( + ImportDecl { span: DUMMY_SP, - raw: None, - value: src.into(), + specifiers, + src: Str { + span: DUMMY_SP, + raw: None, + value: src.into(), + } + .into(), + type_only: Default::default(), + with: Default::default(), + phase: Default::default(), } .into(), - type_only: Default::default(), - with: Default::default(), - phase: Default::default(), - })), + ), ) }); } diff --git a/crates/swc_ecma_transforms_react/src/refresh/mod.rs b/crates/swc_ecma_transforms_react/src/refresh/mod.rs index 4c27723a8e93..b82da73495ff 100644 --- a/crates/swc_ecma_transforms_react/src/refresh/mod.rs +++ b/crates/swc_ecma_transforms_react/src/refresh/mod.rs @@ -354,12 +354,13 @@ impl VisitMut for Refresh { if let Some(hook) = hook { make_hook_reg(expr.as_mut(), hook) } - item = ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultExpr( + item = ModuleItem::ModuleDecl( ExportDefaultExpr { expr: Box::new(make_assign_stmt(reg[0].0.clone(), expr.take())), span: *span, - }, - )); + } + .into(), + ); Persist::Hoc(Hoc { insert: false, reg, diff --git a/crates/swc_ecma_transforms_typescript/src/transform.rs b/crates/swc_ecma_transforms_typescript/src/transform.rs index beab859496a7..a199830b4068 100644 --- a/crates/swc_ecma_transforms_typescript/src/transform.rs +++ b/crates/swc_ecma_transforms_typescript/src/transform.rs @@ -1020,10 +1020,11 @@ impl Transform { init.into_var_decl(VarDeclKind::Const, decl.id.take().into()); let module_item = if decl.is_export { - ModuleDecl::ExportDecl(ExportDecl { + ExportDecl { span: decl.span, decl: var_decl.into(), - }) + } + .into() .into() } else { var_decl.span = decl.span; @@ -1069,10 +1070,11 @@ impl Transform { .into_var_decl(VarDeclKind::Const, decl.id.take().into()); let module_item = if decl.is_export { - ModuleDecl::ExportDecl(ExportDecl { + ExportDecl { span: decl.span, decl: var_decl.into(), - }) + } + .into() .into() } else { var_decl.span = decl.span; @@ -1111,7 +1113,7 @@ impl Transform { if should_inject { n.inject_after_directive([ // import { createRequire } from "module"; - ModuleDecl::Import(ImportDecl { + ImportDecl { span: DUMMY_SP, specifiers: vec![ImportNamedSpecifier { span: DUMMY_SP, @@ -1124,7 +1126,8 @@ impl Transform { type_only: false, with: None, phase: Default::default(), - }) + } + .into() .into(), // const __require = _createRequire(import.meta.url); create_require @@ -1169,7 +1172,7 @@ impl Transform { ); } TsImportExportAssignConfig::Preserve => { - n.push(ModuleDecl::TsExportAssignment(cjs_export_assign).into()); + n.push(cjs_export_assign.into().into()); } TsImportExportAssignConfig::NodeNext | TsImportExportAssignConfig::EsNext => { // TS1203 diff --git a/crates/swc_estree_compat/src/swcify/stmt.rs b/crates/swc_estree_compat/src/swcify/stmt.rs index f9b77883a229..f0f6da23335c 100644 --- a/crates/swc_estree_compat/src/swcify/stmt.rs +++ b/crates/swc_estree_compat/src/swcify/stmt.rs @@ -67,31 +67,25 @@ impl Swcify for Statement { Statement::While(v) => v.swcify(ctx).into(), Statement::With(v) => v.swcify(ctx).into(), Statement::ClassDecl(v) => v.swcify(ctx).into().into(), - Statement::ExportAllDecl(v) => { - return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) - } + Statement::ExportAllDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx).into()), Statement::ExportDefaultDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx)), - Statement::ExportNamedDecl(v) => { - return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) - } + Statement::ExportNamedDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx).into()), Statement::ForOf(v) => v.swcify(ctx).into(), - Statement::ImportDecl(v) => { - return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) - } + Statement::ImportDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx).into()), Statement::DeclClass(v) => v.swcify(ctx).into().into(), Statement::DeclFunc(v) => v.swcify(ctx).into().into(), Statement::DeclInterface(v) => v.swcify(ctx).into().into(), Statement::DeclModule(v) => v.swcify(ctx).into().into(), Statement::DeclareModuleExports(v) => { - return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) + return ModuleItem::ModuleDecl(v.swcify(ctx).into()) } Statement::DeclTypeAlias(v) => v.swcify(ctx).into().into(), Statement::DeclVar(v) => v.swcify(ctx).into().into(), Statement::DeclExportDeclaration(v) => { - return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) + return ModuleItem::ModuleDecl(v.swcify(ctx).into()) } Statement::DeclExportAllDeclaration(v) => { - return ModuleItem::ModuleDecl(ModuleDecl::from(v.swcify(ctx))) + return ModuleItem::ModuleDecl(v.swcify(ctx).into()) } _ => { todo!("swcify: {:?}", self) diff --git a/crates/swc_typescript/src/fast_dts/mod.rs b/crates/swc_typescript/src/fast_dts/mod.rs index 75e601a842c8..30509f44ed40 100644 --- a/crates/swc_typescript/src/fast_dts/mod.rs +++ b/crates/swc_typescript/src/fast_dts/mod.rs @@ -128,12 +128,13 @@ impl FastDts { } if let Some(()) = self.decl_to_type_decl(decl) { - new_items.push(ModuleItem::ModuleDecl(ModuleDecl::ExportDecl( + new_items.push(ModuleItem::ModuleDecl( ExportDecl { decl: decl.take(), span: *span, - }, - ))); + } + .into(), + )); } else { self.mark_diagnostic(DtsIssue::UnableToInferType { range: self.source_range_to_range(*span), @@ -196,19 +197,21 @@ impl FastDts { .into(), )); - new_items.push(ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultExpr( + new_items.push(ModuleItem::ModuleDecl( ExportDefaultExpr { span: export.span, expr: name_ident.into(), - }, - ))) + } + .into(), + )) } else { - new_items.push(ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultExpr( + new_items.push(ModuleItem::ModuleDecl( ExportDefaultExpr { span: export.span, expr: export.expr.take(), - }, - ))) + } + .into(), + )) } } From 37f9bf234f18780ed9b4acfa107c87fdbe09b4c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 15:51:41 +0900 Subject: [PATCH 06/33] `ModuleItem::$VARIANT($ARG)` --- crates/swc_bundler/src/bundler/chunk/cjs.rs | 120 ++++++----- .../src/bundler/chunk/computed_key.rs | 43 ++-- crates/swc_bundler/src/bundler/chunk/merge.rs | 190 +++++++++--------- crates/swc_bundler/src/util.rs | 45 ++--- crates/swc_ecma_ast/src/module.rs | 2 +- .../src/template_literal_caching.rs | 2 +- crates/swc_ecma_compat_es2015/src/arrow.rs | 2 +- .../swc_ecma_compat_es2015/src/parameters.rs | 2 +- .../src/async_to_generator.rs | 13 +- .../src/export_namespace_from.rs | 15 +- .../swc_ecma_compat_es3/src/reserved_word.rs | 23 +-- .../src/pass/merge_exports.rs | 10 +- crates/swc_ecma_minifier/src/util/mod.rs | 4 +- .../src/parser/stmt/module_item.rs | 42 ++-- .../swc_ecma_parser/src/parser/typescript.rs | 70 ++++--- crates/swc_ecma_preset_env/src/lib.rs | 54 +++-- .../src/rename/ops.rs | 109 +++++----- .../src/const_modules.rs | 2 +- .../src/simplify/dce/mod.rs | 2 +- .../src/decorator_2022_03.rs | 23 +-- .../src/decorators/mod.rs | 2 +- .../src/export_default_from.rs | 10 +- .../swc_ecma_transforms_react/src/jsx/mod.rs | 25 ++- .../src/refresh/mod.rs | 30 +-- crates/swc_ecma_transforms_testing/src/lib.rs | 21 +- .../src/transform.rs | 4 +- .../src/typescript.rs | 5 +- crates/swc_ecma_utils/src/lib.rs | 8 +- crates/swc_estree_compat/src/swcify/stmt.rs | 5 +- crates/swc_node_bundler/src/loaders/json.rs | 23 +-- crates/swc_typescript/src/fast_dts/mod.rs | 20 +- 31 files changed, 461 insertions(+), 465 deletions(-) diff --git a/crates/swc_bundler/src/bundler/chunk/cjs.rs b/crates/swc_bundler/src/bundler/chunk/cjs.rs index 76200fe45757..f6c50e388a0e 100644 --- a/crates/swc_bundler/src/bundler/chunk/cjs.rs +++ b/crates/swc_bundler/src/bundler/chunk/cjs.rs @@ -65,13 +65,14 @@ where }); module.sort(info.id, &ctx.graph, &ctx.cycles, &self.cm); - let stmt = ModuleItem::Stmt(wrap_module( + let stmt = wrap_module( SyntaxContext::empty(), SyntaxContext::empty().apply_mark(self.unresolved_mark), info.local_ctxt(), load_var, module.into(), - )); + ) + .into(); let wrapped = Modules::from( info.id, @@ -250,16 +251,15 @@ where // Side effect import if i.specifiers.is_empty() { self.replaced = true; - *node = ModuleItem::Stmt( - CallExpr { - span: DUMMY_SP, - callee: load_var.as_callee(), - args: vec![], + *node = CallExpr { + span: DUMMY_SP, + callee: load_var.as_callee(), + args: vec![], - ..Default::default() - } - .into_stmt(), - ); + ..Default::default() + } + .into_stmt() + .into(); return; } @@ -293,63 +293,61 @@ where } ImportSpecifier::Namespace(ns) => { self.replaced = true; - *node = ModuleItem::Stmt( - VarDecl { - span: i.span, - kind: VarDeclKind::Var, - declare: false, - decls: vec![VarDeclarator { - span: ns.span, - name: ns.local.into(), - init: Some(Box::new( - CallExpr { - span: DUMMY_SP, - callee: load_var.as_callee(), - args: vec![], - - ..Default::default() - } - .into(), - )), - definite: false, - }], - ..Default::default() - } - .into() - .into(), - ); + *node = VarDecl { + span: i.span, + kind: VarDeclKind::Var, + declare: false, + decls: vec![VarDeclarator { + span: ns.span, + name: ns.local.into(), + init: Some(Box::new( + CallExpr { + span: DUMMY_SP, + callee: load_var.as_callee(), + args: vec![], + + ..Default::default() + } + .into(), + )), + definite: false, + }], + ..Default::default() + } + .into() + .into() + .into(); return; } } } self.replaced = true; - *node = ModuleItem::Stmt( - VarDecl { + *node = VarDecl { + span: i.span, + kind: VarDeclKind::Var, + declare: false, + decls: vec![VarDeclarator { span: i.span, - kind: VarDeclKind::Var, - declare: false, - decls: vec![VarDeclarator { - span: i.span, - name: Pat::Object(ObjectPat { - span: DUMMY_SP, - props, - optional: false, - type_ann: None, - }), - init: Some(Box::new(Expr::Call(CallExpr { - span: DUMMY_SP, - callee: load_var.as_callee(), - args: vec![], - ..Default::default() - }))), - definite: false, - }], - ..Default::default() - } - .into() - .into(), - ); + name: Pat::Object(ObjectPat { + span: DUMMY_SP, + props, + optional: false, + type_ann: None, + }), + init: Some(Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: load_var.as_callee(), + args: vec![], + ..Default::default() + }))), + definite: false, + }], + ..Default::default() + } + .into() + .into() + .into(); } } } diff --git a/crates/swc_bundler/src/bundler/chunk/computed_key.rs b/crates/swc_bundler/src/bundler/chunk/computed_key.rs index 8e881b6a81ee..ace80820a04d 100644 --- a/crates/swc_bundler/src/bundler/chunk/computed_key.rs +++ b/crates/swc_bundler/src/bundler/chunk/computed_key.rs @@ -82,22 +82,21 @@ where }); additional_items.push(( module_id, - ModuleItem::ModuleDecl( - NamedExport { - span: DUMMY_SP, - specifiers: vec![specifier], - src: None, - type_only: false, - with: Some( - ExportMetadata { - injected: true, - ..Default::default() - } - .into_with(), - ), - } - .into(), - ), + NamedExport { + span: DUMMY_SP, + specifiers: vec![specifier], + src: None, + type_only: false, + with: Some( + ExportMetadata { + injected: true, + ..Default::default() + } + .into_with(), + ), + } + .into() + .into(), )); } } @@ -183,7 +182,7 @@ where }], }; - module.append(id, ModuleItem::Stmt(var_decl.into().into())); + module.append(id, var_decl.into().into().into()); // print_hygiene( // "wrap", @@ -234,7 +233,7 @@ impl Fold for ExportToReturn { }; let stmt = match decl { - ModuleDecl::Import(_) => return ModuleItem::ModuleDecl(decl), + ModuleDecl::Import(_) => return decl.into(), ModuleDecl::ExportDecl(export) => { match &export.decl { Decl::Class(ClassDecl { ident, .. }) | Decl::Fn(FnDecl { ident, .. }) => { @@ -292,7 +291,7 @@ impl Fold for ExportToReturn { DefaultDecl::TsInterfaceDecl(_) => None, }, ModuleDecl::ExportDefaultExpr(_) => None, - ModuleDecl::ExportAll(export) => return ModuleItem::ModuleDecl(export.into()), + ModuleDecl::ExportAll(export) => return export.into().into(), ModuleDecl::ExportNamed(export) => { for specifier in &export.specifiers { match specifier { @@ -329,7 +328,7 @@ impl Fold for ExportToReturn { { None } else { - return ModuleItem::ModuleDecl(export.into()); + return export.into().into(); } } ModuleDecl::TsImportEquals(_) => None, @@ -338,9 +337,9 @@ impl Fold for ExportToReturn { }; if let Some(stmt) = stmt { - ModuleItem::Stmt(stmt) + stmt.into() } else { - ModuleItem::Stmt(EmptyStmt { span: DUMMY_SP }.into()) + EmptyStmt { span: DUMMY_SP }.into().into() } } } diff --git a/crates/swc_bundler/src/bundler/chunk/merge.rs b/crates/swc_bundler/src/bundler/chunk/merge.rs index 0e0cfa4bf65c..c455e4727c98 100644 --- a/crates/swc_bundler/src/bundler/chunk/merge.rs +++ b/crates/swc_bundler/src/bundler/chunk/merge.rs @@ -578,7 +578,7 @@ where ModuleItem::ModuleDecl(ModuleDecl::Import(mut import)) => { // Preserve imports from node.js builtin modules. if self.config.external_modules.contains(&import.src.value) { - new.push(ModuleItem::ModuleDecl(import.into())); + new.push(import.into().into()); continue; } @@ -589,7 +589,7 @@ where .find(|s| s.0.src.value == import.src.value) { if !self.scope.get_module(src.module_id).unwrap().is_es6 { - new.push(ModuleItem::ModuleDecl(import.into())); + new.push(import.into().into()); continue; } } @@ -661,7 +661,7 @@ where } import.specifiers.clear(); - new.push(ModuleItem::ModuleDecl(import.into())); + new.push(import.into().into()); } ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultDecl(export)) => { // At here, we create multiple items. @@ -679,15 +679,16 @@ where // match c.ident { Some(ident) => { - new.push(ModuleItem::Stmt( + new.push( ClassDecl { ident: ident.clone(), class: c.class, declare: false, } .into() + .into() .into(), - )); + ); new.push(ident.assign_to(local.clone()).into_module_item( injected_ctxt, @@ -708,15 +709,16 @@ where // match f.ident { Some(ident) => { - new.push(ModuleItem::Stmt( + new.push( FnDecl { ident: ident.clone(), function: f.function, declare: false, } .into() + .into() .into(), - )); + ); new.push(ident.assign_to(local.clone()).into_module_item( injected_ctxt, @@ -730,15 +732,16 @@ where // // See: https://github.com/denoland/deno/issues/9346 let ident = private_ident!("default"); - new.push(ModuleItem::Stmt( + new.push( FnDecl { ident: ident.clone(), function: f.function, declare: false, } .into() + .into() .into(), - )); + ); new.push(ident.assign_to(local.clone()).into_module_item( injected_ctxt, @@ -772,7 +775,7 @@ where exported: Some(ModuleExportName::Ident(exported)), is_type_only: false, }); - extra.push(ModuleItem::ModuleDecl( + extra.push( NamedExport { span: export.span, specifiers: vec![specifier], @@ -786,8 +789,9 @@ where .into_with(), ), } + .into() .into(), - )); + ); } ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultExpr(export)) => { @@ -825,7 +829,7 @@ where is_type_only: false, }); tracing::trace!("Exporting `default` with `export default expr`"); - extra.push(ModuleItem::ModuleDecl( + extra.push( NamedExport { span: export.span, specifiers: vec![specifier], @@ -839,8 +843,9 @@ where .into_with(), ), } + .into() .into(), - )); + ); } ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(export)) => { @@ -850,13 +855,13 @@ where let local = match export.decl { Decl::Class(c) => { let i = c.ident.clone(); - new.push(ModuleItem::Stmt(c.into().into())); + new.push(c.into().into().into()); i } Decl::Fn(f) => { let i = f.ident.clone(); - new.push(ModuleItem::Stmt(f.into().into())); + new.push(f.into().into().into()); i } @@ -864,58 +869,55 @@ where let ids: Vec = find_pat_ids(&v); // - new.push(ModuleItem::Stmt(v.into().into())); - - let export = ModuleItem::ModuleDecl( - NamedExport { - span: export.span, - specifiers: ids - .into_iter() - .map(|id| { - let exported = Ident::new( - id.sym.clone(), - id.span, - info.export_ctxt(), - ); - - tracing::trace!( - "Exporting `{}{:?}` with `export decl`", - id.sym, - id.ctxt - ); - - new.push( - id.clone() - .assign_to(exported.clone()) - .into_module_item( - injected_ctxt, - "prepare -> export decl -> var", - ), - ); + new.push(v.into().into().into()); + + let export = NamedExport { + span: export.span, + specifiers: ids + .into_iter() + .map(|id| { + let exported = Ident::new( + id.sym.clone(), + id.span, + info.export_ctxt(), + ); - ExportNamedSpecifier { - span: DUMMY_SP, - orig: ModuleExportName::Ident(id), - exported: Some(ModuleExportName::Ident( - exported, - )), - is_type_only: false, - } - }) - .map(ExportSpecifier::Named) - .collect(), - src: None, - type_only: false, - with: Some( - ExportMetadata { - injected: true, - ..Default::default() + tracing::trace!( + "Exporting `{}{:?}` with `export decl`", + id.sym, + id.ctxt + ); + + new.push( + id.clone() + .assign_to(exported.clone()) + .into_module_item( + injected_ctxt, + "prepare -> export decl -> var", + ), + ); + + ExportNamedSpecifier { + span: DUMMY_SP, + orig: ModuleExportName::Ident(id), + exported: Some(ModuleExportName::Ident(exported)), + is_type_only: false, } - .into_with(), - ), - } - .into(), - ); + }) + .map(ExportSpecifier::Named) + .collect(), + src: None, + type_only: false, + with: Some( + ExportMetadata { + injected: true, + ..Default::default() + } + .into_with(), + ), + } + .into() + .into(); extra.push(export); continue; } @@ -950,7 +952,7 @@ where is_type_only: false, }); - extra.push(ModuleItem::ModuleDecl( + extra.push( NamedExport { span: export.span, specifiers: vec![specifier], @@ -964,8 +966,9 @@ where .into_with(), ), } + .into() .into(), - )); + ); } ModuleItem::ModuleDecl(ModuleDecl::ExportNamed(NamedExport { @@ -1072,7 +1075,7 @@ where } if !vars.is_empty() { - new.push(ModuleItem::Stmt( + new.push( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Const, @@ -1081,8 +1084,9 @@ where ..Default::default() } .into() + .into() .into(), - )); + ); } continue; } @@ -1176,7 +1180,7 @@ where is_type_only: false, }, ); - extra.push(ModuleItem::ModuleDecl( + extra.push( NamedExport { span: ns.span, specifiers: vec![specifier], @@ -1184,8 +1188,9 @@ where with: None, type_only: false, } + .into() .into(), - )); + ); } None => { unreachable!( @@ -1375,31 +1380,28 @@ impl VisitMut for ImportMetaHandler<'_, '_> { Ok(key_value_props) => { prepend_stmt( &mut n.body, - ModuleItem::Stmt( - VarDecl { + VarDecl { + span: n.span, + kind: VarDeclKind::Const, + declare: false, + decls: vec![VarDeclarator { span: n.span, - kind: VarDeclKind::Const, - declare: false, - decls: vec![VarDeclarator { + name: Pat::Ident(self.inline_ident.clone().into()), + init: Some(Box::new(Expr::Object(ObjectLit { span: n.span, - name: Pat::Ident(self.inline_ident.clone().into()), - init: Some(Box::new(Expr::Object(ObjectLit { - span: n.span, - props: key_value_props - .iter() - .cloned() - .map(|kv| { - PropOrSpread::Prop(Box::new(Prop::KeyValue(kv))) - }) - .collect(), - }))), - definite: false, - }], - ..Default::default() - } - .into() - .into(), - ), + props: key_value_props + .iter() + .cloned() + .map(|kv| PropOrSpread::Prop(Box::new(Prop::KeyValue(kv)))) + .collect(), + }))), + definite: false, + }], + ..Default::default() + } + .into() + .into() + .into(), ); } Err(err) => self.err = Some(err), diff --git a/crates/swc_bundler/src/util.rs b/crates/swc_bundler/src/util.rs index 6b9a9318afd5..0efb7ccada0e 100644 --- a/crates/swc_bundler/src/util.rs +++ b/crates/swc_bundler/src/util.rs @@ -17,29 +17,28 @@ const TRACK: bool = false; pub(crate) trait VarDeclaratorExt: Into { fn into_module_item(self, injected_ctxt: SyntaxContext, name: &str) -> ModuleItem { - ModuleItem::Stmt( - VarDecl { - span: DUMMY_SP, - ctxt: injected_ctxt, - kind: VarDeclKind::Const, - declare: false, - decls: if TRACK { - vec![ - self.into(), - Str { - span: DUMMY_SP, - raw: None, - value: name.into(), - } - .assign_to(Ident::new_no_ctxt("INJECTED_FROM".into(), DUMMY_SP)), - ] - } else { - vec![self.into()] - }, - } - .into() - .into(), - ) + VarDecl { + span: DUMMY_SP, + ctxt: injected_ctxt, + kind: VarDeclKind::Const, + declare: false, + decls: if TRACK { + vec![ + self.into(), + Str { + span: DUMMY_SP, + raw: None, + value: name.into(), + } + .assign_to(Ident::new_no_ctxt("INJECTED_FROM".into(), DUMMY_SP)), + ] + } else { + vec![self.into()] + }, + } + .into() + .into() + .into() } } diff --git a/crates/swc_ecma_ast/src/module.rs b/crates/swc_ecma_ast/src/module.rs index 6b941b503138..ed329fb007f8 100644 --- a/crates/swc_ecma_ast/src/module.rs +++ b/crates/swc_ecma_ast/src/module.rs @@ -126,6 +126,6 @@ pub enum ModuleItem { impl Take for ModuleItem { fn dummy() -> Self { - ModuleItem::Stmt(Take::dummy()) + Take::dummy().into() } } diff --git a/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs b/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs index c478e37ea95b..0a25325126ee 100644 --- a/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs +++ b/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs @@ -144,7 +144,7 @@ impl Fold for TemplateLiteralCaching { fn fold_module(&mut self, n: Module) -> Module { let mut body = n.body.fold_children_with(self); if let Some(var) = self.create_var_decl() { - prepend_stmt(&mut body, ModuleItem::Stmt(var)) + prepend_stmt(&mut body, var.into()) } Module { body, ..n } diff --git a/crates/swc_ecma_compat_es2015/src/arrow.rs b/crates/swc_ecma_compat_es2015/src/arrow.rs index 68544da4b0fa..a15584d95092 100644 --- a/crates/swc_ecma_compat_es2015/src/arrow.rs +++ b/crates/swc_ecma_compat_es2015/src/arrow.rs @@ -203,7 +203,7 @@ impl VisitMut for Arrow { let decl = self.hoister.take().to_stmt(); if let Some(stmt) = decl { - prepend_stmt(stmts, ModuleItem::Stmt(stmt)); + prepend_stmt(stmts, stmt.into()); } } diff --git a/crates/swc_ecma_compat_es2015/src/parameters.rs b/crates/swc_ecma_compat_es2015/src/parameters.rs index 3a678b713f7e..f51eaa3d3893 100644 --- a/crates/swc_ecma_compat_es2015/src/parameters.rs +++ b/crates/swc_ecma_compat_es2015/src/parameters.rs @@ -798,7 +798,7 @@ impl VisitMut for Params { let decl = self.hoister.take().to_stmt(); if let Some(stmt) = decl { - prepend_stmt(stmts, ModuleItem::Stmt(stmt)); + prepend_stmt(stmts, stmt.into()); } } diff --git a/crates/swc_ecma_compat_es2017/src/async_to_generator.rs b/crates/swc_ecma_compat_es2017/src/async_to_generator.rs index f489baf27c97..fbef1cffa433 100644 --- a/crates/swc_ecma_compat_es2017/src/async_to_generator.rs +++ b/crates/swc_ecma_compat_es2017/src/async_to_generator.rs @@ -227,13 +227,12 @@ impl VisitMut for Actual { let FnWrapperResult { name_fn, ref_fn } = wrapper.into(); - *item = ModuleItem::ModuleDecl( - ExportDefaultDecl { - span: export_default.span, - decl: name_fn.into(), - } - .into(), - ); + *item = ExportDefaultDecl { + span: export_default.span, + decl: name_fn.into(), + } + .into() + .into(); self.extra_stmts.push(ref_fn.into().into()); }; } else { diff --git a/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs b/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs index bd6d917ec8b8..a6d5627152f8 100644 --- a/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs +++ b/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs @@ -74,7 +74,7 @@ impl VisitMut for ExportNamespaceFrom { } } - stmts.push(ModuleItem::ModuleDecl( + stmts.push( ImportDecl { span, specifiers: import_specifiers, @@ -83,10 +83,11 @@ impl VisitMut for ExportNamespaceFrom { with: with.clone(), phase: Default::default(), } + .into() .into(), - )); + ); - stmts.push(ModuleItem::ModuleDecl( + stmts.push( NamedExport { span, specifiers: export_specifiers, @@ -94,11 +95,12 @@ impl VisitMut for ExportNamespaceFrom { type_only: false, with: None, } + .into() .into(), - )); + ); if !origin_specifiers.is_empty() { - stmts.push(ModuleItem::ModuleDecl( + stmts.push( NamedExport { span, specifiers: origin_specifiers, @@ -106,8 +108,9 @@ impl VisitMut for ExportNamespaceFrom { type_only: false, with, } + .into() .into(), - )); + ); } } _ => { diff --git a/crates/swc_ecma_compat_es3/src/reserved_word.rs b/crates/swc_ecma_compat_es3/src/reserved_word.rs index a1facd687cd0..6a9127b3dbc6 100644 --- a/crates/swc_ecma_compat_es3/src/reserved_word.rs +++ b/crates/swc_ecma_compat_es3/src/reserved_word.rs @@ -50,7 +50,7 @@ impl VisitMut for ReservedWord { return; } - *module_item = ModuleItem::Stmt(decl.take().into()); + *module_item = decl.take().into().into(); let mut orig = ident.clone(); orig.visit_mut_with(self); @@ -101,7 +101,7 @@ impl VisitMut for ReservedWord { ); } - *module_item = ModuleItem::Stmt(var.take().into().into()); + *module_item = var.take().into().into().into(); } _ => {} @@ -111,16 +111,15 @@ impl VisitMut for ReservedWord { }); if !extra_exports.is_empty() { - let module_item = ModuleItem::ModuleDecl( - NamedExport { - span: DUMMY_SP, - specifiers: extra_exports, - src: None, - type_only: false, - with: None, - } - .into(), - ); + let module_item = NamedExport { + span: DUMMY_SP, + specifiers: extra_exports, + src: None, + type_only: false, + with: None, + } + .into() + .into(); n.push(module_item); } diff --git a/crates/swc_ecma_minifier/src/pass/merge_exports.rs b/crates/swc_ecma_minifier/src/pass/merge_exports.rs index 0f094bab175b..905a7fb932d7 100644 --- a/crates/swc_ecma_minifier/src/pass/merge_exports.rs +++ b/crates/swc_ecma_minifier/src/pass/merge_exports.rs @@ -42,7 +42,7 @@ impl VisitMut for Merger { }); if !self.specifiers.is_empty() { - stmts.push(ModuleItem::ModuleDecl( + stmts.push( NamedExport { src: None, specifiers: self.specifiers.take(), @@ -50,13 +50,14 @@ impl VisitMut for Merger { type_only: Default::default(), with: Default::default(), } + .into() .into(), - )); + ); } // export {}, to preserve module semantics if was_module && stmts.iter().all(|s| matches!(s, ModuleItem::Stmt(..))) { - stmts.push(ModuleItem::ModuleDecl( + stmts.push( NamedExport { src: None, specifiers: Default::default(), @@ -64,8 +65,9 @@ impl VisitMut for Merger { type_only: Default::default(), with: Default::default(), } + .into() .into(), - )); + ); } } diff --git a/crates/swc_ecma_minifier/src/util/mod.rs b/crates/swc_ecma_minifier/src/util/mod.rs index 75c183b98a05..dbe10aeb0b44 100644 --- a/crates/swc_ecma_minifier/src/util/mod.rs +++ b/crates/swc_ecma_minifier/src/util/mod.rs @@ -33,8 +33,8 @@ pub trait ModuleItemExt: fn into_module_item(self) -> ModuleItem { match self.into_module_decl() { - Ok(v) => ModuleItem::ModuleDecl(v), - Err(v) => ModuleItem::Stmt(v), + Ok(v) => v.into(), + Err(v) => v.into(), } } diff --git a/crates/swc_ecma_parser/src/parser/stmt/module_item.rs b/crates/swc_ecma_parser/src/parser/stmt/module_item.rs index 212fbccac60e..dd7abd439e2e 100644 --- a/crates/swc_ecma_parser/src/parser/stmt/module_item.rs +++ b/crates/swc_ecma_parser/src/parser/stmt/module_item.rs @@ -68,17 +68,16 @@ impl Parser { None }; expect!(self, ';'); - return Ok(ModuleItem::from( - ImportDecl { - span: span!(self, start), - src, - specifiers: vec![], - type_only: false, - with, - phase: Default::default(), - } - .into(), - )); + return Ok(ImportDecl { + span: span!(self, start), + src, + specifiers: vec![], + type_only: false, + with, + phase: Default::default(), + } + .into() + .into()); } let mut type_only = false; @@ -197,17 +196,16 @@ impl Parser { expect!(self, ';'); - Ok(ModuleItem::from( - ImportDecl { - span: span!(self, start), - specifiers, - src, - type_only, - with, - phase, - } - .into(), - )) + Ok(ImportDecl { + span: span!(self, start), + specifiers, + src, + type_only, + with, + phase, + } + .into() + .into()) } /// Parse `foo`, `foo2 as bar` in `import { foo, foo2 as bar }` diff --git a/crates/swc_ecma_parser/src/parser/typescript.rs b/crates/swc_ecma_parser/src/parser/typescript.rs index 3aff95e83085..b55c682c3668 100644 --- a/crates/swc_ecma_parser/src/parser/typescript.rs +++ b/crates/swc_ecma_parser/src/parser/typescript.rs @@ -2841,24 +2841,23 @@ mod tests { span: DUMMY_SP, shebang: None, body: { - let first = ModuleItem::Stmt( - TsTypeAliasDecl { + let first = TsTypeAliasDecl { + span: DUMMY_SP, + declare: false, + id: Ident::new_no_ctxt("test".into(), DUMMY_SP), + type_params: None, + type_ann: Box::new(TsType::TsLitType(TsLitType { span: DUMMY_SP, - declare: false, - id: Ident::new_no_ctxt("test".into(), DUMMY_SP), - type_params: None, - type_ann: Box::new(TsType::TsLitType(TsLitType { + lit: TsLit::Number(Number { span: DUMMY_SP, - lit: TsLit::Number(Number { - span: DUMMY_SP, - value: -1.0, - raw: Some("-1".into()), - }), - })), - } - .into() - .into(), - ); + value: -1.0, + raw: Some("-1".into()), + }), + })), + } + .into() + .into() + .into(); vec![first] }, }; @@ -2878,30 +2877,29 @@ mod tests { span: DUMMY_SP, shebang: None, body: { - let second = ModuleItem::Stmt( - VarDecl { + let second = VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Const, + declare: false, + decls: vec![VarDeclarator { span: DUMMY_SP, - kind: VarDeclKind::Const, - declare: false, - decls: vec![VarDeclarator { + name: Pat::Ident(Ident::new_no_ctxt("t".into(), DUMMY_SP).into()), + init: Some(Box::new(Expr::Unary(UnaryExpr { span: DUMMY_SP, - name: Pat::Ident(Ident::new_no_ctxt("t".into(), DUMMY_SP).into()), - init: Some(Box::new(Expr::Unary(UnaryExpr { + op: op!(unary, "-"), + arg: Box::new(Expr::Lit(Lit::Num(Number { span: DUMMY_SP, - op: op!(unary, "-"), - arg: Box::new(Expr::Lit(Lit::Num(Number { - span: DUMMY_SP, - value: 1.0, - raw: Some("1".into()), - }))), + value: 1.0, + raw: Some("1".into()), }))), - definite: false, - }], - ..Default::default() - } - .into() - .into(), - ); + }))), + definite: false, + }], + ..Default::default() + } + .into() + .into() + .into(); vec![second] }, }; diff --git a/crates/swc_ecma_preset_env/src/lib.rs b/crates/swc_ecma_preset_env/src/lib.rs index 0ae686034a8b..278c34486970 100644 --- a/crates/swc_ecma_preset_env/src/lib.rs +++ b/crates/swc_ecma_preset_env/src/lib.rs @@ -461,44 +461,42 @@ impl VisitMut for Polyfills { prepend_stmts( &mut m.body, v.into_iter().map(|src| { - ModuleItem::ModuleDecl( - ImportDecl { - span, - specifiers: vec![], - src: Str { - span: DUMMY_SP, - raw: None, - value: src, - } - .into(), - type_only: false, - with: None, - phase: Default::default(), + ImportDecl { + span, + specifiers: vec![], + src: Str { + span: DUMMY_SP, + raw: None, + value: src, } .into(), - ) + type_only: false, + with: None, + phase: Default::default(), + } + .into() + .into() }), ); } else { prepend_stmts( &mut m.body, required.into_iter().map(|src| { - ModuleItem::ModuleDecl( - ImportDecl { - span, - specifiers: vec![], - src: Str { - span: DUMMY_SP, - raw: None, - value: src, - } - .into(), - type_only: false, - with: None, - phase: Default::default(), + ImportDecl { + span, + specifiers: vec![], + src: Str { + span: DUMMY_SP, + raw: None, + value: src, } .into(), - ) + type_only: false, + with: None, + phase: Default::default(), + } + .into() + .into() }), ); } diff --git a/crates/swc_ecma_transforms_base/src/rename/ops.rs b/crates/swc_ecma_transforms_base/src/rename/ops.rs index 9dd56f3f587c..54afe9a18c65 100644 --- a/crates/swc_ecma_transforms_base/src/rename/ops.rs +++ b/crates/swc_ecma_transforms_base/src/rename/ops.rs @@ -277,33 +277,31 @@ where let orig_ident = ident.clone(); match self.rename_ident(&mut ident) { Ok(..) => { - *item = ModuleItem::Stmt( - ClassDecl { - ident: ident.clone(), - class: class.take(), - declare: *declare, - } - .into() - .into(), - ); + *item = ClassDecl { + ident: ident.clone(), + class: class.take(), + declare: *declare, + } + .into() + .into() + .into(); export!( ModuleExportName::Ident(orig_ident), ModuleExportName::Ident(ident.take()) ); } Err(..) => { - *item = ModuleItem::ModuleDecl( - ExportDecl { - span: *span, - decl: ClassDecl { - ident: ident.take(), - class: class.take(), - declare: *declare, - } - .into(), + *item = ExportDecl { + span: *span, + decl: ClassDecl { + ident: ident.take(), + class: class.take(), + declare: *declare, } .into(), - ) + } + .into() + .into() } } } @@ -323,33 +321,31 @@ where let orig_ident = ident.clone(); match self.rename_ident(&mut ident) { Ok(..) => { - *item = ModuleItem::Stmt( - FnDecl { - ident: ident.clone(), - function, - declare: *declare, - } - .into() - .into(), - ); + *item = FnDecl { + ident: ident.clone(), + function, + declare: *declare, + } + .into() + .into() + .into(); export!( ModuleExportName::Ident(orig_ident), ModuleExportName::Ident(ident) ); } Err(..) => { - *item = ModuleItem::ModuleDecl( - ExportDecl { - span: *span, - decl: FnDecl { - ident, - function, - declare: *declare, - } - .into(), + *item = ExportDecl { + span: *span, + decl: FnDecl { + ident, + function, + declare: *declare, } .into(), - ) + } + .into() + .into() } } } @@ -370,28 +366,26 @@ where }); if renamed.is_empty() { - *item = ModuleItem::ModuleDecl( - ExportDecl { - span, - decl: VarDecl { - decls, - ..*var.take() - } - .into(), + *item = ExportDecl { + span, + decl: VarDecl { + decls, + ..*var.take() } .into(), - ); - return; - } - *item = ModuleItem::Stmt( - VarDecl { - decls, - ..*var.take() } .into() - .into(), - ); - self.extra.push(ModuleItem::ModuleDecl( + .into(); + return; + } + *item = VarDecl { + decls, + ..*var.take() + } + .into() + .into() + .into(); + self.extra.push( NamedExport { span, specifiers: renamed, @@ -399,8 +393,9 @@ where type_only: false, with: None, } + .into() .into(), - )); + ); } _ => { item.visit_mut_children_with(self); diff --git a/crates/swc_ecma_transforms_optimization/src/const_modules.rs b/crates/swc_ecma_transforms_optimization/src/const_modules.rs index ae373f78f8ae..e8151866c678 100644 --- a/crates/swc_ecma_transforms_optimization/src/const_modules.rs +++ b/crates/swc_ecma_transforms_optimization/src/const_modules.rs @@ -141,7 +141,7 @@ impl VisitMut for ConstModules { None } else { - Some(ModuleItem::ModuleDecl(import.into())) + Some(import.into().into()) } } _ => Some(item), diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs index b958ee97ee15..eb55432f4ba9 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs @@ -919,7 +919,7 @@ impl VisitMut for TreeShaker { { debug!("Dropping an import because it's not used"); self.changed = true; - *n = ModuleItem::Stmt(EmptyStmt { span: DUMMY_SP }.into()); + *n = EmptyStmt { span: DUMMY_SP }.into().into(); } } _ => { diff --git a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs index 964890ef03bf..f6352aa5b40e 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs @@ -1542,7 +1542,7 @@ impl VisitMut for Decorator2022_03 { let span = *span; let new_stmt = self.handle_class_decl(c); - *s = ModuleItem::Stmt(new_stmt); + *s = new_stmt.into(); self.extra_exports .push(ExportSpecifier::Named(ExportNamedSpecifier { span, @@ -1571,7 +1571,7 @@ impl VisitMut for Decorator2022_03 { is_type_only: false, })); - *s = ModuleItem::Stmt(new_stmt); + *s = new_stmt.into(); } _ => { s.visit_mut_children_with(self); @@ -1641,16 +1641,15 @@ impl VisitMut for Decorator2022_03 { if !self.extra_exports.is_empty() { insert_builder.push_back( n.len() + 1, - ModuleItem::ModuleDecl( - NamedExport { - span: DUMMY_SP, - specifiers: self.extra_exports.take(), - src: None, - type_only: false, - with: None, - } - .into(), - ), + NamedExport { + span: DUMMY_SP, + specifiers: self.extra_exports.take(), + src: None, + type_only: false, + with: None, + } + .into() + .into(), ); } diff --git a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs index 8451f3c762d8..4dde73e58f9a 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs @@ -245,7 +245,7 @@ impl Fold for Decorators { }) => handle_class!(class, ident), _ => { - let item = ModuleItem::ModuleDecl(ExportDefaultExpr { span, expr }.into()); + let item = ExportDefaultExpr { span, expr }.into().into(); buf.push(item.fold_with(self)); } }, diff --git a/crates/swc_ecma_transforms_proposal/src/export_default_from.rs b/crates/swc_ecma_transforms_proposal/src/export_default_from.rs index 0eadf6597614..34fb7ae70ded 100644 --- a/crates/swc_ecma_transforms_proposal/src/export_default_from.rs +++ b/crates/swc_ecma_transforms_proposal/src/export_default_from.rs @@ -74,7 +74,7 @@ impl VisitMut for ExportDefaultFrom { } } - stmts.push(ModuleItem::ModuleDecl( + stmts.push( NamedExport { span, specifiers: export_specifiers, @@ -82,11 +82,12 @@ impl VisitMut for ExportDefaultFrom { type_only: false, with: None, } + .into() .into(), - )); + ); if !origin_specifiers.is_empty() { - stmts.push(ModuleItem::ModuleDecl( + stmts.push( NamedExport { span, specifiers: origin_specifiers, @@ -94,8 +95,9 @@ impl VisitMut for ExportDefaultFrom { type_only: false, with, } + .into() .into(), - )); + ); } } _ => { diff --git a/crates/swc_ecma_transforms_react/src/jsx/mod.rs b/crates/swc_ecma_transforms_react/src/jsx/mod.rs index efab56690917..dd478b812a6c 100644 --- a/crates/swc_ecma_transforms_react/src/jsx/mod.rs +++ b/crates/swc_ecma_transforms_react/src/jsx/mod.rs @@ -1097,22 +1097,21 @@ where prepend_stmt( stmts, - ModuleItem::ModuleDecl( - ImportDecl { + ImportDecl { + span: DUMMY_SP, + specifiers, + src: Str { span: DUMMY_SP, - specifiers, - src: Str { - span: DUMMY_SP, - raw: None, - value: src.into(), - } - .into(), - type_only: Default::default(), - with: Default::default(), - phase: Default::default(), + raw: None, + value: src.into(), } .into(), - ), + type_only: Default::default(), + with: Default::default(), + phase: Default::default(), + } + .into() + .into(), ) }); } diff --git a/crates/swc_ecma_transforms_react/src/refresh/mod.rs b/crates/swc_ecma_transforms_react/src/refresh/mod.rs index b82da73495ff..bd55034df739 100644 --- a/crates/swc_ecma_transforms_react/src/refresh/mod.rs +++ b/crates/swc_ecma_transforms_react/src/refresh/mod.rs @@ -354,13 +354,12 @@ impl VisitMut for Refresh { if let Some(hook) = hook { make_hook_reg(expr.as_mut(), hook) } - item = ModuleItem::ModuleDecl( - ExportDefaultExpr { - expr: Box::new(make_assign_stmt(reg[0].0.clone(), expr.take())), - span: *span, - } - .into(), - ); + item = ExportDefaultExpr { + expr: Box::new(make_assign_stmt(reg[0].0.clone(), expr.take())), + span: *span, + } + .into() + .into(); Persist::Hoc(Hoc { insert: false, reg, @@ -401,7 +400,7 @@ impl VisitMut for Refresh { refresh_regs.push((registration_handle.clone(), persistent_id.to_id())); - items.push(ModuleItem::Stmt( + items.push( ExprStmt { span: DUMMY_SP, expr: Box::new(make_assign_stmt( @@ -409,15 +408,16 @@ impl VisitMut for Refresh { persistent_id.into(), )), } + .into() .into(), - )); + ); } Persist::Hoc(mut hoc) => { hoc.reg = hoc.reg.into_iter().rev().collect(); if hoc.insert { let (ident, name) = hoc.reg.last().unwrap(); - items.push(ModuleItem::Stmt( + items.push( ExprStmt { span: DUMMY_SP, expr: Box::new(make_assign_stmt( @@ -425,8 +425,9 @@ impl VisitMut for Refresh { Ident::new(name.0.clone(), DUMMY_SP, name.1).into(), )), } + .into() .into(), - )) + ) } refresh_regs.append(&mut hoc.reg); } @@ -434,7 +435,7 @@ impl VisitMut for Refresh { } if !hook_visitor.ident.is_empty() { - items.insert(0, ModuleItem::Stmt(hook_visitor.gen_hook_handle())); + items.insert(0, hook_visitor.gen_hook_handle().into()); } // Insert @@ -469,7 +470,7 @@ impl VisitMut for Refresh { // ``` let refresh_reg = self.options.refresh_reg.as_str(); for (handle, persistent_id) in refresh_regs { - items.push(ModuleItem::Stmt( + items.push( ExprStmt { span: DUMMY_SP, expr: CallExpr { @@ -479,8 +480,9 @@ impl VisitMut for Refresh { } .into(), } + .into() .into(), - )); + ); } *module_items = items diff --git a/crates/swc_ecma_transforms_testing/src/lib.rs b/crates/swc_ecma_transforms_testing/src/lib.rs index 38a53f3ebd2d..daa8f01d8cf5 100644 --- a/crates/swc_ecma_transforms_testing/src/lib.rs +++ b/crates/swc_ecma_transforms_testing/src/lib.rs @@ -236,17 +236,16 @@ impl VisitMut for RegeneratorHandler { init: Some(init), definite: Default::default(), }; - *item = ModuleItem::Stmt( - VarDecl { - span: import.span, - kind: VarDeclKind::Var, - declare: false, - decls: vec![decl], - ..Default::default() - } - .into() - .into(), - ) + *item = VarDecl { + span: import.span, + kind: VarDeclKind::Var, + declare: false, + decls: vec![decl], + ..Default::default() + } + .into() + .into() + .into() } } } diff --git a/crates/swc_ecma_transforms_typescript/src/transform.rs b/crates/swc_ecma_transforms_typescript/src/transform.rs index a199830b4068..b8d448a48f0d 100644 --- a/crates/swc_ecma_transforms_typescript/src/transform.rs +++ b/crates/swc_ecma_transforms_typescript/src/transform.rs @@ -1028,7 +1028,7 @@ impl Transform { .into() } else { var_decl.span = decl.span; - ModuleItem::Stmt(var_decl.into()) + var_decl.into().into() }; n.push(module_item); } @@ -1058,7 +1058,7 @@ impl Transform { .into_var_decl(VarDeclKind::Const, decl.id.take().into()); var_decl.span = decl.span; - n.push(ModuleItem::Stmt(var_decl.into())); + n.push(var_decl.into().into()); } TsImportExportAssignConfig::Preserve => n.push(module_item), TsImportExportAssignConfig::NodeNext => { diff --git a/crates/swc_ecma_transforms_typescript/src/typescript.rs b/crates/swc_ecma_transforms_typescript/src/typescript.rs index 4c4c43351858..83e84fda0886 100644 --- a/crates/swc_ecma_transforms_typescript/src/typescript.rs +++ b/crates/swc_ecma_transforms_typescript/src/typescript.rs @@ -89,13 +89,14 @@ impl TypeScript { return; } - n.body.push(ModuleItem::ModuleDecl( + n.body.push( NamedExport { span, ..NamedExport::dummy() } + .into() .into(), - )); + ); } } diff --git a/crates/swc_ecma_utils/src/lib.rs b/crates/swc_ecma_utils/src/lib.rs index 83810b2edd72..ceb30b889a97 100644 --- a/crates/swc_ecma_utils/src/lib.rs +++ b/crates/swc_ecma_utils/src/lib.rs @@ -253,12 +253,12 @@ impl StmtOrModuleItem for ModuleItem { #[inline] fn from_stmt(stmt: Stmt) -> Self { - ModuleItem::Stmt(stmt) + stmt.into() } #[inline] fn try_from_module_decl(decl: ModuleDecl) -> Result { - Ok(ModuleItem::ModuleDecl(decl)) + Ok(decl.into()) } } @@ -313,7 +313,7 @@ impl ModuleItemLike for ModuleItem { #[inline] fn try_from_module_decl(decl: ModuleDecl) -> Result { - Ok(ModuleItem::ModuleDecl(decl)) + Ok(decl.into()) } } impl StmtLike for ModuleItem { @@ -343,7 +343,7 @@ impl StmtLike for ModuleItem { #[inline] fn from_stmt(stmt: Stmt) -> Self { - ModuleItem::Stmt(stmt) + stmt.into() } } diff --git a/crates/swc_estree_compat/src/swcify/stmt.rs b/crates/swc_estree_compat/src/swcify/stmt.rs index f0f6da23335c..3fbef69086ad 100644 --- a/crates/swc_estree_compat/src/swcify/stmt.rs +++ b/crates/swc_estree_compat/src/swcify/stmt.rs @@ -46,7 +46,7 @@ impl Swcify for Statement { type Output = ModuleItem; fn swcify(self, ctx: &Context) -> Self::Output { - ModuleItem::Stmt(match self { + match self { Statement::Block(v) => v.swcify(ctx).into(), Statement::Break(v) => v.swcify(ctx).into(), Statement::Continue(v) => v.swcify(ctx).into(), @@ -90,7 +90,8 @@ impl Swcify for Statement { _ => { todo!("swcify: {:?}", self) } - }) + } + .into() } } diff --git a/crates/swc_node_bundler/src/loaders/json.rs b/crates/swc_node_bundler/src/loaders/json.rs index 279382675fcd..dcac08ce49e4 100644 --- a/crates/swc_node_bundler/src/loaders/json.rs +++ b/crates/swc_node_bundler/src/loaders/json.rs @@ -9,24 +9,23 @@ pub(super) fn load_json_as_module(fm: &Arc) -> Result let expr = parse_file_as_expr(fm, Syntax::default(), EsVersion::Es2020, None, &mut vec![]) .map_err(|err| anyhow!("failed parse json as javascript object: {:#?}", err))?; - let export = ModuleItem::Stmt( - ExprStmt { + let export = ExprStmt { + span: DUMMY_SP, + expr: AssignExpr { span: DUMMY_SP, - expr: AssignExpr { + op: op!("="), + left: MemberExpr { span: DUMMY_SP, - op: op!("="), - left: MemberExpr { - span: DUMMY_SP, - obj: Box::new(Ident::new_no_ctxt("module".into(), DUMMY_SP).into()), - prop: MemberProp::Ident(IdentName::new("exports".into(), DUMMY_SP)), - } - .into(), - right: expr, + obj: Box::new(Ident::new_no_ctxt("module".into(), DUMMY_SP).into()), + prop: MemberProp::Ident(IdentName::new("exports".into(), DUMMY_SP)), } .into(), + right: expr, } .into(), - ); + } + .into() + .into(); Ok(Module { span: DUMMY_SP, diff --git a/crates/swc_typescript/src/fast_dts/mod.rs b/crates/swc_typescript/src/fast_dts/mod.rs index 30509f44ed40..7730d9e5e8fd 100644 --- a/crates/swc_typescript/src/fast_dts/mod.rs +++ b/crates/swc_typescript/src/fast_dts/mod.rs @@ -128,13 +128,14 @@ impl FastDts { } if let Some(()) = self.decl_to_type_decl(decl) { - new_items.push(ModuleItem::ModuleDecl( + new_items.push( ExportDecl { decl: decl.take(), span: *span, } + .into() .into(), - )); + ); } else { self.mark_diagnostic(DtsIssue::UnableToInferType { range: self.source_range_to_range(*span), @@ -176,7 +177,7 @@ impl FastDts { .map(type_ann); if let Some(type_ann) = type_ann { - new_items.push(ModuleItem::Stmt( + new_items.push( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Const, @@ -194,24 +195,27 @@ impl FastDts { ..Default::default() } .into() + .into() .into(), - )); + ); - new_items.push(ModuleItem::ModuleDecl( + new_items.push( ExportDefaultExpr { span: export.span, expr: name_ident.into(), } + .into() .into(), - )) + ) } else { - new_items.push(ModuleItem::ModuleDecl( + new_items.push( ExportDefaultExpr { span: export.span, expr: export.expr.take(), } + .into() .into(), - )) + ) } } From b45925bf4bb4a96e788d70e828bcbdffa1cdec8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 15:51:52 +0900 Subject: [PATCH 07/33] into into --- crates/swc_bundler/src/bundler/chunk/cjs.rs | 3 --- .../src/bundler/chunk/computed_key.rs | 11 ++++------ crates/swc_bundler/src/bundler/chunk/merge.rs | 22 +++++-------------- crates/swc_bundler/src/bundler/finalize.rs | 3 --- crates/swc_bundler/src/util.rs | 1 - .../src/template_literal_caching.rs | 1 - .../src/block_scoped_fn.rs | 2 +- .../src/block_scoping/mod.rs | 1 - .../src/classes/constructor.rs | 1 - .../swc_ecma_compat_es2015/src/classes/mod.rs | 1 - .../src/template_literal.rs | 1 - .../src/async_to_generator.rs | 5 ++--- .../src/export_namespace_from.rs | 3 --- .../src/class_properties/mod.rs | 11 +++------- .../swc_ecma_compat_es3/src/reserved_word.rs | 5 ++--- .../src/compress/optimize/loops.rs | 4 ++-- .../src/compress/optimize/sequences.rs | 2 +- .../src/compress/pure/dead_code.rs | 3 +-- .../src/compress/pure/vars.rs | 12 +++++----- .../src/pass/merge_exports.rs | 2 -- crates/swc_ecma_parser/src/parser/stmt.rs | 18 +++++++-------- .../src/parser/stmt/module_item.rs | 4 ---- .../swc_ecma_parser/src/parser/typescript.rs | 2 -- crates/swc_ecma_preset_env/src/lib.rs | 2 -- .../src/helpers/mod.rs | 1 - .../src/rename/ops.rs | 7 ------ .../src/common_js.rs | 7 ++---- .../src/module_decl_strip.rs | 10 +++------ .../src/system_js.rs | 5 ++--- .../src/const_modules.rs | 2 +- .../src/simplify/branch/mod.rs | 6 ++--- .../src/simplify/dce/mod.rs | 2 +- .../src/decorator_2022_03.rs | 6 +---- .../src/decorators/mod.rs | 3 +-- .../src/explicit_resource_management.rs | 8 +------ .../src/export_default_from.rs | 2 -- .../swc_ecma_transforms_react/src/jsx/mod.rs | 2 -- .../src/refresh/mod.rs | 4 ---- crates/swc_ecma_transforms_testing/src/lib.rs | 1 - .../src/transform.rs | 15 +++++-------- .../src/typescript.rs | 1 - crates/swc_ecma_utils/src/constructor.rs | 1 - .../src/function/fn_env_hoister.rs | 3 --- .../src/function/function_wrapper.rs | 2 -- crates/swc_estree_compat/src/swcify/stmt.rs | 16 +++++++------- crates/swc_node_bundler/src/loaders/json.rs | 1 - crates/swc_typescript/src/fast_dts/mod.rs | 4 ---- 47 files changed, 65 insertions(+), 164 deletions(-) diff --git a/crates/swc_bundler/src/bundler/chunk/cjs.rs b/crates/swc_bundler/src/bundler/chunk/cjs.rs index f6c50e388a0e..7c40279e6b5c 100644 --- a/crates/swc_bundler/src/bundler/chunk/cjs.rs +++ b/crates/swc_bundler/src/bundler/chunk/cjs.rs @@ -171,7 +171,6 @@ fn wrap_module( ..Default::default() } .into() - .into() } struct RequireReplacer<'a, 'b, L, R> @@ -315,7 +314,6 @@ where ..Default::default() } .into() - .into() .into(); return; } @@ -346,7 +344,6 @@ where ..Default::default() } .into() - .into() .into(); } } diff --git a/crates/swc_bundler/src/bundler/chunk/computed_key.rs b/crates/swc_bundler/src/bundler/chunk/computed_key.rs index ace80820a04d..c4b117b4a4d9 100644 --- a/crates/swc_bundler/src/bundler/chunk/computed_key.rs +++ b/crates/swc_bundler/src/bundler/chunk/computed_key.rs @@ -95,7 +95,6 @@ where .into_with(), ), } - .into() .into(), )); } @@ -182,7 +181,7 @@ where }], }; - module.append(id, var_decl.into().into().into()); + module.append(id, var_decl.into().into()); // print_hygiene( // "wrap", @@ -265,7 +264,6 @@ impl Fold for ExportToReturn { class: expr.class, declare: false, } - .into() .into(), ) } @@ -284,14 +282,13 @@ impl Fold for ExportToReturn { function: expr.function, declare: false, } - .into() .into(), ) } DefaultDecl::TsInterfaceDecl(_) => None, }, ModuleDecl::ExportDefaultExpr(_) => None, - ModuleDecl::ExportAll(export) => return export.into().into(), + ModuleDecl::ExportAll(export) => return export.into(), ModuleDecl::ExportNamed(export) => { for specifier in &export.specifiers { match specifier { @@ -328,7 +325,7 @@ impl Fold for ExportToReturn { { None } else { - return export.into().into(); + return export.into(); } } ModuleDecl::TsImportEquals(_) => None, @@ -339,7 +336,7 @@ impl Fold for ExportToReturn { if let Some(stmt) = stmt { stmt.into() } else { - EmptyStmt { span: DUMMY_SP }.into().into() + EmptyStmt { span: DUMMY_SP }.into() } } } diff --git a/crates/swc_bundler/src/bundler/chunk/merge.rs b/crates/swc_bundler/src/bundler/chunk/merge.rs index c455e4727c98..3e4be8b798f1 100644 --- a/crates/swc_bundler/src/bundler/chunk/merge.rs +++ b/crates/swc_bundler/src/bundler/chunk/merge.rs @@ -578,7 +578,7 @@ where ModuleItem::ModuleDecl(ModuleDecl::Import(mut import)) => { // Preserve imports from node.js builtin modules. if self.config.external_modules.contains(&import.src.value) { - new.push(import.into().into()); + new.push(import.into()); continue; } @@ -589,7 +589,7 @@ where .find(|s| s.0.src.value == import.src.value) { if !self.scope.get_module(src.module_id).unwrap().is_es6 { - new.push(import.into().into()); + new.push(import.into()); continue; } } @@ -661,7 +661,7 @@ where } import.specifiers.clear(); - new.push(import.into().into()); + new.push(import.into()); } ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultDecl(export)) => { // At here, we create multiple items. @@ -686,7 +686,6 @@ where declare: false, } .into() - .into() .into(), ); @@ -716,7 +715,6 @@ where declare: false, } .into() - .into() .into(), ); @@ -739,7 +737,6 @@ where declare: false, } .into() - .into() .into(), ); @@ -789,7 +786,6 @@ where .into_with(), ), } - .into() .into(), ); } @@ -843,7 +839,6 @@ where .into_with(), ), } - .into() .into(), ); } @@ -855,13 +850,13 @@ where let local = match export.decl { Decl::Class(c) => { let i = c.ident.clone(); - new.push(c.into().into().into()); + new.push(c.into().into()); i } Decl::Fn(f) => { let i = f.ident.clone(); - new.push(f.into().into().into()); + new.push(f.into().into()); i } @@ -869,7 +864,7 @@ where let ids: Vec = find_pat_ids(&v); // - new.push(v.into().into().into()); + new.push(v.into().into()); let export = NamedExport { span: export.span, @@ -916,7 +911,6 @@ where .into_with(), ), } - .into() .into(); extra.push(export); continue; @@ -966,7 +960,6 @@ where .into_with(), ), } - .into() .into(), ); } @@ -1084,7 +1077,6 @@ where ..Default::default() } .into() - .into() .into(), ); } @@ -1188,7 +1180,6 @@ where with: None, type_only: false, } - .into() .into(), ); } @@ -1400,7 +1391,6 @@ impl VisitMut for ImportMetaHandler<'_, '_> { ..Default::default() } .into() - .into() .into(), ); } diff --git a/crates/swc_bundler/src/bundler/finalize.rs b/crates/swc_bundler/src/bundler/finalize.rs index 836c9e324bc3..b3bd6220c884 100644 --- a/crates/swc_bundler/src/bundler/finalize.rs +++ b/crates/swc_bundler/src/bundler/finalize.rs @@ -272,7 +272,6 @@ where class: expr.class, declare: false, } - .into() .into(), ) } @@ -297,7 +296,6 @@ where function: expr.function, declare: false, } - .into() .into(), ) } @@ -322,7 +320,6 @@ where decls: vec![var], ..Default::default() } - .into() .into(), ) } diff --git a/crates/swc_bundler/src/util.rs b/crates/swc_bundler/src/util.rs index 0efb7ccada0e..1278740b13ce 100644 --- a/crates/swc_bundler/src/util.rs +++ b/crates/swc_bundler/src/util.rs @@ -38,7 +38,6 @@ pub(crate) trait VarDeclaratorExt: Into { } .into() .into() - .into() } } diff --git a/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs b/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs index 0a25325126ee..8dce1fb3cfe5 100644 --- a/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs +++ b/crates/swc_ecma_compat_bugfixes/src/template_literal_caching.rs @@ -49,7 +49,6 @@ impl TemplateLiteralCaching { decls: self.decls.clone(), ..Default::default() } - .into() .into(), ); } diff --git a/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs b/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs index d5ff655395c9..95c3e1f7b456 100644 --- a/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs +++ b/crates/swc_ecma_compat_es2015/src/block_scoped_fn.rs @@ -40,7 +40,7 @@ impl VisitMut for BlockScopedFns { if let Stmt::Decl(Decl::Fn(decl)) = stmt { if IdentUsageFinder::find(&decl.ident.to_id(), &decl.function) { - extra_stmts.push(decl.into().into()); + extra_stmts.push(decl.into()); continue; } stmts.push( diff --git a/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs b/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs index 8fe7f9e559a1..68855a30a21e 100644 --- a/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs +++ b/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs @@ -339,7 +339,6 @@ impl BlockScoping { span: DUMMY_SP, label: None, } - .into() .into(), alt: None, } diff --git a/crates/swc_ecma_compat_es2015/src/classes/constructor.rs b/crates/swc_ecma_compat_es2015/src/classes/constructor.rs index a372e93637f3..9e77911341fd 100644 --- a/crates/swc_ecma_compat_es2015/src/classes/constructor.rs +++ b/crates/swc_ecma_compat_es2015/src/classes/constructor.rs @@ -347,7 +347,6 @@ impl VisitMut for ConstructorFolder<'_> { ..Default::default() } .into() - .into() } None => { *stmt = ReturnStmt { diff --git a/crates/swc_ecma_compat_es2015/src/classes/mod.rs b/crates/swc_ecma_compat_es2015/src/classes/mod.rs index 5c8d4b3a455a..de63a30f6e14 100644 --- a/crates/swc_ecma_compat_es2015/src/classes/mod.rs +++ b/crates/swc_ecma_compat_es2015/src/classes/mod.rs @@ -771,7 +771,6 @@ where }), declare: false, } - .into() .into(), ); } diff --git a/crates/swc_ecma_compat_es2015/src/template_literal.rs b/crates/swc_ecma_compat_es2015/src/template_literal.rs index b4550853b89b..ddd377052b21 100644 --- a/crates/swc_ecma_compat_es2015/src/template_literal.rs +++ b/crates/swc_ecma_compat_es2015/src/template_literal.rs @@ -362,7 +362,6 @@ impl VisitMut for TemplateLiteral { ident: fn_ident.clone(), function: f.into(), } - .into() .into(), ); diff --git a/crates/swc_ecma_compat_es2017/src/async_to_generator.rs b/crates/swc_ecma_compat_es2017/src/async_to_generator.rs index fbef1cffa433..d7d0cd34ca9c 100644 --- a/crates/swc_ecma_compat_es2017/src/async_to_generator.rs +++ b/crates/swc_ecma_compat_es2017/src/async_to_generator.rs @@ -208,7 +208,7 @@ impl VisitMut for Actual { let FnWrapperResult { name_fn, ref_fn } = wrapper.into(); *f = name_fn; - self.extra_stmts.push(ref_fn.into().into()); + self.extra_stmts.push(ref_fn.into()); } fn visit_mut_module_item(&mut self, item: &mut ModuleItem) { @@ -231,9 +231,8 @@ impl VisitMut for Actual { span: export_default.span, decl: name_fn.into(), } - .into() .into(); - self.extra_stmts.push(ref_fn.into().into()); + self.extra_stmts.push(ref_fn.into()); }; } else { export_default.visit_mut_children_with(self); diff --git a/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs b/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs index a6d5627152f8..0ed7bc205ea4 100644 --- a/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs +++ b/crates/swc_ecma_compat_es2020/src/export_namespace_from.rs @@ -83,7 +83,6 @@ impl VisitMut for ExportNamespaceFrom { with: with.clone(), phase: Default::default(), } - .into() .into(), ); @@ -95,7 +94,6 @@ impl VisitMut for ExportNamespaceFrom { type_only: false, with: None, } - .into() .into(), ); @@ -108,7 +106,6 @@ impl VisitMut for ExportNamespaceFrom { type_only: false, with, } - .into() .into(), ); } diff --git a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs index f1bd32e1f9e0..be8da701b887 100644 --- a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs +++ b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs @@ -104,7 +104,6 @@ impl ClassExtra { decls: self.vars, ..Default::default() } - .into() .into(), ) } @@ -118,7 +117,6 @@ impl ClassExtra { decls: self.lets, ..Default::default() } - .into() .into(), ) } @@ -135,7 +133,6 @@ impl ClassExtra { decls: self.vars, ..Default::default() } - .into() .into(), ) } @@ -148,7 +145,6 @@ impl ClassExtra { decls: self.lets, ..Default::default() } - .into() .into(), ) } @@ -194,7 +190,7 @@ impl VisitMut for ClassProperties { let ident = ident.unwrap_or_else(|| private_ident!("_class")); let (decl, extra) = self.visit_mut_class_as_decl(ident.clone(), class); - extra.merge_with(&mut stmts, decl.into().into()); + extra.merge_with(&mut stmts, decl.into()); stmts.push( ReturnStmt { @@ -360,7 +356,7 @@ impl ClassProperties { let (decl, extra) = self.visit_mut_class_as_decl(ident.clone(), class); - extra.merge_with(&mut buf, T::from_stmt(decl.into().into())); + extra.merge_with(&mut buf, T::from_stmt(decl.into())); buf.push( match T::try_from_module_decl( @@ -431,7 +427,7 @@ impl ClassProperties { declare: false, })) => { let (decl, extra) = self.visit_mut_class_as_decl(ident, class); - extra.merge_with(&mut buf, T::from_stmt(decl.into().into())) + extra.merge_with(&mut buf, T::from_stmt(decl.into())) } _ => { stmt.visit_mut_children_with(self); @@ -968,7 +964,6 @@ impl ClassProperties { function: method.function, declare: false, } - .into() .into(), ) } diff --git a/crates/swc_ecma_compat_es3/src/reserved_word.rs b/crates/swc_ecma_compat_es3/src/reserved_word.rs index 6a9127b3dbc6..25f47fc50078 100644 --- a/crates/swc_ecma_compat_es3/src/reserved_word.rs +++ b/crates/swc_ecma_compat_es3/src/reserved_word.rs @@ -50,7 +50,7 @@ impl VisitMut for ReservedWord { return; } - *module_item = decl.take().into().into(); + *module_item = decl.take().into(); let mut orig = ident.clone(); orig.visit_mut_with(self); @@ -101,7 +101,7 @@ impl VisitMut for ReservedWord { ); } - *module_item = var.take().into().into().into(); + *module_item = var.take().into().into(); } _ => {} @@ -118,7 +118,6 @@ impl VisitMut for ReservedWord { type_only: false, with: None, } - .into() .into(); n.push(module_item); diff --git a/crates/swc_ecma_minifier/src/compress/optimize/loops.rs b/crates/swc_ecma_minifier/src/compress/optimize/loops.rs index 15fe9b5e3100..e9e48e31c0af 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/loops.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/loops.rs @@ -28,7 +28,7 @@ impl Optimizer<'_> { report_change!("loops: Removing a for loop with instant break"); self.prepend_stmts.extend(f.init.take().map(|init| { match init { - VarDeclOrExpr::VarDecl(var) => var.into().into(), + VarDeclOrExpr::VarDecl(var) => var.into(), VarDeclOrExpr::Expr(expr) => ExprStmt { span: DUMMY_SP, expr, @@ -97,7 +97,7 @@ impl Optimizer<'_> { self.prepend_stmts.extend(f.init.take().map(|init| { match init { - VarDeclOrExpr::VarDecl(var) => var.into().into(), + VarDeclOrExpr::VarDecl(var) => var.into(), VarDeclOrExpr::Expr(expr) => ExprStmt { span: DUMMY_SP, expr, diff --git a/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs b/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs index 3a483fa7f672..ca45653a9bff 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs @@ -315,7 +315,7 @@ impl Optimizer<'_> { } ) && var.decls.iter().all(|v| v.init.is_none()) => { - new_stmts.push(T::from_stmt(var.into().into())); + new_stmts.push(T::from_stmt(var.into())); } Stmt::Decl(Decl::Fn(..)) => { diff --git a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs index a7ff0ccc07ed..1fe1ea318f8e 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs @@ -246,7 +246,7 @@ impl Pure<'_> { |(mut decls, mut hoisted_fns, mut new_stmts), stmt| { match stmt.take().try_into_stmt() { Ok(Stmt::Decl(Decl::Fn(f))) => { - hoisted_fns.push(f.into().into().into()); + hoisted_fns.push(f.into().into()); } Ok(t) => { let ids = extract_var_ids(&t).into_iter().map(|i| VarDeclarator { @@ -272,7 +272,6 @@ impl Pure<'_> { declare: false, ..Default::default() } - .into() .into(), ); } diff --git a/crates/swc_ecma_minifier/src/compress/pure/vars.rs b/crates/swc_ecma_minifier/src/compress/pure/vars.rs index 91e8c3427ec4..219f74172391 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/vars.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/vars.rs @@ -78,7 +78,7 @@ impl Pure<'_> { v.decls.extend(var.decls); } _ => { - if let Some(s) = cur.take().map(|c| c.into().into()) { + if let Some(s) = cur.take().map(|c| c.into()) { new.push(T::from_stmt(s)); } cur = Some(var); @@ -104,7 +104,7 @@ impl Pure<'_> { } _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(s.into().into())); + new.push(T::from_stmt(s.into())); } new.push(T::from_stmt(stmt.into())); } @@ -124,14 +124,14 @@ impl Pure<'_> { } _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(s.into().into())); + new.push(T::from_stmt(s.into())); } new.push(T::from_stmt(stmt.into())); } }, _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(s.into().into())); + new.push(T::from_stmt(s.into())); } new.push(T::from_stmt(stmt)); } @@ -139,7 +139,7 @@ impl Pure<'_> { } Err(item) => { if let Some(s) = cur.take() { - new.push(T::from_stmt(s.into().into())); + new.push(T::from_stmt(s.into())); } new.push(item); } @@ -147,7 +147,7 @@ impl Pure<'_> { }); if let Some(s) = cur.take() { - new.push(T::from_stmt(s.into().into())); + new.push(T::from_stmt(s.into())); } drop_invalid_stmts(&mut new); diff --git a/crates/swc_ecma_minifier/src/pass/merge_exports.rs b/crates/swc_ecma_minifier/src/pass/merge_exports.rs index 905a7fb932d7..1701435e2e53 100644 --- a/crates/swc_ecma_minifier/src/pass/merge_exports.rs +++ b/crates/swc_ecma_minifier/src/pass/merge_exports.rs @@ -50,7 +50,6 @@ impl VisitMut for Merger { type_only: Default::default(), with: Default::default(), } - .into() .into(), ); } @@ -65,7 +64,6 @@ impl VisitMut for Merger { type_only: Default::default(), with: Default::default(), } - .into() .into(), ); } diff --git a/crates/swc_ecma_parser/src/parser/stmt.rs b/crates/swc_ecma_parser/src/parser/stmt.rs index 0e86019dbba6..63ab239de0df 100644 --- a/crates/swc_ecma_parser/src/parser/stmt.rs +++ b/crates/swc_ecma_parser/src/parser/stmt.rs @@ -133,7 +133,7 @@ impl<'a, I: Tokens> Parser { let v = self.parse_using_decl(start, true)?; if let Some(v) = v { - return Ok(v.into().into()); + return Ok(v.into()); } } @@ -164,7 +164,7 @@ impl<'a, I: Tokens> Parser { assert_and_bump!(self, "await"); let v = self.parse_using_decl(start, true)?; if let Some(v) = v { - return Ok(v.into().into()); + return Ok(v.into()); } } } @@ -297,12 +297,12 @@ impl<'a, I: Tokens> Parser { tok!("var") => { let v = self.parse_var_stmt(false)?; - return Ok(v.into().into()); + return Ok(v.into()); } tok!("const") if include_decl => { let v = self.parse_var_stmt(false)?; - return Ok(v.into().into()); + return Ok(v.into()); } // 'let' can start an identifier reference. @@ -315,14 +315,14 @@ impl<'a, I: Tokens> Parser { if is_keyword { let v = self.parse_var_stmt(false)?; - return Ok(v.into().into()); + return Ok(v.into()); } } tok!("using") if include_decl => { let v = self.parse_using_decl(start, false)?; if let Some(v) = v { - return Ok(v.into().into()); + return Ok(v.into()); } } @@ -333,7 +333,7 @@ impl<'a, I: Tokens> Parser { { let start = self.input.cur_pos(); bump!(self); - return Ok(self.parse_ts_interface_decl(start)?.into().into()); + return Ok(self.parse_ts_interface_decl(start)?.into()); } } @@ -344,7 +344,7 @@ impl<'a, I: Tokens> Parser { { let start = self.input.cur_pos(); bump!(self); - return Ok(self.parse_ts_type_alias_decl(start)?.into().into()); + return Ok(self.parse_ts_type_alias_decl(start)?.into()); } } @@ -355,7 +355,7 @@ impl<'a, I: Tokens> Parser { { let start = self.input.cur_pos(); bump!(self); - return Ok(self.parse_ts_enum_decl(start, false)?.into().into()); + return Ok(self.parse_ts_enum_decl(start, false)?.into()); } } diff --git a/crates/swc_ecma_parser/src/parser/stmt/module_item.rs b/crates/swc_ecma_parser/src/parser/stmt/module_item.rs index dd7abd439e2e..056b55eb8de6 100644 --- a/crates/swc_ecma_parser/src/parser/stmt/module_item.rs +++ b/crates/swc_ecma_parser/src/parser/stmt/module_item.rs @@ -13,7 +13,6 @@ impl Parser { span: span!(self, start), expr, } - .into() .into()); } @@ -26,7 +25,6 @@ impl Parser { span: span!(self, start), expr, } - .into() .into()); } @@ -76,7 +74,6 @@ impl Parser { with, phase: Default::default(), } - .into() .into()); } @@ -204,7 +201,6 @@ impl Parser { with, phase, } - .into() .into()) } diff --git a/crates/swc_ecma_parser/src/parser/typescript.rs b/crates/swc_ecma_parser/src/parser/typescript.rs index b55c682c3668..68d1ae98f5ca 100644 --- a/crates/swc_ecma_parser/src/parser/typescript.rs +++ b/crates/swc_ecma_parser/src/parser/typescript.rs @@ -2856,7 +2856,6 @@ mod tests { })), } .into() - .into() .into(); vec![first] }, @@ -2898,7 +2897,6 @@ mod tests { ..Default::default() } .into() - .into() .into(); vec![second] }, diff --git a/crates/swc_ecma_preset_env/src/lib.rs b/crates/swc_ecma_preset_env/src/lib.rs index 278c34486970..94502b06a016 100644 --- a/crates/swc_ecma_preset_env/src/lib.rs +++ b/crates/swc_ecma_preset_env/src/lib.rs @@ -475,7 +475,6 @@ impl VisitMut for Polyfills { phase: Default::default(), } .into() - .into() }), ); } else { @@ -496,7 +495,6 @@ impl VisitMut for Polyfills { phase: Default::default(), } .into() - .into() }), ); } diff --git a/crates/swc_ecma_transforms_base/src/helpers/mod.rs b/crates/swc_ecma_transforms_base/src/helpers/mod.rs index 90c9327b3385..15261ae32666 100644 --- a/crates/swc_ecma_transforms_base/src/helpers/mod.rs +++ b/crates/swc_ecma_transforms_base/src/helpers/mod.rs @@ -460,7 +460,6 @@ impl InjectHelpers { }], ..Default::default() } - .into() .into(); decl.into() } diff --git a/crates/swc_ecma_transforms_base/src/rename/ops.rs b/crates/swc_ecma_transforms_base/src/rename/ops.rs index 54afe9a18c65..fd61d648493f 100644 --- a/crates/swc_ecma_transforms_base/src/rename/ops.rs +++ b/crates/swc_ecma_transforms_base/src/rename/ops.rs @@ -283,7 +283,6 @@ where declare: *declare, } .into() - .into() .into(); export!( ModuleExportName::Ident(orig_ident), @@ -301,7 +300,6 @@ where .into(), } .into() - .into() } } } @@ -327,7 +325,6 @@ where declare: *declare, } .into() - .into() .into(); export!( ModuleExportName::Ident(orig_ident), @@ -345,7 +342,6 @@ where .into(), } .into() - .into() } } } @@ -374,7 +370,6 @@ where } .into(), } - .into() .into(); return; } @@ -383,7 +378,6 @@ where ..*var.take() } .into() - .into() .into(); self.extra.push( NamedExport { @@ -393,7 +387,6 @@ where type_only: false, with: None, } - .into() .into(), ); } diff --git a/crates/swc_ecma_transforms_module/src/common_js.rs b/crates/swc_ecma_transforms_module/src/common_js.rs index dc930e684737..8e5c83022c3b 100644 --- a/crates/swc_ecma_transforms_module/src/common_js.rs +++ b/crates/swc_ecma_transforms_module/src/common_js.rs @@ -348,14 +348,11 @@ where if decl_mod_ident { let stmt = if is_lazy { - lazy_require(import_expr, mod_ident, self.const_var_kind) - .into() - .into() + lazy_require(import_expr, mod_ident, self.const_var_kind).into() } else { import_expr .into_var_decl(self.const_var_kind, mod_ident.into()) .into() - .into() }; stmts.push(stmt); @@ -444,7 +441,7 @@ where let mut var_decl = require.into_var_decl(self.const_var_kind, id.into()); var_decl.span = span; - var_decl.into().into() + var_decl.into() } .into() } diff --git a/crates/swc_ecma_transforms_module/src/module_decl_strip.rs b/crates/swc_ecma_transforms_module/src/module_decl_strip.rs index b77588684100..b3587951dd89 100644 --- a/crates/swc_ecma_transforms_module/src/module_decl_strip.rs +++ b/crates/swc_ecma_transforms_module/src/module_decl_strip.rs @@ -70,7 +70,7 @@ impl VisitMut for ModuleDeclStrip { match module_decl { ModuleDecl::Import(..) => continue, ModuleDecl::ExportDecl(ExportDecl { decl, .. }) => { - list.push(decl.into().into()); + list.push(decl.into()); } ModuleDecl::ExportNamed(..) => continue, ModuleDecl::ExportDefaultDecl(ExportDefaultDecl { decl, .. }) => match decl @@ -78,14 +78,11 @@ impl VisitMut for ModuleDeclStrip { DefaultDecl::Class(class_expr) => list.extend( class_expr .as_class_decl() - .map(|decl| decl.into().into()) + .map(|decl| decl.into()) .map(From::from), ), DefaultDecl::Fn(fn_expr) => list.extend( - fn_expr - .as_fn_decl() - .map(|decl| decl.into().into()) - .map(From::from), + fn_expr.as_fn_decl().map(|decl| decl.into()).map(From::from), ), DefaultDecl::TsInterfaceDecl(_) => continue, }, @@ -275,7 +272,6 @@ impl VisitMut for ModuleDeclStrip { n.expr .take() .into_var_decl(self.const_var_kind, ident.into()) - .into() .into(), ); } diff --git a/crates/swc_ecma_transforms_module/src/system_js.rs b/crates/swc_ecma_transforms_module/src/system_js.rs index 6211709479ce..c773528777b9 100644 --- a/crates/swc_ecma_transforms_module/src/system_js.rs +++ b/crates/swc_ecma_transforms_module/src/system_js.rs @@ -867,7 +867,7 @@ impl Fold for SystemJs { fn_decl.ident.to_id(), fn_decl.ident.sym.clone(), ); - before_body_stmts.push(fn_decl.into().into()); + before_body_stmts.push(fn_decl.into()); } Decl::Var(var_decl) => { let mut decl = VarDecl { @@ -921,7 +921,6 @@ impl Fold for SystemJs { declare: false, function: fn_expr.function, } - .into() .into(), ); } else { @@ -968,7 +967,7 @@ impl Fold for SystemJs { ); } Decl::Fn(fn_decl) => { - before_body_stmts.push(fn_decl.into().into()); + before_body_stmts.push(fn_decl.into()); } _ => execute_stmts.push(decl.into()), }, diff --git a/crates/swc_ecma_transforms_optimization/src/const_modules.rs b/crates/swc_ecma_transforms_optimization/src/const_modules.rs index e8151866c678..663edda2fa5a 100644 --- a/crates/swc_ecma_transforms_optimization/src/const_modules.rs +++ b/crates/swc_ecma_transforms_optimization/src/const_modules.rs @@ -141,7 +141,7 @@ impl VisitMut for ConstModules { None } else { - Some(import.into().into()) + Some(import.into()) } } _ => Some(item), diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs index e12e5bd003ca..1713e36ec673 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs @@ -430,12 +430,12 @@ impl VisitMut for Remover { if v { // Preserve variables if let Some(var) = alt.and_then(|alt| alt.extract_var_ids_as_var()) { - stmts.push(var.into().into()) + stmts.push(var.into()) } stmts.push(*cons); } else { if let Some(var) = cons.extract_var_ids_as_var() { - stmts.push(var.into().into()) + stmts.push(var.into()) } if let Some(alt) = alt { @@ -1330,7 +1330,7 @@ impl Remover { for t in iter { match t.try_into_stmt() { Ok(Stmt::Decl(Decl::Fn(f))) => { - hoisted_fns.push(T::from_stmt(f.into().into())); + hoisted_fns.push(T::from_stmt(f.into())); } Ok(t) => { let ids = extract_var_ids(&t).into_iter().map(|i| { diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs index eb55432f4ba9..56d85c701c99 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs @@ -919,7 +919,7 @@ impl VisitMut for TreeShaker { { debug!("Dropping an import because it's not used"); self.changed = true; - *n = EmptyStmt { span: DUMMY_SP }.into().into(); + *n = EmptyStmt { span: DUMMY_SP }.into(); } } _ => { diff --git a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs index f6352aa5b40e..ac41a51cad48 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs @@ -730,7 +730,7 @@ impl Decorator2022_03 { })); self.state = old_state; - c.take().into().into() + c.take().into() } fn process_decorators(&mut self, decorators: &mut [Decorator]) { @@ -1600,7 +1600,6 @@ impl VisitMut for Decorator2022_03 { ..Default::default() } .into() - .into() .into(), ); } @@ -1611,7 +1610,6 @@ impl VisitMut for Decorator2022_03 { span: DUMMY_SP, expr: Expr::from_exprs(self.pre_class_inits.take()), } - .into() .into(), ); } @@ -1648,7 +1646,6 @@ impl VisitMut for Decorator2022_03 { type_only: false, with: None, } - .into() .into(), ); } @@ -1808,7 +1805,6 @@ impl VisitMut for Decorator2022_03 { declare: false, ..Default::default() } - .into() .into(), ); } diff --git a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs index 4dde73e58f9a..50fd6608fe89 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs @@ -245,7 +245,7 @@ impl Fold for Decorators { }) => handle_class!(class, ident), _ => { - let item = ExportDefaultExpr { span, expr }.into().into(); + let item = ExportDefaultExpr { span, expr }.into(); buf.push(item.fold_with(self)); } }, @@ -597,7 +597,6 @@ impl Decorators { .into(), declare: false, } - .into() .into(), )) .chain(iter::once( diff --git a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs index 15ba8b763527..ebb76da5e2cf 100644 --- a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs +++ b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs @@ -83,7 +83,6 @@ impl ExplicitResourceManagement { decls: vec![using_ctx_var], ..Default::default() } - .into() .into(), ); @@ -94,7 +93,7 @@ impl ExplicitResourceManagement { } Ok(Stmt::Decl(Decl::Var(var))) => { // var.kind = VarDeclKind::Var; - try_body.push(var.into().into()); + try_body.push(var.into()); } Ok(stmt) => try_body.push(stmt), Err(stmt) => match stmt.try_into_module_decl() { @@ -146,7 +145,6 @@ impl ExplicitResourceManagement { }], ..Default::default() } - .into() .into(), ); } @@ -190,7 +188,6 @@ impl ExplicitResourceManagement { }], ..Default::default() } - .into() .into(), ); } @@ -216,7 +213,6 @@ impl ExplicitResourceManagement { decls: vec![var], ..Default::default() } - .into() .into(), )); @@ -283,7 +279,6 @@ impl ExplicitResourceManagement { decls: var_decls, ..Default::default() } - .into() .into(), )); @@ -498,7 +493,6 @@ impl VisitMut for ExplicitResourceManagement { .collect(), ..Default::default() } - .into() .into(); } } diff --git a/crates/swc_ecma_transforms_proposal/src/export_default_from.rs b/crates/swc_ecma_transforms_proposal/src/export_default_from.rs index 34fb7ae70ded..2e27ee49d13a 100644 --- a/crates/swc_ecma_transforms_proposal/src/export_default_from.rs +++ b/crates/swc_ecma_transforms_proposal/src/export_default_from.rs @@ -82,7 +82,6 @@ impl VisitMut for ExportDefaultFrom { type_only: false, with: None, } - .into() .into(), ); @@ -95,7 +94,6 @@ impl VisitMut for ExportDefaultFrom { type_only: false, with, } - .into() .into(), ); } diff --git a/crates/swc_ecma_transforms_react/src/jsx/mod.rs b/crates/swc_ecma_transforms_react/src/jsx/mod.rs index dd478b812a6c..fae7124c6209 100644 --- a/crates/swc_ecma_transforms_react/src/jsx/mod.rs +++ b/crates/swc_ecma_transforms_react/src/jsx/mod.rs @@ -1110,7 +1110,6 @@ where with: Default::default(), phase: Default::default(), } - .into() .into(), ) }); @@ -1193,7 +1192,6 @@ fn add_require(imports: Vec<(Ident, IdentName)>, src: &str, unresolved_mark: Mar ..Default::default() } .into() - .into() } impl Jsx diff --git a/crates/swc_ecma_transforms_react/src/refresh/mod.rs b/crates/swc_ecma_transforms_react/src/refresh/mod.rs index bd55034df739..75d771d732c1 100644 --- a/crates/swc_ecma_transforms_react/src/refresh/mod.rs +++ b/crates/swc_ecma_transforms_react/src/refresh/mod.rs @@ -358,7 +358,6 @@ impl VisitMut for Refresh { expr: Box::new(make_assign_stmt(reg[0].0.clone(), expr.take())), span: *span, } - .into() .into(); Persist::Hoc(Hoc { insert: false, @@ -408,7 +407,6 @@ impl VisitMut for Refresh { persistent_id.into(), )), } - .into() .into(), ); } @@ -425,7 +423,6 @@ impl VisitMut for Refresh { Ident::new(name.0.clone(), DUMMY_SP, name.1).into(), )), } - .into() .into(), ) } @@ -480,7 +477,6 @@ impl VisitMut for Refresh { } .into(), } - .into() .into(), ); } diff --git a/crates/swc_ecma_transforms_testing/src/lib.rs b/crates/swc_ecma_transforms_testing/src/lib.rs index daa8f01d8cf5..02d5603322de 100644 --- a/crates/swc_ecma_transforms_testing/src/lib.rs +++ b/crates/swc_ecma_transforms_testing/src/lib.rs @@ -245,7 +245,6 @@ impl VisitMut for RegeneratorHandler { } .into() .into() - .into() } } } diff --git a/crates/swc_ecma_transforms_typescript/src/transform.rs b/crates/swc_ecma_transforms_typescript/src/transform.rs index b8d448a48f0d..3d53c768419b 100644 --- a/crates/swc_ecma_transforms_typescript/src/transform.rs +++ b/crates/swc_ecma_transforms_typescript/src/transform.rs @@ -485,7 +485,7 @@ impl Transform { var_decl.span = decl.span; - var_decl.into().into() + var_decl.into() }; stmts.push(stmt); @@ -1025,10 +1025,9 @@ impl Transform { decl: var_decl.into(), } .into() - .into() } else { var_decl.span = decl.span; - var_decl.into().into() + var_decl.into() }; n.push(module_item); } @@ -1058,7 +1057,7 @@ impl Transform { .into_var_decl(VarDeclKind::Const, decl.id.take().into()); var_decl.span = decl.span; - n.push(var_decl.into().into()); + n.push(var_decl.into()); } TsImportExportAssignConfig::Preserve => n.push(module_item), TsImportExportAssignConfig::NodeNext => { @@ -1075,10 +1074,9 @@ impl Transform { decl: var_decl.into(), } .into() - .into() } else { var_decl.span = decl.span; - var_decl.into().into().into() + var_decl.into().into() }; n.push(module_item); } @@ -1127,7 +1125,6 @@ impl Transform { with: None, phase: Default::default(), } - .into() .into(), // const __require = _createRequire(import.meta.url); create_require @@ -1142,7 +1139,6 @@ impl Transform { ) .into_var_decl(VarDeclKind::Const, require.clone().into()) .into() - .into() .into(), ]); } @@ -1167,12 +1163,11 @@ impl Transform { ), ), } - .into() .into(), ); } TsImportExportAssignConfig::Preserve => { - n.push(cjs_export_assign.into().into()); + n.push(cjs_export_assign.into()); } TsImportExportAssignConfig::NodeNext | TsImportExportAssignConfig::EsNext => { // TS1203 diff --git a/crates/swc_ecma_transforms_typescript/src/typescript.rs b/crates/swc_ecma_transforms_typescript/src/typescript.rs index 83e84fda0886..7dadcec557e2 100644 --- a/crates/swc_ecma_transforms_typescript/src/typescript.rs +++ b/crates/swc_ecma_transforms_typescript/src/typescript.rs @@ -94,7 +94,6 @@ impl TypeScript { span, ..NamedExport::dummy() } - .into() .into(), ); } diff --git a/crates/swc_ecma_utils/src/constructor.rs b/crates/swc_ecma_utils/src/constructor.rs index 4a7f04938767..25f3b5ac00a5 100644 --- a/crates/swc_ecma_utils/src/constructor.rs +++ b/crates/swc_ecma_utils/src/constructor.rs @@ -100,7 +100,6 @@ impl<'a> Fold for Injector<'a> { ..Default::default() } .into() - .into() })); buf.push(stmt); } diff --git a/crates/swc_ecma_utils/src/function/fn_env_hoister.rs b/crates/swc_ecma_utils/src/function/fn_env_hoister.rs index ab2d30adaf50..4716aaa2b9a2 100644 --- a/crates/swc_ecma_utils/src/function/fn_env_hoister.rs +++ b/crates/swc_ecma_utils/src/function/fn_env_hoister.rs @@ -129,7 +129,6 @@ impl FnEnvHoister { decls, ..Default::default() } - .into() .into(), ) } @@ -190,7 +189,6 @@ impl FnEnvHoister { decls, ..Default::default() } - .into() .into(), ), this, @@ -314,7 +312,6 @@ impl VisitMut for FnEnvHoister { .collect(), ..Default::default() } - .into() .into(), ) } diff --git a/crates/swc_ecma_utils/src/function/function_wrapper.rs b/crates/swc_ecma_utils/src/function/function_wrapper.rs index 6b7ead3fe814..42a883f5b8af 100644 --- a/crates/swc_ecma_utils/src/function/function_wrapper.rs +++ b/crates/swc_ecma_utils/src/function/function_wrapper.rs @@ -123,7 +123,6 @@ impl FunctionWrapper { ..Default::default() } - .into() .into(); let fn_decl_stmt = { @@ -135,7 +134,6 @@ impl FunctionWrapper { function, } .into() - .into() }; let return_stmt = ReturnStmt { diff --git a/crates/swc_estree_compat/src/swcify/stmt.rs b/crates/swc_estree_compat/src/swcify/stmt.rs index 3fbef69086ad..0acb89fa96dd 100644 --- a/crates/swc_estree_compat/src/swcify/stmt.rs +++ b/crates/swc_estree_compat/src/swcify/stmt.rs @@ -56,7 +56,7 @@ impl Swcify for Statement { Statement::Expr(v) => v.swcify(ctx).into(), Statement::ForIn(v) => v.swcify(ctx).into(), Statement::For(v) => v.swcify(ctx).into(), - Statement::FuncDecl(v) => v.swcify(ctx).into().into(), + Statement::FuncDecl(v) => v.swcify(ctx).into(), Statement::If(v) => v.swcify(ctx).into(), Statement::Labeled(v) => v.swcify(ctx).into(), Statement::Return(v) => v.swcify(ctx).into(), @@ -66,21 +66,21 @@ impl Swcify for Statement { Statement::VarDecl(v) => v.swcify(ctx).into(), Statement::While(v) => v.swcify(ctx).into(), Statement::With(v) => v.swcify(ctx).into(), - Statement::ClassDecl(v) => v.swcify(ctx).into().into(), + Statement::ClassDecl(v) => v.swcify(ctx).into(), Statement::ExportAllDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx).into()), Statement::ExportDefaultDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx)), Statement::ExportNamedDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx).into()), Statement::ForOf(v) => v.swcify(ctx).into(), Statement::ImportDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx).into()), - Statement::DeclClass(v) => v.swcify(ctx).into().into(), - Statement::DeclFunc(v) => v.swcify(ctx).into().into(), - Statement::DeclInterface(v) => v.swcify(ctx).into().into(), - Statement::DeclModule(v) => v.swcify(ctx).into().into(), + Statement::DeclClass(v) => v.swcify(ctx).into(), + Statement::DeclFunc(v) => v.swcify(ctx).into(), + Statement::DeclInterface(v) => v.swcify(ctx).into(), + Statement::DeclModule(v) => v.swcify(ctx).into(), Statement::DeclareModuleExports(v) => { return ModuleItem::ModuleDecl(v.swcify(ctx).into()) } - Statement::DeclTypeAlias(v) => v.swcify(ctx).into().into(), - Statement::DeclVar(v) => v.swcify(ctx).into().into(), + Statement::DeclTypeAlias(v) => v.swcify(ctx).into(), + Statement::DeclVar(v) => v.swcify(ctx).into(), Statement::DeclExportDeclaration(v) => { return ModuleItem::ModuleDecl(v.swcify(ctx).into()) } diff --git a/crates/swc_node_bundler/src/loaders/json.rs b/crates/swc_node_bundler/src/loaders/json.rs index dcac08ce49e4..9261a96bafe7 100644 --- a/crates/swc_node_bundler/src/loaders/json.rs +++ b/crates/swc_node_bundler/src/loaders/json.rs @@ -24,7 +24,6 @@ pub(super) fn load_json_as_module(fm: &Arc) -> Result } .into(), } - .into() .into(); Ok(Module { diff --git a/crates/swc_typescript/src/fast_dts/mod.rs b/crates/swc_typescript/src/fast_dts/mod.rs index 7730d9e5e8fd..0845b7083898 100644 --- a/crates/swc_typescript/src/fast_dts/mod.rs +++ b/crates/swc_typescript/src/fast_dts/mod.rs @@ -133,7 +133,6 @@ impl FastDts { decl: decl.take(), span: *span, } - .into() .into(), ); } else { @@ -195,7 +194,6 @@ impl FastDts { ..Default::default() } .into() - .into() .into(), ); @@ -204,7 +202,6 @@ impl FastDts { span: export.span, expr: name_ident.into(), } - .into() .into(), ) } else { @@ -213,7 +210,6 @@ impl FastDts { span: export.span, expr: export.expr.take(), } - .into() .into(), ) } From fc29b2167ba3267e10d417eb6a9163fd4f2da2a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 15:51:56 +0900 Subject: [PATCH 08/33] into into --- crates/swc_bundler/src/bundler/chunk/cjs.rs | 2 -- crates/swc_bundler/src/bundler/chunk/computed_key.rs | 2 +- crates/swc_bundler/src/bundler/chunk/merge.rs | 11 +++-------- crates/swc_bundler/src/util.rs | 1 - crates/swc_ecma_compat_es3/src/reserved_word.rs | 2 +- .../swc_ecma_minifier/src/compress/pure/dead_code.rs | 2 +- crates/swc_ecma_parser/src/parser/typescript.rs | 2 -- crates/swc_ecma_transforms_base/src/rename/ops.rs | 3 --- .../src/decorator_2022_03.rs | 1 - crates/swc_ecma_transforms_testing/src/lib.rs | 1 - .../swc_ecma_transforms_typescript/src/transform.rs | 3 +-- crates/swc_typescript/src/fast_dts/mod.rs | 1 - 12 files changed, 7 insertions(+), 24 deletions(-) diff --git a/crates/swc_bundler/src/bundler/chunk/cjs.rs b/crates/swc_bundler/src/bundler/chunk/cjs.rs index 7c40279e6b5c..49885693e2c4 100644 --- a/crates/swc_bundler/src/bundler/chunk/cjs.rs +++ b/crates/swc_bundler/src/bundler/chunk/cjs.rs @@ -313,7 +313,6 @@ where }], ..Default::default() } - .into() .into(); return; } @@ -343,7 +342,6 @@ where }], ..Default::default() } - .into() .into(); } } diff --git a/crates/swc_bundler/src/bundler/chunk/computed_key.rs b/crates/swc_bundler/src/bundler/chunk/computed_key.rs index c4b117b4a4d9..b6f39b217871 100644 --- a/crates/swc_bundler/src/bundler/chunk/computed_key.rs +++ b/crates/swc_bundler/src/bundler/chunk/computed_key.rs @@ -181,7 +181,7 @@ where }], }; - module.append(id, var_decl.into().into()); + module.append(id, var_decl.into()); // print_hygiene( // "wrap", diff --git a/crates/swc_bundler/src/bundler/chunk/merge.rs b/crates/swc_bundler/src/bundler/chunk/merge.rs index 3e4be8b798f1..5eedbe9be599 100644 --- a/crates/swc_bundler/src/bundler/chunk/merge.rs +++ b/crates/swc_bundler/src/bundler/chunk/merge.rs @@ -685,7 +685,6 @@ where class: c.class, declare: false, } - .into() .into(), ); @@ -714,7 +713,6 @@ where function: f.function, declare: false, } - .into() .into(), ); @@ -736,7 +734,6 @@ where function: f.function, declare: false, } - .into() .into(), ); @@ -850,13 +847,13 @@ where let local = match export.decl { Decl::Class(c) => { let i = c.ident.clone(); - new.push(c.into().into()); + new.push(c.into()); i } Decl::Fn(f) => { let i = f.ident.clone(); - new.push(f.into().into()); + new.push(f.into()); i } @@ -864,7 +861,7 @@ where let ids: Vec = find_pat_ids(&v); // - new.push(v.into().into()); + new.push(v.into()); let export = NamedExport { span: export.span, @@ -1076,7 +1073,6 @@ where decls: vars, ..Default::default() } - .into() .into(), ); } @@ -1390,7 +1386,6 @@ impl VisitMut for ImportMetaHandler<'_, '_> { }], ..Default::default() } - .into() .into(), ); } diff --git a/crates/swc_bundler/src/util.rs b/crates/swc_bundler/src/util.rs index 1278740b13ce..ca8e140ad055 100644 --- a/crates/swc_bundler/src/util.rs +++ b/crates/swc_bundler/src/util.rs @@ -37,7 +37,6 @@ pub(crate) trait VarDeclaratorExt: Into { }, } .into() - .into() } } diff --git a/crates/swc_ecma_compat_es3/src/reserved_word.rs b/crates/swc_ecma_compat_es3/src/reserved_word.rs index 25f47fc50078..3e681423e4ad 100644 --- a/crates/swc_ecma_compat_es3/src/reserved_word.rs +++ b/crates/swc_ecma_compat_es3/src/reserved_word.rs @@ -101,7 +101,7 @@ impl VisitMut for ReservedWord { ); } - *module_item = var.take().into().into(); + *module_item = var.take().into(); } _ => {} diff --git a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs index 1fe1ea318f8e..21b6371ffdd1 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs @@ -246,7 +246,7 @@ impl Pure<'_> { |(mut decls, mut hoisted_fns, mut new_stmts), stmt| { match stmt.take().try_into_stmt() { Ok(Stmt::Decl(Decl::Fn(f))) => { - hoisted_fns.push(f.into().into()); + hoisted_fns.push(f.into()); } Ok(t) => { let ids = extract_var_ids(&t).into_iter().map(|i| VarDeclarator { diff --git a/crates/swc_ecma_parser/src/parser/typescript.rs b/crates/swc_ecma_parser/src/parser/typescript.rs index 68d1ae98f5ca..714ed00d1044 100644 --- a/crates/swc_ecma_parser/src/parser/typescript.rs +++ b/crates/swc_ecma_parser/src/parser/typescript.rs @@ -2855,7 +2855,6 @@ mod tests { }), })), } - .into() .into(); vec![first] }, @@ -2896,7 +2895,6 @@ mod tests { }], ..Default::default() } - .into() .into(); vec![second] }, diff --git a/crates/swc_ecma_transforms_base/src/rename/ops.rs b/crates/swc_ecma_transforms_base/src/rename/ops.rs index fd61d648493f..4a0b967df148 100644 --- a/crates/swc_ecma_transforms_base/src/rename/ops.rs +++ b/crates/swc_ecma_transforms_base/src/rename/ops.rs @@ -282,7 +282,6 @@ where class: class.take(), declare: *declare, } - .into() .into(); export!( ModuleExportName::Ident(orig_ident), @@ -324,7 +323,6 @@ where function, declare: *declare, } - .into() .into(); export!( ModuleExportName::Ident(orig_ident), @@ -377,7 +375,6 @@ where decls, ..*var.take() } - .into() .into(); self.extra.push( NamedExport { diff --git a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs index ac41a51cad48..3bca37705697 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorator_2022_03.rs @@ -1599,7 +1599,6 @@ impl VisitMut for Decorator2022_03 { declare: false, ..Default::default() } - .into() .into(), ); } diff --git a/crates/swc_ecma_transforms_testing/src/lib.rs b/crates/swc_ecma_transforms_testing/src/lib.rs index 02d5603322de..76ca6ba2de75 100644 --- a/crates/swc_ecma_transforms_testing/src/lib.rs +++ b/crates/swc_ecma_transforms_testing/src/lib.rs @@ -244,7 +244,6 @@ impl VisitMut for RegeneratorHandler { ..Default::default() } .into() - .into() } } } diff --git a/crates/swc_ecma_transforms_typescript/src/transform.rs b/crates/swc_ecma_transforms_typescript/src/transform.rs index 3d53c768419b..4c261e4e4219 100644 --- a/crates/swc_ecma_transforms_typescript/src/transform.rs +++ b/crates/swc_ecma_transforms_typescript/src/transform.rs @@ -1076,7 +1076,7 @@ impl Transform { .into() } else { var_decl.span = decl.span; - var_decl.into().into() + var_decl.into() }; n.push(module_item); } @@ -1138,7 +1138,6 @@ impl Transform { .as_arg()], ) .into_var_decl(VarDeclKind::Const, require.clone().into()) - .into() .into(), ]); } diff --git a/crates/swc_typescript/src/fast_dts/mod.rs b/crates/swc_typescript/src/fast_dts/mod.rs index 0845b7083898..ef6152bd35d6 100644 --- a/crates/swc_typescript/src/fast_dts/mod.rs +++ b/crates/swc_typescript/src/fast_dts/mod.rs @@ -193,7 +193,6 @@ impl FastDts { }], ..Default::default() } - .into() .into(), ); From f5a41751621e716ae3c800b15e76fd75d0fb0cbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 15:53:21 +0900 Subject: [PATCH 09/33] Fix AST --- crates/swc_ecma_ast/src/decl.rs | 6 +++++- crates/swc_ecma_ast/src/module.rs | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/swc_ecma_ast/src/decl.rs b/crates/swc_ecma_ast/src/decl.rs index 0e0f4b4721e9..545093ee4e80 100644 --- a/crates/swc_ecma_ast/src/decl.rs +++ b/crates/swc_ecma_ast/src/decl.rs @@ -9,6 +9,7 @@ use crate::{ ident::Ident, pat::Pat, typescript::{TsEnumDecl, TsInterfaceDecl, TsModuleDecl, TsTypeAliasDecl}, + Invalid, }; #[ast_node] @@ -33,6 +34,9 @@ pub enum Decl { TsEnum(Box), #[tag("TsModuleDeclaration")] TsModule(Box), + + #[tag("Invalid")] + Invalid(Invalid), } bridge_decl_from!(Box, VarDecl); @@ -46,7 +50,7 @@ bridge_stmt_from!(Decl, FnDecl); impl Take for Decl { fn dummy() -> Self { - Take::dummy().into() + Decl::Invalid(Default::default()) } } diff --git a/crates/swc_ecma_ast/src/module.rs b/crates/swc_ecma_ast/src/module.rs index ed329fb007f8..fe9456d323e1 100644 --- a/crates/swc_ecma_ast/src/module.rs +++ b/crates/swc_ecma_ast/src/module.rs @@ -126,6 +126,6 @@ pub enum ModuleItem { impl Take for ModuleItem { fn dummy() -> Self { - Take::dummy().into() + Self::Stmt(Default::default()) } } From ae2b27a93e8bc68efd48704bfa6fe9a003f7eafc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 15:53:51 +0900 Subject: [PATCH 10/33] More work --- crates/swc_ecma_codegen/src/decl.rs | 1 + crates/swc_ecma_parser/src/parser/typescript.rs | 3 +++ 2 files changed, 4 insertions(+) diff --git a/crates/swc_ecma_codegen/src/decl.rs b/crates/swc_ecma_codegen/src/decl.rs index b4010c7440e3..4adb2daf37c2 100644 --- a/crates/swc_ecma_codegen/src/decl.rs +++ b/crates/swc_ecma_codegen/src/decl.rs @@ -26,6 +26,7 @@ where Decl::TsInterface(ref n) => emit!(n), Decl::TsModule(ref n) => emit!(n), Decl::TsTypeAlias(ref n) => emit!(n), + Decl::Invalid(ref n) => emit!(n), } } diff --git a/crates/swc_ecma_parser/src/parser/typescript.rs b/crates/swc_ecma_parser/src/parser/typescript.rs index 714ed00d1044..04566c4aef6e 100644 --- a/crates/swc_ecma_parser/src/parser/typescript.rs +++ b/crates/swc_ecma_parser/src/parser/typescript.rs @@ -2816,6 +2816,9 @@ fn make_decl_declare(mut decl: Decl) -> Decl { Decl::TsEnum(ref mut e) => e.declare = true, Decl::TsModule(ref mut m) => m.declare = true, Decl::Using(..) => unreachable!("Using is not a valid declaration for `declare` keyword"), + Decl::Invalid(..) => { + unreachable!() + } } decl From fe3ef8e1652b16ec878db53d5face5db035ba3a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 15:59:09 +0900 Subject: [PATCH 11/33] More from impl --- crates/swc_ecma_ast/src/macros.rs | 10 ++++++++++ crates/swc_ecma_ast/src/module_decl.rs | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/crates/swc_ecma_ast/src/macros.rs b/crates/swc_ecma_ast/src/macros.rs index 1d3e8c1b771b..588863a2e208 100644 --- a/crates/swc_ecma_ast/src/macros.rs +++ b/crates/swc_ecma_ast/src/macros.rs @@ -185,6 +185,16 @@ macro_rules! test_de { }; } +macro_rules! boxed { + ($T:ty, [$($variant_ty:ty),*]) => { + $( + bridge_from!(Box<$T>, $T, $variant_ty); + bridge_from!(Box<$T>, $T, Box<$variant_ty>); + bridge_from!($T, Box<$variant_ty>, $variant_ty); + )* + }; +} + /// Implement `From<$src>` for `$dst`, by using implementation of `From<$src>` /// for `$bridge`. /// diff --git a/crates/swc_ecma_ast/src/module_decl.rs b/crates/swc_ecma_ast/src/module_decl.rs index 383cf802c420..df23cd837afd 100644 --- a/crates/swc_ecma_ast/src/module_decl.rs +++ b/crates/swc_ecma_ast/src/module_decl.rs @@ -43,6 +43,28 @@ pub enum ModuleDecl { TsNamespaceExport(TsNamespaceExportDecl), } +boxed!(ModuleDecl, [TsImportEqualsDecl]); + +macro_rules! module_decl { + ([$($variant:ty),*]) => { + $( + bridge_from!(crate::ModuleItem, crate::ModuleDecl, $variant); + )* + }; +} + +module_decl!([ + ImportDecl, + ExportDecl, + NamedExport, + ExportDefaultDecl, + ExportDefaultExpr, + ExportAll, + TsImportEqualsDecl, + TsExportAssignment, + TsNamespaceExportDecl +]); + impl Take for ModuleDecl { fn dummy() -> Self { ImportDecl::dummy().into() From fe25324a51f9b13bcc078d1db4aa691fe13e0632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:00:17 +0900 Subject: [PATCH 12/33] More from impl --- crates/swc_ecma_ast/src/macros.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/swc_ecma_ast/src/macros.rs b/crates/swc_ecma_ast/src/macros.rs index 588863a2e208..6d54e1304700 100644 --- a/crates/swc_ecma_ast/src/macros.rs +++ b/crates/swc_ecma_ast/src/macros.rs @@ -242,6 +242,8 @@ macro_rules! bridge_decl_from { ($bridge:ty, $src:ty) => { bridge_from!(crate::Decl, $bridge, $src); bridge_from!(crate::Stmt, crate::Decl, $src); + bridge_from!(crate::Stmt, crate::Decl, $bridge); bridge_from!(crate::ModuleItem, crate::Stmt, $src); + bridge_from!(crate::ModuleItem, crate::Stmt, $bridge); }; } From aefd3a0cac1cf84081d60598c09ff3935f4ce82a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:01:52 +0900 Subject: [PATCH 13/33] More ast work --- crates/swc_ecma_ast/src/decl.rs | 2 -- crates/swc_ecma_ast/src/macros.rs | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/swc_ecma_ast/src/decl.rs b/crates/swc_ecma_ast/src/decl.rs index 545093ee4e80..9838e7b78e7b 100644 --- a/crates/swc_ecma_ast/src/decl.rs +++ b/crates/swc_ecma_ast/src/decl.rs @@ -45,8 +45,6 @@ bridge_decl_from!(Box, TsInterfaceDecl); bridge_decl_from!(Box, TsTypeAliasDecl); bridge_decl_from!(Box, TsEnumDecl); bridge_decl_from!(Box, TsModuleDecl); -bridge_stmt_from!(Decl, ClassDecl); -bridge_stmt_from!(Decl, FnDecl); impl Take for Decl { fn dummy() -> Self { diff --git a/crates/swc_ecma_ast/src/macros.rs b/crates/swc_ecma_ast/src/macros.rs index 6d54e1304700..76900d1d9d2e 100644 --- a/crates/swc_ecma_ast/src/macros.rs +++ b/crates/swc_ecma_ast/src/macros.rs @@ -234,6 +234,7 @@ macro_rules! bridge_pat_from { macro_rules! bridge_stmt_from { ($bridge:ty, $src:ty) => { bridge_from!(crate::Stmt, $bridge, $src); + bridge_from!(crate::ModuleItem, crate::Stmt, $bridge); bridge_from!(crate::ModuleItem, crate::Stmt, $src); }; } From 078d2d2503b0dc67d3e6aa92c6c14c51d247f071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:01:54 +0900 Subject: [PATCH 14/33] More fix --- crates/swc_ecma_codegen/src/util.rs | 1 + crates/swc_typescript/src/fast_dts/mod.rs | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/swc_ecma_codegen/src/util.rs b/crates/swc_ecma_codegen/src/util.rs index c8d692a0d7ff..56cce8c10c7c 100644 --- a/crates/swc_ecma_codegen/src/util.rs +++ b/crates/swc_ecma_codegen/src/util.rs @@ -328,6 +328,7 @@ impl StartsWithAlphaNum for Decl { | Decl::TsModule(..) | Decl::TsTypeAlias(..) | Decl::Using(..) => true, + Decl::Invalid(..) => false, } } } diff --git a/crates/swc_typescript/src/fast_dts/mod.rs b/crates/swc_typescript/src/fast_dts/mod.rs index ef6152bd35d6..9342e557896e 100644 --- a/crates/swc_typescript/src/fast_dts/mod.rs +++ b/crates/swc_typescript/src/fast_dts/mod.rs @@ -230,6 +230,7 @@ impl FastDts { Decl::TsInterface(_) | Decl::TsTypeAlias(_) | Decl::Using(_) => { new_items.push(item); } + Decl::Invalid(_) => unreachable!(), }, ModuleItem::Stmt(..) => {} @@ -563,7 +564,7 @@ impl FastDts { Some(()) } } - Decl::TsInterface(_) | Decl::TsTypeAlias(_) => Some(()), + Decl::TsInterface(_) | Decl::TsTypeAlias(_) | Decl::Invalid(..) => Some(()), Decl::Using(_) => { self.mark_diagnostic(DtsIssue::UnsupportedUsing { range: self.source_range_to_range(decl.span()), From 86b25f5b76d4e1bbe62830b4aa68727e0304a8ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:04:38 +0900 Subject: [PATCH 15/33] More from impl --- crates/swc_ecma_ast/src/macros.rs | 8 -------- crates/swc_ecma_ast/src/stmt.rs | 34 +++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/crates/swc_ecma_ast/src/macros.rs b/crates/swc_ecma_ast/src/macros.rs index 76900d1d9d2e..3f91c50b635f 100644 --- a/crates/swc_ecma_ast/src/macros.rs +++ b/crates/swc_ecma_ast/src/macros.rs @@ -231,14 +231,6 @@ macro_rules! bridge_pat_from { }; } -macro_rules! bridge_stmt_from { - ($bridge:ty, $src:ty) => { - bridge_from!(crate::Stmt, $bridge, $src); - bridge_from!(crate::ModuleItem, crate::Stmt, $bridge); - bridge_from!(crate::ModuleItem, crate::Stmt, $src); - }; -} - macro_rules! bridge_decl_from { ($bridge:ty, $src:ty) => { bridge_from!(crate::Decl, $bridge, $src); diff --git a/crates/swc_ecma_ast/src/stmt.rs b/crates/swc_ecma_ast/src/stmt.rs index 8e0dabab6646..33e0b050c535 100644 --- a/crates/swc_ecma_ast/src/stmt.rs +++ b/crates/swc_ecma_ast/src/stmt.rs @@ -108,6 +108,38 @@ pub enum Stmt { Expr(ExprStmt), } +boxed!(Stmt, [TryStmt]); + +macro_rules! stmt_from { + ($($varant_ty:ty),*) => { + $( + bridge_from!(crate::ModuleItem, crate::Stmt, $varant_ty); + )* + }; +} + +stmt_from!( + ExprStmt, + BlockStmt, + EmptyStmt, + DebuggerStmt, + WithStmt, + ReturnStmt, + LabeledStmt, + BreakStmt, + ContinueStmt, + IfStmt, + SwitchStmt, + ThrowStmt, + TryStmt, + WhileStmt, + DoWhileStmt, + ForStmt, + ForInStmt, + ForOfStmt, + Decl +); + impl Stmt { pub fn is_use_strict(&self) -> bool { match self { @@ -176,8 +208,6 @@ impl Take for Stmt { } } -bridge_stmt_from!(Box, TryStmt); - #[ast_node("ExpressionStatement")] #[derive(Eq, Hash, EqIgnoreSpan, Default)] #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] From 5dc654eb1c7ee4d5dee8f8242104bb99c412df58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:05:06 +0900 Subject: [PATCH 16/33] More fix --- crates/swc_ecma_quote_macros/src/ast/decl.rs | 3 ++- crates/swc_ecma_visit/src/lib.rs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/swc_ecma_quote_macros/src/ast/decl.rs b/crates/swc_ecma_quote_macros/src/ast/decl.rs index fe3fcc3ccb7b..00bfb8ae3662 100644 --- a/crates/swc_ecma_quote_macros/src/ast/decl.rs +++ b/crates/swc_ecma_quote_macros/src/ast/decl.rs @@ -10,7 +10,8 @@ impl_enum!( TsTypeAlias, TsEnum, TsModule, - Using + Using, + Invalid ] ); diff --git a/crates/swc_ecma_visit/src/lib.rs b/crates/swc_ecma_visit/src/lib.rs index 0d72d783fcdd..53021232b3c0 100644 --- a/crates/swc_ecma_visit/src/lib.rs +++ b/crates/swc_ecma_visit/src/lib.rs @@ -646,6 +646,7 @@ define!({ TsTypeAlias(Box), TsEnum(Box), TsModule(Box), + Invalid(Invalid), } pub struct FnDecl { pub ident: Ident, From 5a51b5350de9f170af5bbd29757f5d58c028dfbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:07:14 +0900 Subject: [PATCH 17/33] More from impl --- crates/swc_ecma_ast/src/decl.rs | 37 ++++++++++++++++++++++++++----- crates/swc_ecma_ast/src/macros.rs | 10 --------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/crates/swc_ecma_ast/src/decl.rs b/crates/swc_ecma_ast/src/decl.rs index 9838e7b78e7b..c09521398fda 100644 --- a/crates/swc_ecma_ast/src/decl.rs +++ b/crates/swc_ecma_ast/src/decl.rs @@ -39,12 +39,37 @@ pub enum Decl { Invalid(Invalid), } -bridge_decl_from!(Box, VarDecl); -bridge_decl_from!(Box, UsingDecl); -bridge_decl_from!(Box, TsInterfaceDecl); -bridge_decl_from!(Box, TsTypeAliasDecl); -bridge_decl_from!(Box, TsEnumDecl); -bridge_decl_from!(Box, TsModuleDecl); +boxed!( + Decl, + [ + VarDecl, + UsingDecl, + TsInterfaceDecl, + TsTypeAliasDecl, + TsEnumDecl, + TsModuleDecl + ] +); + +macro_rules! decl_from { + ($($variant_ty:ty),*) => { + $( + bridge_from!(crate::Stmt, Decl, $variant_ty); + bridge_from!(crate::ModuleItem, crate::Stmt, $variant_ty); + )* + }; +} + +decl_from!( + ClassDecl, + FnDecl, + VarDecl, + UsingDecl, + TsInterfaceDecl, + TsTypeAliasDecl, + TsEnumDecl, + TsModuleDecl +); impl Take for Decl { fn dummy() -> Self { diff --git a/crates/swc_ecma_ast/src/macros.rs b/crates/swc_ecma_ast/src/macros.rs index 3f91c50b635f..863f4cb11104 100644 --- a/crates/swc_ecma_ast/src/macros.rs +++ b/crates/swc_ecma_ast/src/macros.rs @@ -230,13 +230,3 @@ macro_rules! bridge_pat_from { bridge_from!(Box, crate::Pat, $src); }; } - -macro_rules! bridge_decl_from { - ($bridge:ty, $src:ty) => { - bridge_from!(crate::Decl, $bridge, $src); - bridge_from!(crate::Stmt, crate::Decl, $src); - bridge_from!(crate::Stmt, crate::Decl, $bridge); - bridge_from!(crate::ModuleItem, crate::Stmt, $src); - bridge_from!(crate::ModuleItem, crate::Stmt, $bridge); - }; -} From 9744e4b56ec6f4ec5ea347c915d1ae98ff5f5cdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:11:20 +0900 Subject: [PATCH 18/33] More from impl --- crates/swc_ecma_ast/src/decl.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/crates/swc_ecma_ast/src/decl.rs b/crates/swc_ecma_ast/src/decl.rs index c09521398fda..12aa57726d78 100644 --- a/crates/swc_ecma_ast/src/decl.rs +++ b/crates/swc_ecma_ast/src/decl.rs @@ -71,6 +71,24 @@ decl_from!( TsModuleDecl ); +macro_rules! decl_from_boxed { + ($($variant_ty:ty),*) => { + $( + bridge_from!(crate::Stmt, Decl, Box<$variant_ty>); + bridge_from!(crate::ModuleItem, crate::Stmt, Box<$variant_ty>); + )* + }; +} + +decl_from_boxed!( + VarDecl, + UsingDecl, + TsInterfaceDecl, + TsTypeAliasDecl, + TsEnumDecl, + TsModuleDecl +); + impl Take for Decl { fn dummy() -> Self { Decl::Invalid(Default::default()) From b10396901e0d219485f81176bfbf38aa0e2da0a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:12:38 +0900 Subject: [PATCH 19/33] More fix --- crates/swc_ecma_transforms_base/src/helpers/mod.rs | 5 ++--- crates/swc_estree_compat/src/babelify/decl.rs | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/swc_ecma_transforms_base/src/helpers/mod.rs b/crates/swc_ecma_transforms_base/src/helpers/mod.rs index 15261ae32666..cc59f2ad26a6 100644 --- a/crates/swc_ecma_transforms_base/src/helpers/mod.rs +++ b/crates/swc_ecma_transforms_base/src/helpers/mod.rs @@ -450,7 +450,7 @@ impl InjectHelpers { ..Default::default() }; let ctxt = SyntaxContext::empty().apply_mark(mark); - let decl = VarDecl { + VarDecl { kind: VarDeclKind::Var, decls: vec![VarDeclarator { span: DUMMY_SP, @@ -460,8 +460,7 @@ impl InjectHelpers { }], ..Default::default() } - .into(); - decl.into() + .into() } fn map_helper_ref_ident(&mut self, ref_ident: &Ident) -> Option { diff --git a/crates/swc_estree_compat/src/babelify/decl.rs b/crates/swc_estree_compat/src/babelify/decl.rs index 656f9b0e77c3..fe8952299328 100644 --- a/crates/swc_estree_compat/src/babelify/decl.rs +++ b/crates/swc_estree_compat/src/babelify/decl.rs @@ -20,6 +20,7 @@ impl Babelify for Decl { Decl::TsTypeAlias(d) => Declaration::TSTypeAliasDecl(d.babelify(ctx)), Decl::TsEnum(d) => Declaration::TSEnumDecl(d.babelify(ctx)), Decl::TsModule(d) => Declaration::TSModuleDecl(d.babelify(ctx)), + Decl::Invalid(d) => unreachable!(), } } } From 8cfaab7b6f6d22526c4cfcc8b40e9a206d64ecc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:14:41 +0900 Subject: [PATCH 20/33] More fix --- crates/swc_ecma_ext_transforms/src/jest.rs | 2 +- crates/swc_ecma_utils/src/lib.rs | 13 +------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/crates/swc_ecma_ext_transforms/src/jest.rs b/crates/swc_ecma_ext_transforms/src/jest.rs index 1c6eb13528db..d4add6a90948 100644 --- a/crates/swc_ecma_ext_transforms/src/jest.rs +++ b/crates/swc_ecma_ext_transforms/src/jest.rs @@ -43,7 +43,7 @@ impl Jest { .. }) => { if self.should_hoist(callee) { - hoisted.push(T::from_stmt(stmt)) + hoisted.push(T::from(stmt)) } else { new.push(T::from_stmt(stmt)) } diff --git a/crates/swc_ecma_utils/src/lib.rs b/crates/swc_ecma_utils/src/lib.rs index ceb30b889a97..63985f5d82b8 100644 --- a/crates/swc_ecma_utils/src/lib.rs +++ b/crates/swc_ecma_utils/src/lib.rs @@ -271,11 +271,10 @@ pub trait ModuleItemLike: StmtLike { } } -pub trait StmtLike: Sized + 'static + Send + Sync { +pub trait StmtLike: Sized + 'static + Send + Sync + From { fn try_into_stmt(self) -> Result; fn as_stmt(&self) -> Option<&Stmt>; fn as_stmt_mut(&mut self) -> Option<&mut Stmt>; - fn from_stmt(stmt: Stmt) -> Self; } impl ModuleItemLike for Stmt {} @@ -295,11 +294,6 @@ impl StmtLike for Stmt { fn as_stmt_mut(&mut self) -> Option<&mut Stmt> { Some(self) } - - #[inline] - fn from_stmt(stmt: Stmt) -> Self { - stmt - } } impl ModuleItemLike for ModuleItem { @@ -340,11 +334,6 @@ impl StmtLike for ModuleItem { _ => None, } } - - #[inline] - fn from_stmt(stmt: Stmt) -> Self { - stmt.into() - } } pub type BoolValue = Value; From 642878afc8d0f3df3b55245c4f02afe116bd909a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:15:07 +0900 Subject: [PATCH 21/33] FIx `StmtLike` --- .../src/block_scoping/mod.rs | 2 +- .../swc_ecma_compat_es2015/src/classes/mod.rs | 4 +- .../src/computed_props.rs | 2 +- .../src/destructuring.rs | 6 +-- crates/swc_ecma_compat_es2015/src/spread.rs | 2 +- .../src/async_to_generator.rs | 4 +- .../swc_ecma_compat_es2018/src/object_rest.rs | 12 ++---- .../src/nullish_coalescing.rs | 2 +- .../src/class_properties/mod.rs | 6 +-- .../src/optional_chaining_impl.rs | 2 +- crates/swc_ecma_ext_transforms/src/jest.rs | 6 +-- .../src/compress/hoist_decls.rs | 12 +++--- .../src/compress/optimize/conditionals.rs | 16 ++++---- .../src/compress/optimize/mod.rs | 10 ++--- .../src/compress/optimize/sequences.rs | 40 +++++++++---------- .../src/compress/pure/dead_code.rs | 26 ++++++------ .../src/compress/pure/vars.rs | 26 ++++++------ .../src/simplify/branch/mod.rs | 16 ++++---- .../src/decorators/legacy/mod.rs | 6 +-- .../src/explicit_resource_management.rs | 6 +-- 20 files changed, 100 insertions(+), 106 deletions(-) diff --git a/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs b/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs index 68855a30a21e..0ccaf410d53d 100644 --- a/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs +++ b/crates/swc_ecma_compat_es2015/src/block_scoping/mod.rs @@ -621,7 +621,7 @@ impl BlockScoping { if !self.vars.is_empty() { prepend_stmt( stmts, - T::from_stmt( + T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, diff --git a/crates/swc_ecma_compat_es2015/src/classes/mod.rs b/crates/swc_ecma_compat_es2015/src/classes/mod.rs index de63a30f6e14..fe8415120fc0 100644 --- a/crates/swc_ecma_compat_es2015/src/classes/mod.rs +++ b/crates/swc_ecma_compat_es2015/src/classes/mod.rs @@ -138,7 +138,7 @@ where let mut decl = self.fold_class_as_var_decl(ident.clone(), class); decl.visit_mut_children_with(self); - buf.push(T::from_stmt(decl.into())); + buf.push(T::from(decl.into())); buf.push( match T::try_from_module_decl( @@ -206,7 +206,7 @@ where } stmt.visit_mut_children_with(self); - buf.push(T::from_stmt(stmt)); + buf.push(T::from(stmt)); } } first = false; diff --git a/crates/swc_ecma_compat_es2015/src/computed_props.rs b/crates/swc_ecma_compat_es2015/src/computed_props.rs index ccb45c7ae445..e813a7b4ab4c 100644 --- a/crates/swc_ecma_compat_es2015/src/computed_props.rs +++ b/crates/swc_ecma_compat_es2015/src/computed_props.rs @@ -389,7 +389,7 @@ impl ComputedProps { // Add variable declaration // e.g. var ref if !folder.vars.is_empty() { - stmts_updated.push(T::from_stmt( + stmts_updated.push(T::from( VarDecl { kind: VarDeclKind::Var, decls: folder.vars, diff --git a/crates/swc_ecma_compat_es2015/src/destructuring.rs b/crates/swc_ecma_compat_es2015/src/destructuring.rs index 35c0d9f400ca..6f6360a3fbc1 100644 --- a/crates/swc_ecma_compat_es2015/src/destructuring.rs +++ b/crates/swc_ecma_compat_es2015/src/destructuring.rs @@ -1088,7 +1088,7 @@ impl Destructuring { // Add variable declaration // e.g. var ref if !folder.vars.is_empty() { - stmts_updated.push(T::from_stmt( + stmts_updated.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -1107,7 +1107,7 @@ impl Destructuring { // Add variable declaration // e.g. var ref if !folder.vars.is_empty() { - stmts_updated.push(T::from_stmt( + stmts_updated.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -1118,7 +1118,7 @@ impl Destructuring { )); } - stmts_updated.push(T::from_stmt(stmt)); + stmts_updated.push(T::from(stmt)); } } } diff --git a/crates/swc_ecma_compat_es2015/src/spread.rs b/crates/swc_ecma_compat_es2015/src/spread.rs index 195504e98daa..f9f9cd9d411c 100644 --- a/crates/swc_ecma_compat_es2015/src/spread.rs +++ b/crates/swc_ecma_compat_es2015/src/spread.rs @@ -209,7 +209,7 @@ impl Spread { if !self.vars.is_empty() { prepend_stmt( items, - T::from_stmt( + T::from( VarDecl { kind: VarDeclKind::Var, decls: self.vars.take(), diff --git a/crates/swc_ecma_compat_es2017/src/async_to_generator.rs b/crates/swc_ecma_compat_es2017/src/async_to_generator.rs index d7d0cd34ca9c..eadd4d540367 100644 --- a/crates/swc_ecma_compat_es2017/src/async_to_generator.rs +++ b/crates/swc_ecma_compat_es2017/src/async_to_generator.rs @@ -107,9 +107,9 @@ impl AsyncToGenerator { }; stmt.visit_mut_with(&mut actual); - stmts_updated.extend(actual.hoist_stmts.into_iter().map(T::from_stmt)); + stmts_updated.extend(actual.hoist_stmts.into_iter().map(T::from)); stmts_updated.push(stmt); - stmts_updated.extend(actual.extra_stmts.into_iter().map(T::from_stmt)); + stmts_updated.extend(actual.extra_stmts.into_iter().map(T::from)); } *stmts = stmts_updated; diff --git a/crates/swc_ecma_compat_es2018/src/object_rest.rs b/crates/swc_ecma_compat_es2018/src/object_rest.rs index 11fbb1a68568..81d65f23a148 100644 --- a/crates/swc_ecma_compat_es2018/src/object_rest.rs +++ b/crates/swc_ecma_compat_es2018/src/object_rest.rs @@ -469,7 +469,7 @@ impl ObjectRest { // Add variable declaration // e.g. var ref if !folder.mutable_vars.is_empty() { - buf.push(T::from_stmt( + buf.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -481,7 +481,7 @@ impl ObjectRest { } if !folder.vars.is_empty() { - buf.push(T::from_stmt( + buf.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -494,13 +494,7 @@ impl ObjectRest { buf.push(stmt); - buf.extend( - folder - .exprs - .into_iter() - .map(|v| v.into_stmt()) - .map(T::from_stmt), - ); + buf.extend(folder.exprs.into_iter().map(|v| v.into_stmt()).map(T::from)); } *stmts = buf; diff --git a/crates/swc_ecma_compat_es2020/src/nullish_coalescing.rs b/crates/swc_ecma_compat_es2020/src/nullish_coalescing.rs index c718dae7956a..99323e5f1527 100644 --- a/crates/swc_ecma_compat_es2020/src/nullish_coalescing.rs +++ b/crates/swc_ecma_compat_es2020/src/nullish_coalescing.rs @@ -39,7 +39,7 @@ impl NullishCoalescing { stmt.visit_mut_with(self); if !self.vars.is_empty() { - buf.push(T::from_stmt( + buf.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, diff --git a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs index be8da701b887..1d8bcf298a28 100644 --- a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs +++ b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs @@ -356,7 +356,7 @@ impl ClassProperties { let (decl, extra) = self.visit_mut_class_as_decl(ident.clone(), class); - extra.merge_with(&mut buf, T::from_stmt(decl.into())); + extra.merge_with(&mut buf, T::from(decl.into())); buf.push( match T::try_from_module_decl( @@ -427,11 +427,11 @@ impl ClassProperties { declare: false, })) => { let (decl, extra) = self.visit_mut_class_as_decl(ident, class); - extra.merge_with(&mut buf, T::from_stmt(decl.into())) + extra.merge_with(&mut buf, T::from(decl.into())) } _ => { stmt.visit_mut_children_with(self); - buf.push(T::from_stmt(stmt)) + buf.push(T::from(stmt)) } } } diff --git a/crates/swc_ecma_compat_es2022/src/optional_chaining_impl.rs b/crates/swc_ecma_compat_es2022/src/optional_chaining_impl.rs index fc81f0a07366..a000b3c01291 100644 --- a/crates/swc_ecma_compat_es2022/src/optional_chaining_impl.rs +++ b/crates/swc_ecma_compat_es2022/src/optional_chaining_impl.rs @@ -407,7 +407,7 @@ impl OptionalChaining { if !self.vars.is_empty() { prepend_stmt( stmts, - T::from_stmt( + T::from( VarDecl { span: DUMMY_SP, declare: false, diff --git a/crates/swc_ecma_ext_transforms/src/jest.rs b/crates/swc_ecma_ext_transforms/src/jest.rs index d4add6a90948..d0f792b3e802 100644 --- a/crates/swc_ecma_ext_transforms/src/jest.rs +++ b/crates/swc_ecma_ext_transforms/src/jest.rs @@ -45,13 +45,13 @@ impl Jest { if self.should_hoist(callee) { hoisted.push(T::from(stmt)) } else { - new.push(T::from_stmt(stmt)) + new.push(T::from(stmt)) } } - _ => new.push(T::from_stmt(stmt)), + _ => new.push(T::from(stmt)), }, - _ => new.push(T::from_stmt(stmt)), + _ => new.push(T::from(stmt)), }, Err(node) => new.push(node), }; diff --git a/crates/swc_ecma_minifier/src/compress/hoist_decls.rs b/crates/swc_ecma_minifier/src/compress/hoist_decls.rs index 7cfbfceac786..be315596507f 100644 --- a/crates/swc_ecma_minifier/src/compress/hoist_decls.rs +++ b/crates/swc_ecma_minifier/src/compress/hoist_decls.rs @@ -115,7 +115,7 @@ impl Hoister<'_> { match stmt { Stmt::Decl(Decl::Fn(..)) if self.config.hoist_fns => { // Move functions to top. - fn_decls.push(T::from_stmt(stmt)) + fn_decls.push(T::from(stmt)) } Stmt::Decl(Decl::Var(var)) @@ -172,7 +172,7 @@ impl Hoister<'_> { if exprs.is_empty() { continue; } - new_stmts.push(T::from_stmt( + new_stmts.push(T::from( ExprStmt { span: var.span, expr: if exprs.len() == 1 { @@ -237,10 +237,10 @@ impl Hoister<'_> { })); } - Stmt::Decl(Decl::Var(..)) => new_stmts.push(T::from_stmt(stmt)), + Stmt::Decl(Decl::Var(..)) => new_stmts.push(T::from(stmt)), _ => { if let Stmt::Throw(..) = stmt { - fn_decls.push(T::from_stmt( + fn_decls.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -252,7 +252,7 @@ impl Hoister<'_> { )); } found_non_var_decl = true; - new_stmts.push(T::from_stmt(stmt)) + new_stmts.push(T::from(stmt)) } } } @@ -260,7 +260,7 @@ impl Hoister<'_> { } } - fn_decls.push(T::from_stmt( + fn_decls.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, diff --git a/crates/swc_ecma_minifier/src/compress/optimize/conditionals.rs b/crates/swc_ecma_minifier/src/compress/optimize/conditionals.rs index 8bca4abb1c94..52b8660915a7 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/conditionals.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/conditionals.rs @@ -154,7 +154,7 @@ impl Optimizer<'_> { } .into(); } else { - new.extend(cur.take().map(Stmt::If).map(T::from_stmt)); + new.extend(cur.take().map(Stmt::If).map(T::from)); cur = Some(stmt); } @@ -165,21 +165,21 @@ impl Optimizer<'_> { } } _ => { - new.extend(cur.take().map(Stmt::If).map(T::from_stmt)); + new.extend(cur.take().map(Stmt::If).map(T::from)); - new.push(T::from_stmt(stmt)); + new.push(T::from(stmt)); } } } Err(item) => { - new.extend(cur.take().map(Stmt::If).map(T::from_stmt)); + new.extend(cur.take().map(Stmt::If).map(T::from)); new.push(item); } } } - new.extend(cur.map(Stmt::If).map(T::from_stmt)); + new.extend(cur.map(Stmt::If).map(T::from)); *stmts = new; } @@ -883,7 +883,7 @@ impl Optimizer<'_> { swap(&mut cons, &mut alt); } - new_stmts.push(T::from_stmt( + new_stmts.push(T::from( IfStmt { span, test, @@ -892,10 +892,10 @@ impl Optimizer<'_> { } .into(), )); - new_stmts.push(T::from_stmt(*alt)); + new_stmts.push(T::from(*alt)); } _ => { - new_stmts.push(T::from_stmt(stmt)); + new_stmts.push(T::from(stmt)); } }, Err(stmt) => new_stmts.push(stmt), diff --git a/crates/swc_ecma_minifier/src/compress/optimize/mod.rs b/crates/swc_ecma_minifier/src/compress/optimize/mod.rs index 1bd9237a9612..b3f706b2fe17 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/mod.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/mod.rs @@ -455,21 +455,21 @@ impl Optimizer<'_> { stmt.visit_with(&mut AssertValid); } - new.extend(self.prepend_stmts.drain(..).map(T::from_stmt)); + new.extend(self.prepend_stmts.drain(..).map(T::from)); match stmt.try_into_stmt() { Ok(Stmt::Block(s)) if s.ctxt.has_mark(self.marks.fake_block) => { - new.extend(s.stmts.into_iter().map(T::from_stmt)); + new.extend(s.stmts.into_iter().map(T::from)); } Ok(s) => { - new.push(T::from_stmt(s)); + new.push(T::from(s)); } Err(stmt) => { new.push(stmt); } } - new.extend(self.append_stmts.drain(..).map(T::from_stmt)); + new.extend(self.append_stmts.drain(..).map(T::from)); } *stmts = new; } @@ -516,7 +516,7 @@ impl Optimizer<'_> { stmts.visit_with(&mut AssertValid); } - // stmts.extend(self.append_stmts.drain(..).map(T::from_stmt)); + // stmts.extend(self.append_stmts.drain(..).map(T::from)); drop_invalid_stmts(stmts); diff --git a/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs b/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs index ca45653a9bff..72b7e3fcbb1c 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/sequences.rs @@ -159,7 +159,7 @@ impl Optimizer<'_> { match stmt.try_into_stmt() { Ok(stmt) => { if is_directive(&stmt) { - new_stmts.push(T::from_stmt(stmt)); + new_stmts.push(T::from(stmt)); continue; } // If @@ -170,19 +170,19 @@ impl Optimizer<'_> { Stmt::If(mut stmt) => { stmt.test.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(stmt.into())); + new_stmts.push(T::from(stmt.into())); } Stmt::Switch(mut stmt) => { stmt.discriminant.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(stmt.into())); + new_stmts.push(T::from(stmt.into())); } Stmt::With(mut stmt) => { stmt.obj.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(stmt.into())); + new_stmts.push(T::from(stmt.into())); } Stmt::Return(mut stmt @ ReturnStmt { arg: Some(..), .. }) => { @@ -198,13 +198,13 @@ impl Optimizer<'_> { } } - new_stmts.push(T::from_stmt(stmt.into())); + new_stmts.push(T::from(stmt.into())); } Stmt::Throw(mut stmt) => { stmt.arg.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(stmt.into())); + new_stmts.push(T::from(stmt.into())); } Stmt::For(mut stmt @ ForStmt { init: None, .. }) @@ -270,7 +270,7 @@ impl Optimizer<'_> { )); } - new_stmts.push(T::from_stmt(stmt.into())); + new_stmts.push(T::from(stmt.into())); continue; } @@ -291,19 +291,19 @@ impl Optimizer<'_> { unreachable!() } } - new_stmts.push(T::from_stmt(stmt.into())); + new_stmts.push(T::from(stmt.into())); } Stmt::ForIn(mut stmt) => { stmt.right.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(stmt.into())); + new_stmts.push(T::from(stmt.into())); } Stmt::ForOf(mut stmt) => { stmt.right.prepend_exprs(take(&mut exprs)); - new_stmts.push(T::from_stmt(stmt.into())); + new_stmts.push(T::from(stmt.into())); } Stmt::Decl(Decl::Var(var)) @@ -315,16 +315,16 @@ impl Optimizer<'_> { } ) && var.decls.iter().all(|v| v.init.is_none()) => { - new_stmts.push(T::from_stmt(var.into())); + new_stmts.push(T::from(var.into())); } Stmt::Decl(Decl::Fn(..)) => { - new_stmts.push(T::from_stmt(stmt)); + new_stmts.push(T::from(stmt)); } _ => { if !exprs.is_empty() { - new_stmts.push(T::from_stmt( + new_stmts.push(T::from( ExprStmt { span: DUMMY_SP, expr: Expr::from_exprs(take(&mut exprs)), @@ -333,13 +333,13 @@ impl Optimizer<'_> { )) } - new_stmts.push(T::from_stmt(stmt)); + new_stmts.push(T::from(stmt)); } } } Err(item) => { if !exprs.is_empty() { - new_stmts.push(T::from_stmt( + new_stmts.push(T::from( ExprStmt { span: DUMMY_SP, expr: Expr::from_exprs(take(&mut exprs)), @@ -354,7 +354,7 @@ impl Optimizer<'_> { } if !exprs.is_empty() { - new_stmts.push(T::from_stmt( + new_stmts.push(T::from( ExprStmt { span: DUMMY_SP, expr: Expr::from_exprs(take(&mut exprs)), @@ -421,12 +421,12 @@ impl Optimizer<'_> { .into_iter() .map(|expr| ExprStmt { span, expr }) .map(Stmt::Expr) - .map(T::from_stmt), + .map(T::from), ); } _ => { - new_stmts.push(T::from_stmt(stmt)); + new_stmts.push(T::from(stmt)); } }, Err(stmt) => { @@ -493,11 +493,11 @@ impl Optimizer<'_> { op(stmts); if !self.prepend_stmts.is_empty() { - prepend_stmts(stmts, self.prepend_stmts.drain(..).map(T::from_stmt)); + prepend_stmts(stmts, self.prepend_stmts.drain(..).map(T::from)); } if !self.append_stmts.is_empty() { - stmts.extend(self.append_stmts.drain(..).map(T::from_stmt)); + stmts.extend(self.append_stmts.drain(..).map(T::from)); } self.prepend_stmts = old_prepend; diff --git a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs index 21b6371ffdd1..e234a3e249d8 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs @@ -425,11 +425,11 @@ impl Pure<'_> { Stmt::Block(v) if is_ok(&v) => { let stmts = v.stmts; maybe_par!( - stmts.into_iter().map(T::from_stmt).collect(), + stmts.into_iter().map(T::from).collect(), *crate::LIGHT_TASK_PARALLELS ) } - _ => vec![T::from_stmt(v)], + _ => vec![T::from(v)], }, Err(v) => vec![v], }) @@ -444,11 +444,11 @@ impl Pure<'_> { Stmt::Block(v) if is_ok(&v) => { let stmts = v.stmts; maybe_par!( - stmts.into_iter().map(T::from_stmt).collect(), + stmts.into_iter().map(T::from).collect(), *crate::LIGHT_TASK_PARALLELS ) } - _ => vec![T::from_stmt(v)], + _ => vec![T::from(v)], }, Err(v) => vec![v], }) @@ -461,9 +461,9 @@ impl Pure<'_> { .for_each(|stmt| match stmt.try_into_stmt() { Ok(v) => match v { Stmt::Block(v) if is_ok(&v) => { - new.extend(v.stmts.into_iter().map(T::from_stmt)); + new.extend(v.stmts.into_iter().map(T::from)); } - _ => new.push(T::from_stmt(v)), + _ => new.push(T::from(v)), }, Err(v) => new.push(v), }); @@ -521,7 +521,7 @@ impl Pure<'_> { Stmt::If(mut s) => { if let Value::Known(v) = s.test.cast_to_bool(&self.expr_ctx).1 { let mut var_ids = vec![]; - new.push(T::from_stmt( + new.push(T::from( ExprStmt { span: DUMMY_SP, expr: s.test.take(), @@ -543,7 +543,7 @@ impl Pure<'_> { .collect(); } if !var_ids.is_empty() { - new.push(T::from_stmt( + new.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -554,7 +554,7 @@ impl Pure<'_> { .into(), )) } - new.push(T::from_stmt(*s.cons.take())); + new.push(T::from(*s.cons.take())); } else { var_ids = s .cons @@ -568,7 +568,7 @@ impl Pure<'_> { }) .collect(); if !var_ids.is_empty() { - new.push(T::from_stmt( + new.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -580,14 +580,14 @@ impl Pure<'_> { )) } if let Some(alt) = s.alt.take() { - new.push(T::from_stmt(*alt)); + new.push(T::from(*alt)); } } } else { - new.push(T::from_stmt(s.into())); + new.push(T::from(s.into())); } } - _ => new.push(T::from_stmt(stmt)), + _ => new.push(T::from(stmt)), }, Err(stmt) => new.push(stmt), }); diff --git a/crates/swc_ecma_minifier/src/compress/pure/vars.rs b/crates/swc_ecma_minifier/src/compress/pure/vars.rs index 219f74172391..5f07bf785675 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/vars.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/vars.rs @@ -69,7 +69,7 @@ impl Pure<'_> { match stmt.try_into_stmt() { Ok(stmt) => { if is_directive(&stmt) { - return new.push(T::from_stmt(stmt)); + return new.push(T::from(stmt)); } match stmt { @@ -79,7 +79,7 @@ impl Pure<'_> { } _ => { if let Some(s) = cur.take().map(|c| c.into()) { - new.push(T::from_stmt(s)); + new.push(T::from(s)); } cur = Some(var); } @@ -100,13 +100,13 @@ impl Pure<'_> { cur.decls.append(&mut var.decls); var.decls = cur.decls.take(); - new.push(T::from_stmt(stmt.into())); + new.push(T::from(stmt.into())); } _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(s.into())); + new.push(T::from(s.into())); } - new.push(T::from_stmt(stmt.into())); + new.push(T::from(stmt.into())); } } } @@ -120,26 +120,26 @@ impl Pure<'_> { .and_then(|v| if v.decls.is_empty() { None } else { Some(v) }) .map(VarDeclOrExpr::VarDecl); - new.push(T::from_stmt(stmt.into())); + new.push(T::from(stmt.into())); } _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(s.into())); + new.push(T::from(s.into())); } - new.push(T::from_stmt(stmt.into())); + new.push(T::from(stmt.into())); } }, _ => { if let Some(s) = cur.take() { - new.push(T::from_stmt(s.into())); + new.push(T::from(s.into())); } - new.push(T::from_stmt(stmt)); + new.push(T::from(stmt)); } } } Err(item) => { if let Some(s) = cur.take() { - new.push(T::from_stmt(s.into())); + new.push(T::from(s.into())); } new.push(item); } @@ -147,7 +147,7 @@ impl Pure<'_> { }); if let Some(s) = cur.take() { - new.push(T::from_stmt(s.into())); + new.push(T::from(s.into())); } drop_invalid_stmts(&mut new); @@ -273,7 +273,7 @@ impl Pure<'_> { _ => { prepend_stmt( stmts, - T::from_stmt( + T::from( VarDecl { span: DUMMY_SP, kind: target, diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs index 1713e36ec673..154f9c54c449 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs @@ -1330,7 +1330,7 @@ impl Remover { for t in iter { match t.try_into_stmt() { Ok(Stmt::Decl(Decl::Fn(f))) => { - hoisted_fns.push(T::from_stmt(f.into())); + hoisted_fns.push(T::from(f.into())); } Ok(t) => { let ids = extract_var_ids(&t).into_iter().map(|i| { @@ -1348,7 +1348,7 @@ impl Remover { } if !decls.is_empty() { - new_stmts.push(T::from_stmt( + new_stmts.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -1360,7 +1360,7 @@ impl Remover { )); } - let stmt_like = T::from_stmt(stmt); + let stmt_like = T::from(stmt); new_stmts.push(stmt_like); new_stmts.extend(hoisted_fns); @@ -1394,7 +1394,7 @@ impl Remover { stmts .into_iter() .filter(|s| !matches!(s, Stmt::Empty(..))) - .map(T::from_stmt), + .map(T::from), ); continue; } @@ -1415,7 +1415,7 @@ impl Remover { let expr = ignore_result(test, true, &self.expr_ctx); if let Some(expr) = expr { - new_stmts.push(T::from_stmt( + new_stmts.push(T::from( ExprStmt { span: DUMMY_SP, expr, @@ -1430,13 +1430,13 @@ impl Remover { if let Some(var) = alt.and_then(|alt| alt.extract_var_ids_as_var()) { - new_stmts.push(T::from_stmt(var.into())) + new_stmts.push(T::from(var.into())) } *cons } else { // Hoist vars from cons if let Some(var) = cons.extract_var_ids_as_var() { - new_stmts.push(T::from_stmt(var.into())) + new_stmts.push(T::from(var.into())) } match alt { Some(alt) => *alt, @@ -1457,7 +1457,7 @@ impl Remover { _ => stmt, }; - T::from_stmt(stmt) + T::from(stmt) } Err(stmt_like) => stmt_like, }; diff --git a/crates/swc_ecma_transforms_proposal/src/decorators/legacy/mod.rs b/crates/swc_ecma_transforms_proposal/src/decorators/legacy/mod.rs index 401dc12a3131..2fc0b44ed8ab 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorators/legacy/mod.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorators/legacy/mod.rs @@ -65,7 +65,7 @@ impl TscDecorator { s.visit_mut_with(self); if !self.vars.is_empty() { - new.push(T::from_stmt( + new.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -87,7 +87,7 @@ impl TscDecorator { } .into() }) - .map(T::from_stmt), + .map(T::from), ); new.push(s); @@ -102,7 +102,7 @@ impl TscDecorator { } .into() }) - .map(T::from_stmt), + .map(T::from), ); } diff --git a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs index ebb76da5e2cf..859efab6b11e 100644 --- a/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs +++ b/crates/swc_ecma_transforms_proposal/src/explicit_resource_management.rs @@ -205,7 +205,7 @@ impl ExplicitResourceManagement { definite: Default::default(), }; - new.push(T::from_stmt( + new.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -271,7 +271,7 @@ impl ExplicitResourceManagement { }) .collect(); - new.push(T::from_stmt( + new.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, @@ -404,7 +404,7 @@ impl ExplicitResourceManagement { }), }; - new.push(T::from_stmt(try_stmt.into())); + new.push(T::from(try_stmt.into())); new.extend(extras); *stmts = new; From e2ff52c7c368990549fd6ee0b5871d71206098ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:15:54 +0900 Subject: [PATCH 22/33] More from impl --- crates/swc_ecma_ast/src/macros.rs | 2 -- crates/swc_ecma_ast/src/stmt.rs | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/swc_ecma_ast/src/macros.rs b/crates/swc_ecma_ast/src/macros.rs index 863f4cb11104..8cea2656f6f8 100644 --- a/crates/swc_ecma_ast/src/macros.rs +++ b/crates/swc_ecma_ast/src/macros.rs @@ -188,8 +188,6 @@ macro_rules! test_de { macro_rules! boxed { ($T:ty, [$($variant_ty:ty),*]) => { $( - bridge_from!(Box<$T>, $T, $variant_ty); - bridge_from!(Box<$T>, $T, Box<$variant_ty>); bridge_from!($T, Box<$variant_ty>, $variant_ty); )* }; diff --git a/crates/swc_ecma_ast/src/stmt.rs b/crates/swc_ecma_ast/src/stmt.rs index 33e0b050c535..32665b359a73 100644 --- a/crates/swc_ecma_ast/src/stmt.rs +++ b/crates/swc_ecma_ast/src/stmt.rs @@ -113,6 +113,7 @@ boxed!(Stmt, [TryStmt]); macro_rules! stmt_from { ($($varant_ty:ty),*) => { $( + bridge_from!(Box, crate::Stmt, $varant_ty); bridge_from!(crate::ModuleItem, crate::Stmt, $varant_ty); )* }; From b48b35d94aab3f38f4072dc082d16136c5975f1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:16:19 +0900 Subject: [PATCH 23/33] More fix --- crates/swc_estree_compat/src/babelify/stmt.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/swc_estree_compat/src/babelify/stmt.rs b/crates/swc_estree_compat/src/babelify/stmt.rs index 0f8d08538066..a0ef8147c912 100644 --- a/crates/swc_estree_compat/src/babelify/stmt.rs +++ b/crates/swc_estree_compat/src/babelify/stmt.rs @@ -61,6 +61,7 @@ impl Babelify for Stmt { Decl::TsTypeAlias(d) => Statement::TSTypeAliasDecl(d.babelify(ctx)), Decl::TsEnum(d) => Statement::TSEnumDecl(d.babelify(ctx)), Decl::TsModule(d) => Statement::TSModuleDecl(d.babelify(ctx)), + Decl::Invalid(d) => unreachable!(), }, Stmt::Expr(s) => Statement::Expr(s.babelify(ctx)), } From 9dc96daa72d6630bcaf6455521c52d453e5a283b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:16:57 +0900 Subject: [PATCH 24/33] More from impl --- crates/swc_ecma_ast/src/decl.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/swc_ecma_ast/src/decl.rs b/crates/swc_ecma_ast/src/decl.rs index 12aa57726d78..cc56620ec5e9 100644 --- a/crates/swc_ecma_ast/src/decl.rs +++ b/crates/swc_ecma_ast/src/decl.rs @@ -74,6 +74,8 @@ decl_from!( macro_rules! decl_from_boxed { ($($variant_ty:ty),*) => { $( + bridge_from!(Box, Decl, $variant_ty); + bridge_from!(Box, Decl, Box<$variant_ty>); bridge_from!(crate::Stmt, Decl, Box<$variant_ty>); bridge_from!(crate::ModuleItem, crate::Stmt, Box<$variant_ty>); )* From da42749aa4abaf1ba9c50ac1a99af0c423831807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:16:59 +0900 Subject: [PATCH 25/33] More fix --- crates/swc_ecma_compat_es2015/src/template_literal.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/swc_ecma_compat_es2015/src/template_literal.rs b/crates/swc_ecma_compat_es2015/src/template_literal.rs index ddd377052b21..d7a55c1c020c 100644 --- a/crates/swc_ecma_compat_es2015/src/template_literal.rs +++ b/crates/swc_ecma_compat_es2015/src/template_literal.rs @@ -391,7 +391,7 @@ impl VisitMut for TemplateLiteral { fn visit_mut_module(&mut self, m: &mut Module) { m.visit_mut_children_with(self); - prepend_stmts(&mut m.body, self.added.drain(..).map(ModuleItem::from_stmt)); + prepend_stmts(&mut m.body, self.added.drain(..).map(ModuleItem::from)); } fn visit_mut_script(&mut self, m: &mut Script) { From 92df7c208b4f84f8eb9d2739b5ff4d5fc8dcc8a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:19:30 +0900 Subject: [PATCH 26/33] More fix --- .../src/class_properties/mod.rs | 33 ++++++++----------- .../src/strip_type.rs | 3 ++ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs index 1d8bcf298a28..c7f37a63c768 100644 --- a/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs +++ b/crates/swc_ecma_compat_es2022/src/class_properties/mod.rs @@ -94,51 +94,46 @@ struct ClassExtra { #[swc_trace] impl ClassExtra { - fn prepend_with>(self, stmts: &mut Vec) { + fn prepend_with(self, stmts: &mut Vec) { if !self.vars.is_empty() { prepend_stmt( stmts, - VarDecl { + T::from(Stmt::from(VarDecl { span: DUMMY_SP, kind: VarDeclKind::Var, decls: self.vars, ..Default::default() - } - .into(), + })), ) } if !self.lets.is_empty() { prepend_stmt( stmts, - VarDecl { + T::from(Stmt::from(VarDecl { span: DUMMY_SP, kind: VarDeclKind::Let, decls: self.lets, ..Default::default() - } - .into(), + })), ) } stmts.extend(self.stmts.into_iter().map(|stmt| stmt.into())) } - fn merge_with>(self, stmts: &mut Vec, class: T) { + fn merge_with(self, stmts: &mut Vec, class: T) { if !self.vars.is_empty() { - stmts.push( - VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Var, - decls: self.vars, - ..Default::default() - } - .into(), - ) + stmts.push(T::from(Stmt::from(VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Var, + decls: self.vars, + ..Default::default() + }))) } if !self.lets.is_empty() { - stmts.push( + stmts.push(T::from( VarDecl { span: DUMMY_SP, kind: VarDeclKind::Let, @@ -146,7 +141,7 @@ impl ClassExtra { ..Default::default() } .into(), - ) + )); } stmts.push(class); diff --git a/crates/swc_ecma_transforms_typescript/src/strip_type.rs b/crates/swc_ecma_transforms_typescript/src/strip_type.rs index 12c7e96ca93a..c88cad3b85b3 100644 --- a/crates/swc_ecma_transforms_typescript/src/strip_type.rs +++ b/crates/swc_ecma_transforms_typescript/src/strip_type.rs @@ -299,6 +299,9 @@ impl IsConcrete for Decl { Self::Fn(r#fn) => r#fn.function.body.is_some(), Self::Class(..) | Self::Var(..) | Self::Using(..) | Self::TsEnum(..) => true, Self::TsModule(ts_module) => ts_module.is_concrete(), + Self::Invalid(..) => { + unreachable!() + } } } } From 395d17a60f512df0f051ad9e9f7f4d8ffe8d4db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:22:29 +0900 Subject: [PATCH 27/33] More fix --- .../swc_bundler/src/bundler/chunk/computed_key.rs | 4 ++-- crates/swc_bundler/src/bundler/chunk/merge.rs | 3 ++- .../src/template_literal.rs | 4 +--- .../src/module_decl_strip.rs | 15 ++++++--------- .../src/simplify/branch/mod.rs | 12 ++++++------ .../src/decorators/mod.rs | 2 +- .../src/strip_type.rs | 1 + crates/swc_estree_compat/src/babelify/decl.rs | 2 +- crates/swc_estree_compat/src/swcify/stmt.rs | 9 ++++----- 9 files changed, 24 insertions(+), 28 deletions(-) diff --git a/crates/swc_bundler/src/bundler/chunk/computed_key.rs b/crates/swc_bundler/src/bundler/chunk/computed_key.rs index b6f39b217871..7deeb2286729 100644 --- a/crates/swc_bundler/src/bundler/chunk/computed_key.rs +++ b/crates/swc_bundler/src/bundler/chunk/computed_key.rs @@ -245,7 +245,7 @@ impl Fold for ExportToReturn { _ => unreachable!(), } - Some(export.decl.into()) + Some(ModuleItem::from(export.decl)) } ModuleDecl::ExportDefaultDecl(export) => match export.decl { @@ -334,7 +334,7 @@ impl Fold for ExportToReturn { }; if let Some(stmt) = stmt { - stmt.into() + stmt } else { EmptyStmt { span: DUMMY_SP }.into() } diff --git a/crates/swc_bundler/src/bundler/chunk/merge.rs b/crates/swc_bundler/src/bundler/chunk/merge.rs index 5eedbe9be599..643dfc42e58d 100644 --- a/crates/swc_bundler/src/bundler/chunk/merge.rs +++ b/crates/swc_bundler/src/bundler/chunk/merge.rs @@ -917,7 +917,8 @@ where | Decl::TsTypeAlias(_) | Decl::TsEnum(_) | Decl::TsModule(_) - | Decl::Using(..) => continue, + | Decl::Using(..) + | Decl::Invalid(..) => continue, }; tracing::trace!( diff --git a/crates/swc_ecma_compat_es2015/src/template_literal.rs b/crates/swc_ecma_compat_es2015/src/template_literal.rs index d7a55c1c020c..5a544ffa4280 100644 --- a/crates/swc_ecma_compat_es2015/src/template_literal.rs +++ b/crates/swc_ecma_compat_es2015/src/template_literal.rs @@ -5,9 +5,7 @@ use swc_atoms::JsWord; use swc_common::{util::take::Take, BytePos, Spanned, DUMMY_SP}; use swc_ecma_ast::*; use swc_ecma_transforms_base::{helper, perf::Parallel}; -use swc_ecma_utils::{ - is_literal, prepend_stmts, private_ident, quote_ident, ExprFactory, StmtLike, -}; +use swc_ecma_utils::{is_literal, prepend_stmts, private_ident, quote_ident, ExprFactory}; use swc_ecma_visit::{as_folder, noop_visit_mut_type, Fold, VisitMut, VisitMutWith}; use swc_trace_macro::swc_trace; diff --git a/crates/swc_ecma_transforms_module/src/module_decl_strip.rs b/crates/swc_ecma_transforms_module/src/module_decl_strip.rs index b3587951dd89..6e7ab4648067 100644 --- a/crates/swc_ecma_transforms_module/src/module_decl_strip.rs +++ b/crates/swc_ecma_transforms_module/src/module_decl_strip.rs @@ -75,15 +75,12 @@ impl VisitMut for ModuleDeclStrip { ModuleDecl::ExportNamed(..) => continue, ModuleDecl::ExportDefaultDecl(ExportDefaultDecl { decl, .. }) => match decl { - DefaultDecl::Class(class_expr) => list.extend( - class_expr - .as_class_decl() - .map(|decl| decl.into()) - .map(From::from), - ), - DefaultDecl::Fn(fn_expr) => list.extend( - fn_expr.as_fn_decl().map(|decl| decl.into()).map(From::from), - ), + DefaultDecl::Class(class_expr) => { + list.extend(class_expr.as_class_decl().map(From::from)) + } + DefaultDecl::Fn(fn_expr) => { + list.extend(fn_expr.as_fn_decl().map(From::from)) + } DefaultDecl::TsInterfaceDecl(_) => continue, }, ModuleDecl::ExportDefaultExpr(..) => { diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs index 154f9c54c449..743de0be1a84 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/branch/mod.rs @@ -453,7 +453,7 @@ impl VisitMut for Remover { self.changed = true; - let mut block = BlockStmt { + let mut block: Stmt = BlockStmt { span, stmts, ..Default::default() @@ -561,7 +561,7 @@ impl VisitMut for Remover { // Only leave the finally block if try block is empty if block.is_empty() { - let var = handler.and_then(|h| h.body.into().extract_var_ids_as_var()); + let var = handler.and_then(|h| Stmt::from(h.body).extract_var_ids_as_var()); return if let Some(mut finalizer) = finalizer { if let Some(var) = var.map(Box::new).map(Decl::from).map(Stmt::from) { @@ -693,7 +693,7 @@ impl VisitMut for Remover { prepend_stmt(&mut stmts, expr.into_stmt()); } - let mut block = BlockStmt { + let mut block: Stmt = BlockStmt { span: s.span, stmts, ..Default::default() @@ -829,7 +829,7 @@ impl VisitMut for Remover { if cfg!(feature = "debug") { debug!("Switch -> Block as we know discriminant"); } - let mut block = BlockStmt { + let mut block: Stmt = BlockStmt { span: s.span, stmts, ..Default::default() @@ -876,7 +876,7 @@ impl VisitMut for Remover { ) } - let mut block = BlockStmt { + let mut block: Stmt = BlockStmt { span: s.span, stmts, ..Default::default() @@ -1011,7 +1011,7 @@ impl VisitMut for Remover { if cfg!(feature = "debug") { debug!("Stmt -> Block as all cases are empty"); } - let mut block = BlockStmt { + let mut block: Stmt = BlockStmt { span: s.span, stmts, ..Default::default() diff --git a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs index 50fd6608fe89..b612c76a186a 100644 --- a/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs +++ b/crates/swc_ecma_transforms_proposal/src/decorators/mod.rs @@ -245,7 +245,7 @@ impl Fold for Decorators { }) => handle_class!(class, ident), _ => { - let item = ExportDefaultExpr { span, expr }.into(); + let item: ModuleItem = ExportDefaultExpr { span, expr }.into(); buf.push(item.fold_with(self)); } }, diff --git a/crates/swc_ecma_transforms_typescript/src/strip_type.rs b/crates/swc_ecma_transforms_typescript/src/strip_type.rs index c88cad3b85b3..69fd8e6b5229 100644 --- a/crates/swc_ecma_transforms_typescript/src/strip_type.rs +++ b/crates/swc_ecma_transforms_typescript/src/strip_type.rs @@ -341,6 +341,7 @@ impl IsDeclare for Decl { Decl::TsInterface(_) | Decl::TsTypeAlias(_) => true, Decl::TsEnum(ts_enum) => ts_enum.declare, Decl::TsModule(ts_module) => ts_module.declare || ts_module.global, + Decl::Invalid(..) => false, } } } diff --git a/crates/swc_estree_compat/src/babelify/decl.rs b/crates/swc_estree_compat/src/babelify/decl.rs index fe8952299328..6cbfcd71501e 100644 --- a/crates/swc_estree_compat/src/babelify/decl.rs +++ b/crates/swc_estree_compat/src/babelify/decl.rs @@ -20,7 +20,7 @@ impl Babelify for Decl { Decl::TsTypeAlias(d) => Declaration::TSTypeAliasDecl(d.babelify(ctx)), Decl::TsEnum(d) => Declaration::TSEnumDecl(d.babelify(ctx)), Decl::TsModule(d) => Declaration::TSModuleDecl(d.babelify(ctx)), - Decl::Invalid(d) => unreachable!(), + Decl::Invalid(..) => unreachable!(), } } } diff --git a/crates/swc_estree_compat/src/swcify/stmt.rs b/crates/swc_estree_compat/src/swcify/stmt.rs index 0acb89fa96dd..e09c8ab36738 100644 --- a/crates/swc_estree_compat/src/swcify/stmt.rs +++ b/crates/swc_estree_compat/src/swcify/stmt.rs @@ -1,13 +1,13 @@ use swc_common::DUMMY_SP; use swc_ecma_ast::{ - BlockStmt, BreakStmt, ClassDecl, ClassExpr, ContinueStmt, DebuggerStmt, Decl, DefaultDecl, + BlockStmt, BreakStmt, ClassDecl, ClassExpr, ContinueStmt, DebuggerStmt, DefaultDecl, DoWhileStmt, EmptyStmt, ExportAll, ExportDecl, ExportDefaultDecl, ExportDefaultExpr, ExportNamedSpecifier, ExprStmt, FnDecl, FnExpr, ForHead, ForInStmt, ForOfStmt, ForStmt, IfStmt, ImportDecl, ImportNamedSpecifier, ImportSpecifier, ImportStarAsSpecifier, KeyValueProp, LabeledStmt, Lit, ModuleDecl, ModuleItem, NamedExport, ObjectLit, Pat, Prop, PropName, - PropOrSpread, ReturnStmt, Stmt, SwitchStmt, ThrowStmt, TryStmt, TsExportAssignment, - TsInterfaceDecl, TsModuleDecl, TsTypeAliasDecl, VarDecl, VarDeclKind, VarDeclOrExpr, - VarDeclarator, WhileStmt, WithStmt, + PropOrSpread, ReturnStmt, SwitchStmt, ThrowStmt, TryStmt, TsExportAssignment, TsInterfaceDecl, + TsModuleDecl, TsTypeAliasDecl, VarDecl, VarDeclKind, VarDeclOrExpr, VarDeclarator, WhileStmt, + WithStmt, }; use swc_estree_ast::{ BlockStatement, BreakStatement, ClassDeclaration, ContinueStatement, DebuggerStatement, @@ -91,7 +91,6 @@ impl Swcify for Statement { todo!("swcify: {:?}", self) } } - .into() } } From 71d826084a95f1305ab3eb958205acd3b0d9f959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:23:58 +0900 Subject: [PATCH 28/33] More fix --- .../src/compress/optimize/unused.rs | 6 +++++- .../src/compress/pure/dead_code.rs | 19 ++++++++---------- crates/swc_estree_compat/src/babelify/stmt.rs | 2 +- crates/swc_estree_compat/src/swcify/stmt.rs | 20 +++++++------------ 4 files changed, 21 insertions(+), 26 deletions(-) diff --git a/crates/swc_ecma_minifier/src/compress/optimize/unused.rs b/crates/swc_ecma_minifier/src/compress/optimize/unused.rs index b7f01caf5d45..ade710aea55e 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/unused.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/unused.rs @@ -549,7 +549,11 @@ impl Optimizer<'_> { // TODO: Optimize } - Decl::TsInterface(_) | Decl::TsTypeAlias(_) | Decl::TsEnum(_) | Decl::TsModule(_) => { + Decl::TsInterface(_) + | Decl::TsTypeAlias(_) + | Decl::TsEnum(_) + | Decl::TsModule(_) + | Decl::Invalid(..) => { // Nothing to do. We might change this to unreachable!() } } diff --git a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs index e234a3e249d8..b905025d3b54 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/dead_code.rs @@ -246,7 +246,7 @@ impl Pure<'_> { |(mut decls, mut hoisted_fns, mut new_stmts), stmt| { match stmt.take().try_into_stmt() { Ok(Stmt::Decl(Decl::Fn(f))) => { - hoisted_fns.push(f.into()); + hoisted_fns.push(T::from(Stmt::from(f))); } Ok(t) => { let ids = extract_var_ids(&t).into_iter().map(|i| VarDeclarator { @@ -264,16 +264,13 @@ impl Pure<'_> { ); if !decls.is_empty() { - new_stmts.push( - VarDecl { - span: DUMMY_SP, - kind: VarDeclKind::Var, - decls, - declare: false, - ..Default::default() - } - .into(), - ); + new_stmts.push(T::from(Stmt::from(VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Var, + decls, + declare: false, + ..Default::default() + }))); } new_stmts.extend(stmts.drain(..=idx)); diff --git a/crates/swc_estree_compat/src/babelify/stmt.rs b/crates/swc_estree_compat/src/babelify/stmt.rs index a0ef8147c912..6ce47e19e171 100644 --- a/crates/swc_estree_compat/src/babelify/stmt.rs +++ b/crates/swc_estree_compat/src/babelify/stmt.rs @@ -61,7 +61,7 @@ impl Babelify for Stmt { Decl::TsTypeAlias(d) => Statement::TSTypeAliasDecl(d.babelify(ctx)), Decl::TsEnum(d) => Statement::TSEnumDecl(d.babelify(ctx)), Decl::TsModule(d) => Statement::TSModuleDecl(d.babelify(ctx)), - Decl::Invalid(d) => unreachable!(), + Decl::Invalid(..) => unreachable!(), }, Stmt::Expr(s) => Statement::Expr(s.babelify(ctx)), } diff --git a/crates/swc_estree_compat/src/swcify/stmt.rs b/crates/swc_estree_compat/src/swcify/stmt.rs index e09c8ab36738..1bc43a167157 100644 --- a/crates/swc_estree_compat/src/swcify/stmt.rs +++ b/crates/swc_estree_compat/src/swcify/stmt.rs @@ -67,26 +67,20 @@ impl Swcify for Statement { Statement::While(v) => v.swcify(ctx).into(), Statement::With(v) => v.swcify(ctx).into(), Statement::ClassDecl(v) => v.swcify(ctx).into(), - Statement::ExportAllDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx).into()), - Statement::ExportDefaultDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx)), - Statement::ExportNamedDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx).into()), + Statement::ExportAllDecl(v) => ModuleItem::ModuleDecl(v.swcify(ctx).into()), + Statement::ExportDefaultDecl(v) => ModuleItem::ModuleDecl(v.swcify(ctx)), + Statement::ExportNamedDecl(v) => ModuleItem::ModuleDecl(v.swcify(ctx).into()), Statement::ForOf(v) => v.swcify(ctx).into(), - Statement::ImportDecl(v) => return ModuleItem::ModuleDecl(v.swcify(ctx).into()), + Statement::ImportDecl(v) => ModuleItem::ModuleDecl(v.swcify(ctx).into()), Statement::DeclClass(v) => v.swcify(ctx).into(), Statement::DeclFunc(v) => v.swcify(ctx).into(), Statement::DeclInterface(v) => v.swcify(ctx).into(), Statement::DeclModule(v) => v.swcify(ctx).into(), - Statement::DeclareModuleExports(v) => { - return ModuleItem::ModuleDecl(v.swcify(ctx).into()) - } + Statement::DeclareModuleExports(v) => ModuleItem::ModuleDecl(v.swcify(ctx).into()), Statement::DeclTypeAlias(v) => v.swcify(ctx).into(), Statement::DeclVar(v) => v.swcify(ctx).into(), - Statement::DeclExportDeclaration(v) => { - return ModuleItem::ModuleDecl(v.swcify(ctx).into()) - } - Statement::DeclExportAllDeclaration(v) => { - return ModuleItem::ModuleDecl(v.swcify(ctx).into()) - } + Statement::DeclExportDeclaration(v) => ModuleItem::ModuleDecl(v.swcify(ctx).into()), + Statement::DeclExportAllDeclaration(v) => ModuleItem::ModuleDecl(v.swcify(ctx).into()), _ => { todo!("swcify: {:?}", self) } From 09ea59f50605053251dc9973a9f584997666151c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:32:06 +0900 Subject: [PATCH 29/33] Fix AST --- crates/swc_ecma_ast/src/decl.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/crates/swc_ecma_ast/src/decl.rs b/crates/swc_ecma_ast/src/decl.rs index cc56620ec5e9..af6d89e7ab84 100644 --- a/crates/swc_ecma_ast/src/decl.rs +++ b/crates/swc_ecma_ast/src/decl.rs @@ -9,7 +9,6 @@ use crate::{ ident::Ident, pat::Pat, typescript::{TsEnumDecl, TsInterfaceDecl, TsModuleDecl, TsTypeAliasDecl}, - Invalid, }; #[ast_node] @@ -34,9 +33,6 @@ pub enum Decl { TsEnum(Box), #[tag("TsModuleDeclaration")] TsModule(Box), - - #[tag("Invalid")] - Invalid(Invalid), } boxed!( @@ -93,7 +89,7 @@ decl_from_boxed!( impl Take for Decl { fn dummy() -> Self { - Decl::Invalid(Default::default()) + Decl::Var(Default::default()) } } From cc0d11057a942d2a7989c4c46b02017dc4687aea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:32:57 +0900 Subject: [PATCH 30/33] Fix more --- crates/swc_ecma_codegen/src/decl.rs | 1 - crates/swc_ecma_codegen/src/util.rs | 1 - crates/swc_ecma_parser/src/parser/typescript.rs | 3 --- crates/swc_ecma_quote_macros/src/ast/decl.rs | 3 +-- crates/swc_ecma_visit/src/lib.rs | 1 - 5 files changed, 1 insertion(+), 8 deletions(-) diff --git a/crates/swc_ecma_codegen/src/decl.rs b/crates/swc_ecma_codegen/src/decl.rs index 4adb2daf37c2..b4010c7440e3 100644 --- a/crates/swc_ecma_codegen/src/decl.rs +++ b/crates/swc_ecma_codegen/src/decl.rs @@ -26,7 +26,6 @@ where Decl::TsInterface(ref n) => emit!(n), Decl::TsModule(ref n) => emit!(n), Decl::TsTypeAlias(ref n) => emit!(n), - Decl::Invalid(ref n) => emit!(n), } } diff --git a/crates/swc_ecma_codegen/src/util.rs b/crates/swc_ecma_codegen/src/util.rs index 56cce8c10c7c..c8d692a0d7ff 100644 --- a/crates/swc_ecma_codegen/src/util.rs +++ b/crates/swc_ecma_codegen/src/util.rs @@ -328,7 +328,6 @@ impl StartsWithAlphaNum for Decl { | Decl::TsModule(..) | Decl::TsTypeAlias(..) | Decl::Using(..) => true, - Decl::Invalid(..) => false, } } } diff --git a/crates/swc_ecma_parser/src/parser/typescript.rs b/crates/swc_ecma_parser/src/parser/typescript.rs index 04566c4aef6e..714ed00d1044 100644 --- a/crates/swc_ecma_parser/src/parser/typescript.rs +++ b/crates/swc_ecma_parser/src/parser/typescript.rs @@ -2816,9 +2816,6 @@ fn make_decl_declare(mut decl: Decl) -> Decl { Decl::TsEnum(ref mut e) => e.declare = true, Decl::TsModule(ref mut m) => m.declare = true, Decl::Using(..) => unreachable!("Using is not a valid declaration for `declare` keyword"), - Decl::Invalid(..) => { - unreachable!() - } } decl diff --git a/crates/swc_ecma_quote_macros/src/ast/decl.rs b/crates/swc_ecma_quote_macros/src/ast/decl.rs index 00bfb8ae3662..fe3fcc3ccb7b 100644 --- a/crates/swc_ecma_quote_macros/src/ast/decl.rs +++ b/crates/swc_ecma_quote_macros/src/ast/decl.rs @@ -10,8 +10,7 @@ impl_enum!( TsTypeAlias, TsEnum, TsModule, - Using, - Invalid + Using ] ); diff --git a/crates/swc_ecma_visit/src/lib.rs b/crates/swc_ecma_visit/src/lib.rs index 53021232b3c0..0d72d783fcdd 100644 --- a/crates/swc_ecma_visit/src/lib.rs +++ b/crates/swc_ecma_visit/src/lib.rs @@ -646,7 +646,6 @@ define!({ TsTypeAlias(Box), TsEnum(Box), TsModule(Box), - Invalid(Invalid), } pub struct FnDecl { pub ident: Ident, From a77bec96ed94f3d17452b2b43bc6c89287c3ec47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:33:05 +0900 Subject: [PATCH 31/33] Fix more --- crates/swc_typescript/src/fast_dts/mod.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/swc_typescript/src/fast_dts/mod.rs b/crates/swc_typescript/src/fast_dts/mod.rs index 9342e557896e..ef6152bd35d6 100644 --- a/crates/swc_typescript/src/fast_dts/mod.rs +++ b/crates/swc_typescript/src/fast_dts/mod.rs @@ -230,7 +230,6 @@ impl FastDts { Decl::TsInterface(_) | Decl::TsTypeAlias(_) | Decl::Using(_) => { new_items.push(item); } - Decl::Invalid(_) => unreachable!(), }, ModuleItem::Stmt(..) => {} @@ -564,7 +563,7 @@ impl FastDts { Some(()) } } - Decl::TsInterface(_) | Decl::TsTypeAlias(_) | Decl::Invalid(..) => Some(()), + Decl::TsInterface(_) | Decl::TsTypeAlias(_) => Some(()), Decl::Using(_) => { self.mark_diagnostic(DtsIssue::UnsupportedUsing { range: self.source_range_to_range(decl.span()), From d8d928f0f3db2bc484899928f41e295daa977f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:33:41 +0900 Subject: [PATCH 32/33] Fix more --- crates/swc_bundler/src/bundler/chunk/merge.rs | 3 +-- crates/swc_ecma_minifier/src/compress/optimize/unused.rs | 6 +----- crates/swc_ecma_transforms_typescript/src/strip_type.rs | 1 - crates/swc_estree_compat/src/babelify/decl.rs | 1 - crates/swc_estree_compat/src/babelify/stmt.rs | 1 - 5 files changed, 2 insertions(+), 10 deletions(-) diff --git a/crates/swc_bundler/src/bundler/chunk/merge.rs b/crates/swc_bundler/src/bundler/chunk/merge.rs index 643dfc42e58d..5eedbe9be599 100644 --- a/crates/swc_bundler/src/bundler/chunk/merge.rs +++ b/crates/swc_bundler/src/bundler/chunk/merge.rs @@ -917,8 +917,7 @@ where | Decl::TsTypeAlias(_) | Decl::TsEnum(_) | Decl::TsModule(_) - | Decl::Using(..) - | Decl::Invalid(..) => continue, + | Decl::Using(..) => continue, }; tracing::trace!( diff --git a/crates/swc_ecma_minifier/src/compress/optimize/unused.rs b/crates/swc_ecma_minifier/src/compress/optimize/unused.rs index ade710aea55e..b7f01caf5d45 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/unused.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/unused.rs @@ -549,11 +549,7 @@ impl Optimizer<'_> { // TODO: Optimize } - Decl::TsInterface(_) - | Decl::TsTypeAlias(_) - | Decl::TsEnum(_) - | Decl::TsModule(_) - | Decl::Invalid(..) => { + Decl::TsInterface(_) | Decl::TsTypeAlias(_) | Decl::TsEnum(_) | Decl::TsModule(_) => { // Nothing to do. We might change this to unreachable!() } } diff --git a/crates/swc_ecma_transforms_typescript/src/strip_type.rs b/crates/swc_ecma_transforms_typescript/src/strip_type.rs index 69fd8e6b5229..c88cad3b85b3 100644 --- a/crates/swc_ecma_transforms_typescript/src/strip_type.rs +++ b/crates/swc_ecma_transforms_typescript/src/strip_type.rs @@ -341,7 +341,6 @@ impl IsDeclare for Decl { Decl::TsInterface(_) | Decl::TsTypeAlias(_) => true, Decl::TsEnum(ts_enum) => ts_enum.declare, Decl::TsModule(ts_module) => ts_module.declare || ts_module.global, - Decl::Invalid(..) => false, } } } diff --git a/crates/swc_estree_compat/src/babelify/decl.rs b/crates/swc_estree_compat/src/babelify/decl.rs index 6cbfcd71501e..656f9b0e77c3 100644 --- a/crates/swc_estree_compat/src/babelify/decl.rs +++ b/crates/swc_estree_compat/src/babelify/decl.rs @@ -20,7 +20,6 @@ impl Babelify for Decl { Decl::TsTypeAlias(d) => Declaration::TSTypeAliasDecl(d.babelify(ctx)), Decl::TsEnum(d) => Declaration::TSEnumDecl(d.babelify(ctx)), Decl::TsModule(d) => Declaration::TSModuleDecl(d.babelify(ctx)), - Decl::Invalid(..) => unreachable!(), } } } diff --git a/crates/swc_estree_compat/src/babelify/stmt.rs b/crates/swc_estree_compat/src/babelify/stmt.rs index 6ce47e19e171..0f8d08538066 100644 --- a/crates/swc_estree_compat/src/babelify/stmt.rs +++ b/crates/swc_estree_compat/src/babelify/stmt.rs @@ -61,7 +61,6 @@ impl Babelify for Stmt { Decl::TsTypeAlias(d) => Statement::TSTypeAliasDecl(d.babelify(ctx)), Decl::TsEnum(d) => Statement::TSEnumDecl(d.babelify(ctx)), Decl::TsModule(d) => Statement::TSModuleDecl(d.babelify(ctx)), - Decl::Invalid(..) => unreachable!(), }, Stmt::Expr(s) => Statement::Expr(s.babelify(ctx)), } From 6e220fa05e50e5527eb706e5ed2a43ff4533360c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 11 Jul 2024 16:37:45 +0900 Subject: [PATCH 33/33] Fix --- crates/swc_ecma_transforms_typescript/src/strip_type.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/crates/swc_ecma_transforms_typescript/src/strip_type.rs b/crates/swc_ecma_transforms_typescript/src/strip_type.rs index c88cad3b85b3..12c7e96ca93a 100644 --- a/crates/swc_ecma_transforms_typescript/src/strip_type.rs +++ b/crates/swc_ecma_transforms_typescript/src/strip_type.rs @@ -299,9 +299,6 @@ impl IsConcrete for Decl { Self::Fn(r#fn) => r#fn.function.body.is_some(), Self::Class(..) | Self::Var(..) | Self::Using(..) | Self::TsEnum(..) => true, Self::TsModule(ts_module) => ts_module.is_concrete(), - Self::Invalid(..) => { - unreachable!() - } } } }