From 238baf960278ee8c80844128ab5b953cb3a02fe3 Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Sun, 19 Feb 2023 17:38:19 +0900 Subject: [PATCH 01/12] feat: add drop_unused_imports option for simplify optimization --- crates/swc/src/config/mod.rs | 9 ++- crates/swc_bundler/src/bundler/optimize.rs | 1 + crates/swc_ecma_minifier/src/lib.rs | 1 + .../src/simplify/dce/mod.rs | 42 +++++++++- .../src/simplify/mod.rs | 8 +- .../tests/drop_unused_imports.rs | 76 +++++++++++++++++++ .../tests/fixture.rs | 6 +- .../tests/simplify.rs | 8 +- .../tests/simplify_dce.rs | 1 + 9 files changed, 141 insertions(+), 11 deletions(-) create mode 100644 crates/swc_ecma_transforms_optimization/tests/drop_unused_imports.rs diff --git a/crates/swc/src/config/mod.rs b/crates/swc/src/config/mod.rs index 7a6bd8b7a3e8..981bcb4baedc 100644 --- a/crates/swc/src/config/mod.rs +++ b/crates/swc/src/config/mod.rs @@ -455,6 +455,10 @@ impl Options { .as_ref() .map(|v| v.simplify.into_bool()) .unwrap_or_default(); + let drop_unused_imports = optimizer + .as_ref() + .map(|v| v.drop_unused_imports.into_bool()) + .unwrap_or_default(); let optimization = { if let Some(opts) = optimizer.and_then(|o| o.globals) { @@ -472,7 +476,7 @@ impl Options { optimization, Optional::new(export_default_from(), syntax.export_default_from()), Optional::new( - simplifier(top_level_mark, Default::default()), + simplifier(top_level_mark, drop_unused_imports, Default::default()), enable_simplifier ), json_parse_pass @@ -1481,6 +1485,9 @@ pub struct OptimizerConfig { #[serde(default)] pub jsonify: Option, + + #[serde(default)] + pub drop_unused_imports: BoolConfig, } #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] diff --git a/crates/swc_bundler/src/bundler/optimize.rs b/crates/swc_bundler/src/bundler/optimize.rs index ea58fc3bf855..6039354864ba 100644 --- a/crates/swc_bundler/src/bundler/optimize.rs +++ b/crates/swc_bundler/src/bundler/optimize.rs @@ -28,6 +28,7 @@ where top_retain: Default::default(), }, self.unresolved_mark, + false, ))); } node diff --git a/crates/swc_ecma_minifier/src/lib.rs b/crates/swc_ecma_minifier/src/lib.rs index 6d26318c7971..d9277846b3aa 100644 --- a/crates/swc_ecma_minifier/src/lib.rs +++ b/crates/swc_ecma_minifier/src/lib.rs @@ -306,6 +306,7 @@ fn perform_dce(m: &mut Program, options: &CompressOptions, extra: &ExtraOptions) top_retain: options.top_retain.clone(), }, extra.unresolved_mark, + false, ); loop { 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 67e11bd1c5d2..7a1a4e6617a7 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs @@ -30,6 +30,7 @@ use crate::debug_assert_valid; pub fn dce( config: Config, unresolved_mark: Mark, + drop_unused_imports: bool, ) -> impl Fold + VisitMut + Repeated + CompilerPass { as_folder(TreeShaker { expr_ctx: ExprCtx { @@ -44,6 +45,7 @@ pub fn dce( var_decl_kind: None, data: Default::default(), bindings: Default::default(), + drop_unused_imports, }) } @@ -89,6 +91,8 @@ struct TreeShaker { data: Arc, bindings: Arc>, + + drop_unused_imports: bool, } impl CompilerPass for TreeShaker { @@ -820,6 +824,27 @@ impl VisitMut for TreeShaker { } } + fn visit_mut_import_specifiers(&mut self, ss: &mut Vec) { + ss.retain(|s| { + let local = match s { + ImportSpecifier::Named(l) => &l.local, + ImportSpecifier::Default(l) => &l.local, + ImportSpecifier::Namespace(l) => &l.local, + }; + + if self.drop_unused_imports && self.can_drop_binding(local.to_id(), false) { + debug!( + "Dropping import specifier `{}` because it's not used", + local + ); + self.changed = true; + return false; + } + + true + }); + } + fn visit_mut_module(&mut self, m: &mut Module) { debug_assert_valid(m); @@ -883,7 +908,22 @@ impl VisitMut for TreeShaker { } fn visit_mut_module_item(&mut self, n: &mut ModuleItem) { - n.visit_mut_children_with(self); + match n { + ModuleItem::ModuleDecl(ModuleDecl::Import(i)) => { + let is_for_side_effect = i.specifiers.is_empty(); + + i.visit_mut_with(self); + + if self.drop_unused_imports && !is_for_side_effect && i.specifiers.is_empty() { + debug!("Dropping an import because it's not used"); + self.changed = true; + *n = ModuleItem::Stmt(Stmt::Empty(EmptyStmt { span: DUMMY_SP })); + } + } + _ => { + n.visit_mut_children_with(self); + } + } debug_assert_valid(n); } diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs index 3d45ee1089f8..f2000a00552f 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs @@ -22,10 +22,14 @@ pub struct Config { /// Performs simplify-expr, inlining, remove-dead-branch and dce until nothing /// changes. -pub fn simplifier(unresolved_mark: Mark, c: Config) -> impl RepeatedJsPass { +pub fn simplifier( + unresolved_mark: Mark, + drop_unused_imports: bool, + c: Config, +) -> impl RepeatedJsPass { Repeat::new(chain!( expr_simplifier(unresolved_mark, c.expr), dead_branch_remover(unresolved_mark), - dce::dce(c.dce, unresolved_mark) + dce::dce(c.dce, unresolved_mark, drop_unused_imports) )) } diff --git a/crates/swc_ecma_transforms_optimization/tests/drop_unused_imports.rs b/crates/swc_ecma_transforms_optimization/tests/drop_unused_imports.rs new file mode 100644 index 000000000000..4a6a7e5de2d8 --- /dev/null +++ b/crates/swc_ecma_transforms_optimization/tests/drop_unused_imports.rs @@ -0,0 +1,76 @@ +use swc_common::{chain, pass::Repeat, Mark}; +use swc_ecma_parser::{EsConfig, Syntax}; +use swc_ecma_transforms_base::resolver; +use swc_ecma_transforms_optimization::simplify::dce::{dce, Config}; +use swc_ecma_transforms_testing::test; +use swc_ecma_visit::Fold; + +fn tr() -> impl Fold { + Repeat::new(dce( + Config { + top_level: true, + ..Default::default() + }, + Mark::new(), + true, + )) +} + +macro_rules! to { + ($name:ident, $src:expr, $expected:expr) => { + test!( + Syntax::Es(EsConfig { + decorators: true, + ..Default::default() + }), + |_| chain!(resolver(Mark::new(), Mark::new(), false), tr()), + $name, + $src, + $expected + ); + }; +} + +macro_rules! optimized_out { + ($name:ident, $src:expr) => { + to!($name, $src, ""); + }; +} + +macro_rules! noop { + ($name:ident, $src:expr) => { + to!($name, $src, $src); + }; +} + +to!( + single_pass, + " + const a = 1; + + if (a) { + const b = 2; + } + ", + " + const a = 1; + if (a) {} + " +); + +optimized_out!(import_default_unused, "import foo from 'foo'"); + +optimized_out!(import_specific_unused, "import {foo} from 'foo'"); + +optimized_out!(import_mixed_unused, "import foo, { bar } from 'foo'"); + +noop!( + import_export_named, + "import foo from 'src'; export { foo };" +); + +to!( + import_unused_export_named, + "import foo, { bar } from 'src'; export { foo }; ", + "import foo from 'src'; export { foo }; " +); diff --git a/crates/swc_ecma_transforms_optimization/tests/fixture.rs b/crates/swc_ecma_transforms_optimization/tests/fixture.rs index 5af350a7080d..a570ee8f0eb5 100644 --- a/crates/swc_ecma_transforms_optimization/tests/fixture.rs +++ b/crates/swc_ecma_transforms_optimization/tests/fixture.rs @@ -25,7 +25,7 @@ fn dce_single_pass(input: PathBuf) { &|t| { let unresolved_mark = Mark::new(); - chain!(remover(t), dce(Default::default(), unresolved_mark)) + chain!(remover(t), dce(Default::default(), unresolved_mark, false)) }, &input, &output, @@ -45,7 +45,7 @@ fn dce_repeated(input: PathBuf) { &|t| { chain!( remover(t), - Repeat::new(dce(Default::default(), Mark::new())) + Repeat::new(dce(Default::default(), Mark::new(), false)) ) }, &input, @@ -64,7 +64,7 @@ fn dce_jsx(input: PathBuf) { jsx: true, ..Default::default() }), - &|t| chain!(remover(t), dce(Default::default(), Mark::new())), + &|t| chain!(remover(t), dce(Default::default(), Mark::new(), false)), &input, &output, Default::default(), diff --git a/crates/swc_ecma_transforms_optimization/tests/simplify.rs b/crates/swc_ecma_transforms_optimization/tests/simplify.rs index b6280e2b1913..38561f364b07 100644 --- a/crates/swc_ecma_transforms_optimization/tests/simplify.rs +++ b/crates/swc_ecma_transforms_optimization/tests/simplify.rs @@ -29,7 +29,7 @@ fn test(src: &str, expected: &str) { expr_simplifier(unresolved_mark, Default::default()), inlining::inlining(Default::default()), dead_branch_remover(unresolved_mark), - dce::dce(Default::default(), unresolved_mark) + dce::dce(Default::default(), unresolved_mark, false) )), ) }, @@ -57,7 +57,7 @@ macro_rules! to { expr_simplifier(unresolved_mark, Default::default()), inlining::inlining(Default::default()), dead_branch_remover(unresolved_mark), - dce::dce(Default::default(), unresolved_mark) + dce::dce(Default::default(), unresolved_mark, false) )), ) }, @@ -514,7 +514,7 @@ test!( ..Default::default() } ), - dce(Default::default(), unresolved_mark), + dce(Default::default(), unresolved_mark, false), inlining(Default::default()) ) }, @@ -590,7 +590,7 @@ test!( expr_simplifier(unresolved_mark, Default::default()), inlining::inlining(Default::default()), dead_branch_remover(unresolved_mark), - dce::dce(Default::default(), unresolved_mark) + dce::dce(Default::default(), unresolved_mark, false) )), es2018(Default::default()), es2017( diff --git a/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs b/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs index dc9ec48e69f6..b2aa69dea33f 100644 --- a/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs +++ b/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs @@ -15,6 +15,7 @@ fn tr() -> impl Fold { ..Default::default() }, Mark::new(), + false, )) } From ddba656e18b9eb23fe304c5071d9da9cbe71d16b Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Thu, 23 Feb 2023 22:18:22 +0900 Subject: [PATCH 02/12] fix: refactor option --- crates/swc/src/config/mod.rs | 32 +++++++++++-------- .../src/simplify/dce/mod.rs | 8 ++--- .../src/simplify/mod.rs | 4 +-- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/crates/swc/src/config/mod.rs b/crates/swc/src/config/mod.rs index 981bcb4baedc..99a585731abe 100644 --- a/crates/swc/src/config/mod.rs +++ b/crates/swc/src/config/mod.rs @@ -451,14 +451,17 @@ impl Options { } }; - let enable_simplifier = optimizer - .as_ref() - .map(|v| v.simplify.into_bool()) - .unwrap_or_default(); - let drop_unused_imports = optimizer - .as_ref() - .map(|v| v.drop_unused_imports.into_bool()) - .unwrap_or_default(); + let simplifier_pass = { + if let Some(ref opts) = optimizer.as_ref().and_then(|o| o.simplify) { + Either::Left(simplifier( + top_level_mark, + opts.drop_side_effect_imports, + Default::default(), + )) + } else { + Either::Right(noop()) + } + }; let optimization = { if let Some(opts) = optimizer.and_then(|o| o.globals) { @@ -475,10 +478,7 @@ impl Options { const_modules, optimization, Optional::new(export_default_from(), syntax.export_default_from()), - Optional::new( - simplifier(top_level_mark, drop_unused_imports, Default::default()), - enable_simplifier - ), + simplifier_pass, json_parse_pass ); @@ -1481,13 +1481,17 @@ pub struct OptimizerConfig { pub globals: Option, #[serde(default)] - pub simplify: BoolConfig, + pub simplify: Option, #[serde(default)] pub jsonify: Option, +} +#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] +#[serde(deny_unknown_fields, rename_all = "camelCase")] +pub struct SimplifyOption { #[serde(default)] - pub drop_unused_imports: BoolConfig, + pub drop_side_effect_imports: bool, } #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] 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 c74f65e7dac7..c9b1af1ebeb5 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs @@ -30,7 +30,7 @@ use crate::debug_assert_valid; pub fn dce( config: Config, unresolved_mark: Mark, - drop_unused_imports: bool, + drop_side_effect_imports: bool, ) -> impl Fold + VisitMut + Repeated + CompilerPass { as_folder(TreeShaker { expr_ctx: ExprCtx { @@ -45,7 +45,7 @@ pub fn dce( var_decl_kind: None, data: Default::default(), bindings: Default::default(), - drop_unused_imports, + drop_side_effect_imports, }) } @@ -92,7 +92,7 @@ struct TreeShaker { bindings: Arc>, - drop_unused_imports: bool, + drop_side_effect_imports: bool, } impl CompilerPass for TreeShaker { @@ -914,7 +914,7 @@ impl VisitMut for TreeShaker { i.visit_mut_with(self); - if self.drop_unused_imports && !is_for_side_effect && i.specifiers.is_empty() { + if self.drop_side_effect_imports && !is_for_side_effect && i.specifiers.is_empty() { debug!("Dropping an import because it's not used"); self.changed = true; *n = ModuleItem::Stmt(Stmt::Empty(EmptyStmt { span: DUMMY_SP })); diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs index f2000a00552f..5fc7cdc792f3 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs @@ -24,12 +24,12 @@ pub struct Config { /// changes. pub fn simplifier( unresolved_mark: Mark, - drop_unused_imports: bool, + drop_side_effect_imports: bool, c: Config, ) -> impl RepeatedJsPass { Repeat::new(chain!( expr_simplifier(unresolved_mark, c.expr), dead_branch_remover(unresolved_mark), - dce::dce(c.dce, unresolved_mark, drop_unused_imports) + dce::dce(c.dce, unresolved_mark, drop_side_effect_imports) )) } From 5ee946982ed85f2a63cd55312a3ded40ae286e61 Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Thu, 23 Feb 2023 23:18:37 +0900 Subject: [PATCH 03/12] fix: rename option --- crates/swc/src/config/mod.rs | 4 ++-- .../src/simplify/dce/mod.rs | 11 +++++++---- .../src/simplify/mod.rs | 4 ++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/crates/swc/src/config/mod.rs b/crates/swc/src/config/mod.rs index 99a585731abe..7b124ff7b698 100644 --- a/crates/swc/src/config/mod.rs +++ b/crates/swc/src/config/mod.rs @@ -455,7 +455,7 @@ impl Options { if let Some(ref opts) = optimizer.as_ref().and_then(|o| o.simplify) { Either::Left(simplifier( top_level_mark, - opts.drop_side_effect_imports, + opts.preserve_imports_with_side_effects.into_bool(), Default::default(), )) } else { @@ -1491,7 +1491,7 @@ pub struct OptimizerConfig { #[serde(deny_unknown_fields, rename_all = "camelCase")] pub struct SimplifyOption { #[serde(default)] - pub drop_side_effect_imports: bool, + pub preserve_imports_with_side_effects: BoolConfig, } #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] 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 c9b1af1ebeb5..d9e276886bfd 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs @@ -30,7 +30,7 @@ use crate::debug_assert_valid; pub fn dce( config: Config, unresolved_mark: Mark, - drop_side_effect_imports: bool, + preserve_imports_with_side_effects: bool, ) -> impl Fold + VisitMut + Repeated + CompilerPass { as_folder(TreeShaker { expr_ctx: ExprCtx { @@ -45,7 +45,7 @@ pub fn dce( var_decl_kind: None, data: Default::default(), bindings: Default::default(), - drop_side_effect_imports, + preserve_imports_with_side_effects, }) } @@ -92,7 +92,7 @@ struct TreeShaker { bindings: Arc>, - drop_side_effect_imports: bool, + preserve_imports_with_side_effects: bool, } impl CompilerPass for TreeShaker { @@ -914,7 +914,10 @@ impl VisitMut for TreeShaker { i.visit_mut_with(self); - if self.drop_side_effect_imports && !is_for_side_effect && i.specifiers.is_empty() { + if !self.preserve_imports_with_side_effects + && !is_for_side_effect + && i.specifiers.is_empty() + { debug!("Dropping an import because it's not used"); self.changed = true; *n = ModuleItem::Stmt(Stmt::Empty(EmptyStmt { span: DUMMY_SP })); diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs index 5fc7cdc792f3..30867ad1e5ec 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs @@ -24,12 +24,12 @@ pub struct Config { /// changes. pub fn simplifier( unresolved_mark: Mark, - drop_side_effect_imports: bool, + preserve_imports_with_side_effects: bool, c: Config, ) -> impl RepeatedJsPass { Repeat::new(chain!( expr_simplifier(unresolved_mark, c.expr), dead_branch_remover(unresolved_mark), - dce::dce(c.dce, unresolved_mark, drop_side_effect_imports) + dce::dce(c.dce, unresolved_mark, preserve_imports_with_side_effects) )) } From 6114dce8704c89e16f077d22c0d73b99aa316492 Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Thu, 23 Feb 2023 23:56:29 +0900 Subject: [PATCH 04/12] fix: update option name --- .../globals/env-map-computed/input/.swcrc | 1 - .../tests/fixture/globals/env-map/input/.swcrc | 1 - .../fixture/globals/member-expr/1/input/.swcrc | 1 - .../globals/member-expr/precendence/input/.swcrc | 1 - .../tests/fixture/globals/typeofs/input/.swcrc | 1 - .../tests/fixture/issues-4xxx/4953/input/.swcrc | 6 ++++-- .../tests/fixture/issues-6xxx/6771/input/.swcrc | 16 ++++++++++++++++ .../fixture/issues-6xxx/6771/input/index.js | 1 + .../fixture/issues-6xxx/6771/output/index.js | 0 crates/swc_bundler/src/bundler/optimize.rs | 2 +- crates/swc_ecma_minifier/src/lib.rs | 2 +- ...ts.rs => remove_imports_with_side_effects.rs} | 2 +- .../tests/simplify.rs | 8 ++++---- .../tests/simplify_dce.rs | 2 +- 14 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 crates/swc/tests/fixture/issues-6xxx/6771/input/.swcrc create mode 100644 crates/swc/tests/fixture/issues-6xxx/6771/input/index.js create mode 100644 crates/swc/tests/fixture/issues-6xxx/6771/output/index.js rename crates/swc_ecma_transforms_optimization/tests/{drop_unused_imports.rs => remove_imports_with_side_effects.rs} (99%) diff --git a/crates/swc/tests/fixture/globals/env-map-computed/input/.swcrc b/crates/swc/tests/fixture/globals/env-map-computed/input/.swcrc index 277545cd700d..807a7184040b 100644 --- a/crates/swc/tests/fixture/globals/env-map-computed/input/.swcrc +++ b/crates/swc/tests/fixture/globals/env-map-computed/input/.swcrc @@ -2,7 +2,6 @@ "jsc": { "transform": { "optimizer": { - "simplify": false, "globals": { "envs": { "NODE_ENV_ALT": "true" diff --git a/crates/swc/tests/fixture/globals/env-map/input/.swcrc b/crates/swc/tests/fixture/globals/env-map/input/.swcrc index 277545cd700d..807a7184040b 100644 --- a/crates/swc/tests/fixture/globals/env-map/input/.swcrc +++ b/crates/swc/tests/fixture/globals/env-map/input/.swcrc @@ -2,7 +2,6 @@ "jsc": { "transform": { "optimizer": { - "simplify": false, "globals": { "envs": { "NODE_ENV_ALT": "true" diff --git a/crates/swc/tests/fixture/globals/member-expr/1/input/.swcrc b/crates/swc/tests/fixture/globals/member-expr/1/input/.swcrc index fa229c39092a..24c60d1bf167 100644 --- a/crates/swc/tests/fixture/globals/member-expr/1/input/.swcrc +++ b/crates/swc/tests/fixture/globals/member-expr/1/input/.swcrc @@ -2,7 +2,6 @@ "jsc": { "transform": { "optimizer": { - "simplify": false, "globals": { "vars": { "process.browser": "true" diff --git a/crates/swc/tests/fixture/globals/member-expr/precendence/input/.swcrc b/crates/swc/tests/fixture/globals/member-expr/precendence/input/.swcrc index eeb4afd8e19c..8f9520105d5f 100644 --- a/crates/swc/tests/fixture/globals/member-expr/precendence/input/.swcrc +++ b/crates/swc/tests/fixture/globals/member-expr/precendence/input/.swcrc @@ -2,7 +2,6 @@ "jsc": { "transform": { "optimizer": { - "simplify": false, "globals": { "vars": { "value.debug": "true", diff --git a/crates/swc/tests/fixture/globals/typeofs/input/.swcrc b/crates/swc/tests/fixture/globals/typeofs/input/.swcrc index 33948c61f436..b75f5fa9f101 100644 --- a/crates/swc/tests/fixture/globals/typeofs/input/.swcrc +++ b/crates/swc/tests/fixture/globals/typeofs/input/.swcrc @@ -2,7 +2,6 @@ "jsc": { "transform": { "optimizer": { - "simplify": false, "globals": { "typeofs": { "window": "object" diff --git a/crates/swc/tests/fixture/issues-4xxx/4953/input/.swcrc b/crates/swc/tests/fixture/issues-4xxx/4953/input/.swcrc index cda457e93904..562ee2d78aa1 100644 --- a/crates/swc/tests/fixture/issues-4xxx/4953/input/.swcrc +++ b/crates/swc/tests/fixture/issues-4xxx/4953/input/.swcrc @@ -66,7 +66,9 @@ "development": true }, "optimizer": { - "simplify": true + "simplify": { + "preserveImportsWithSideEffects": true + } } } }, @@ -74,4 +76,4 @@ "type": "commonjs" }, "minify": false -} \ No newline at end of file +} diff --git a/crates/swc/tests/fixture/issues-6xxx/6771/input/.swcrc b/crates/swc/tests/fixture/issues-6xxx/6771/input/.swcrc new file mode 100644 index 000000000000..505327adc4c8 --- /dev/null +++ b/crates/swc/tests/fixture/issues-6xxx/6771/input/.swcrc @@ -0,0 +1,16 @@ +{ + "jsc": { + "transform": { + "optimizer": { + "simplify": { + "preserveImportsWithSideEffects": false + }, + "globals": { + "envs": { + "NODE_ENV_ALT": "true" + } + } + } + } + } +} diff --git a/crates/swc/tests/fixture/issues-6xxx/6771/input/index.js b/crates/swc/tests/fixture/issues-6xxx/6771/input/index.js new file mode 100644 index 000000000000..78d43db9807c --- /dev/null +++ b/crates/swc/tests/fixture/issues-6xxx/6771/input/index.js @@ -0,0 +1 @@ +import path from 'path'; diff --git a/crates/swc/tests/fixture/issues-6xxx/6771/output/index.js b/crates/swc/tests/fixture/issues-6xxx/6771/output/index.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/crates/swc_bundler/src/bundler/optimize.rs b/crates/swc_bundler/src/bundler/optimize.rs index 6039354864ba..0812ec9cc9c9 100644 --- a/crates/swc_bundler/src/bundler/optimize.rs +++ b/crates/swc_bundler/src/bundler/optimize.rs @@ -28,7 +28,7 @@ where top_retain: Default::default(), }, self.unresolved_mark, - false, + true, ))); } node diff --git a/crates/swc_ecma_minifier/src/lib.rs b/crates/swc_ecma_minifier/src/lib.rs index d9277846b3aa..4d053fbe3974 100644 --- a/crates/swc_ecma_minifier/src/lib.rs +++ b/crates/swc_ecma_minifier/src/lib.rs @@ -306,7 +306,7 @@ fn perform_dce(m: &mut Program, options: &CompressOptions, extra: &ExtraOptions) top_retain: options.top_retain.clone(), }, extra.unresolved_mark, - false, + true, ); loop { diff --git a/crates/swc_ecma_transforms_optimization/tests/drop_unused_imports.rs b/crates/swc_ecma_transforms_optimization/tests/remove_imports_with_side_effects.rs similarity index 99% rename from crates/swc_ecma_transforms_optimization/tests/drop_unused_imports.rs rename to crates/swc_ecma_transforms_optimization/tests/remove_imports_with_side_effects.rs index 4a6a7e5de2d8..8c4e051fc49f 100644 --- a/crates/swc_ecma_transforms_optimization/tests/drop_unused_imports.rs +++ b/crates/swc_ecma_transforms_optimization/tests/remove_imports_with_side_effects.rs @@ -12,7 +12,7 @@ fn tr() -> impl Fold { ..Default::default() }, Mark::new(), - true, + false, )) } diff --git a/crates/swc_ecma_transforms_optimization/tests/simplify.rs b/crates/swc_ecma_transforms_optimization/tests/simplify.rs index 38561f364b07..b39db0411609 100644 --- a/crates/swc_ecma_transforms_optimization/tests/simplify.rs +++ b/crates/swc_ecma_transforms_optimization/tests/simplify.rs @@ -29,7 +29,7 @@ fn test(src: &str, expected: &str) { expr_simplifier(unresolved_mark, Default::default()), inlining::inlining(Default::default()), dead_branch_remover(unresolved_mark), - dce::dce(Default::default(), unresolved_mark, false) + dce::dce(Default::default(), unresolved_mark, true) )), ) }, @@ -57,7 +57,7 @@ macro_rules! to { expr_simplifier(unresolved_mark, Default::default()), inlining::inlining(Default::default()), dead_branch_remover(unresolved_mark), - dce::dce(Default::default(), unresolved_mark, false) + dce::dce(Default::default(), unresolved_mark, true) )), ) }, @@ -514,7 +514,7 @@ test!( ..Default::default() } ), - dce(Default::default(), unresolved_mark, false), + dce(Default::default(), unresolved_mark, true), inlining(Default::default()) ) }, @@ -590,7 +590,7 @@ test!( expr_simplifier(unresolved_mark, Default::default()), inlining::inlining(Default::default()), dead_branch_remover(unresolved_mark), - dce::dce(Default::default(), unresolved_mark, false) + dce::dce(Default::default(), unresolved_mark, true) )), es2018(Default::default()), es2017( diff --git a/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs b/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs index 82a1398c20da..d8588730c282 100644 --- a/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs +++ b/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs @@ -15,7 +15,7 @@ fn tr() -> impl Fold { ..Default::default() }, Mark::new(), - false, + true, )) } From ea95e080765c3ac645dd5ef9807c85ad6770689b Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Fri, 24 Feb 2023 00:15:44 +0900 Subject: [PATCH 05/12] fix: update tests --- crates/swc_ecma_transforms_optimization/tests/fixture.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/swc_ecma_transforms_optimization/tests/fixture.rs b/crates/swc_ecma_transforms_optimization/tests/fixture.rs index a570ee8f0eb5..1dce82a12cb7 100644 --- a/crates/swc_ecma_transforms_optimization/tests/fixture.rs +++ b/crates/swc_ecma_transforms_optimization/tests/fixture.rs @@ -25,7 +25,7 @@ fn dce_single_pass(input: PathBuf) { &|t| { let unresolved_mark = Mark::new(); - chain!(remover(t), dce(Default::default(), unresolved_mark, false)) + chain!(remover(t), dce(Default::default(), unresolved_mark, true)) }, &input, &output, @@ -45,7 +45,7 @@ fn dce_repeated(input: PathBuf) { &|t| { chain!( remover(t), - Repeat::new(dce(Default::default(), Mark::new(), false)) + Repeat::new(dce(Default::default(), Mark::new(), true)) ) }, &input, @@ -64,7 +64,7 @@ fn dce_jsx(input: PathBuf) { jsx: true, ..Default::default() }), - &|t| chain!(remover(t), dce(Default::default(), Mark::new(), false)), + &|t| chain!(remover(t), dce(Default::default(), Mark::new(), true)), &input, &output, Default::default(), From cb6f660b718ceee5370a08554ac97d54cf4670ce Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Sun, 26 Feb 2023 11:44:34 +0900 Subject: [PATCH 06/12] fix: update node test --- node-swc/__tests__/transform/optimizer_test.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/node-swc/__tests__/transform/optimizer_test.js b/node-swc/__tests__/transform/optimizer_test.js index 14b54d85910c..56b721f9b1c9 100644 --- a/node-swc/__tests__/transform/optimizer_test.js +++ b/node-swc/__tests__/transform/optimizer_test.js @@ -7,6 +7,9 @@ it('should perform dce', () => { jsc: { transform: { optimizer: { + simplify: { + preserveImportsWithSideEffects: true + }, globals: { vars: { __DEBUG__: 'true' @@ -20,4 +23,4 @@ it('should perform dce', () => { expect(out.map).toBeFalsy(); expect(out.code.trim()).toBe(`console.log("Foo");`); -}); \ No newline at end of file +}); From d52f48639991aca3f0ecdc3ccc7f801175e5c1f3 Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Thu, 2 Mar 2023 01:53:00 +0900 Subject: [PATCH 07/12] fix: revert test config --- .../swc/tests/fixture/globals/env-map-computed/input/.swcrc | 1 + crates/swc/tests/fixture/globals/env-map/input/.swcrc | 1 + crates/swc/tests/fixture/globals/member-expr/1/input/.swcrc | 1 + .../fixture/globals/member-expr/precendence/input/.swcrc | 1 + crates/swc/tests/fixture/globals/typeofs/input/.swcrc | 1 + crates/swc/tests/fixture/issues-4xxx/4953/input/.swcrc | 6 ++---- 6 files changed, 7 insertions(+), 4 deletions(-) diff --git a/crates/swc/tests/fixture/globals/env-map-computed/input/.swcrc b/crates/swc/tests/fixture/globals/env-map-computed/input/.swcrc index 807a7184040b..277545cd700d 100644 --- a/crates/swc/tests/fixture/globals/env-map-computed/input/.swcrc +++ b/crates/swc/tests/fixture/globals/env-map-computed/input/.swcrc @@ -2,6 +2,7 @@ "jsc": { "transform": { "optimizer": { + "simplify": false, "globals": { "envs": { "NODE_ENV_ALT": "true" diff --git a/crates/swc/tests/fixture/globals/env-map/input/.swcrc b/crates/swc/tests/fixture/globals/env-map/input/.swcrc index 807a7184040b..277545cd700d 100644 --- a/crates/swc/tests/fixture/globals/env-map/input/.swcrc +++ b/crates/swc/tests/fixture/globals/env-map/input/.swcrc @@ -2,6 +2,7 @@ "jsc": { "transform": { "optimizer": { + "simplify": false, "globals": { "envs": { "NODE_ENV_ALT": "true" diff --git a/crates/swc/tests/fixture/globals/member-expr/1/input/.swcrc b/crates/swc/tests/fixture/globals/member-expr/1/input/.swcrc index 24c60d1bf167..fa229c39092a 100644 --- a/crates/swc/tests/fixture/globals/member-expr/1/input/.swcrc +++ b/crates/swc/tests/fixture/globals/member-expr/1/input/.swcrc @@ -2,6 +2,7 @@ "jsc": { "transform": { "optimizer": { + "simplify": false, "globals": { "vars": { "process.browser": "true" diff --git a/crates/swc/tests/fixture/globals/member-expr/precendence/input/.swcrc b/crates/swc/tests/fixture/globals/member-expr/precendence/input/.swcrc index 8f9520105d5f..eeb4afd8e19c 100644 --- a/crates/swc/tests/fixture/globals/member-expr/precendence/input/.swcrc +++ b/crates/swc/tests/fixture/globals/member-expr/precendence/input/.swcrc @@ -2,6 +2,7 @@ "jsc": { "transform": { "optimizer": { + "simplify": false, "globals": { "vars": { "value.debug": "true", diff --git a/crates/swc/tests/fixture/globals/typeofs/input/.swcrc b/crates/swc/tests/fixture/globals/typeofs/input/.swcrc index b75f5fa9f101..33948c61f436 100644 --- a/crates/swc/tests/fixture/globals/typeofs/input/.swcrc +++ b/crates/swc/tests/fixture/globals/typeofs/input/.swcrc @@ -2,6 +2,7 @@ "jsc": { "transform": { "optimizer": { + "simplify": false, "globals": { "typeofs": { "window": "object" diff --git a/crates/swc/tests/fixture/issues-4xxx/4953/input/.swcrc b/crates/swc/tests/fixture/issues-4xxx/4953/input/.swcrc index 562ee2d78aa1..cda457e93904 100644 --- a/crates/swc/tests/fixture/issues-4xxx/4953/input/.swcrc +++ b/crates/swc/tests/fixture/issues-4xxx/4953/input/.swcrc @@ -66,9 +66,7 @@ "development": true }, "optimizer": { - "simplify": { - "preserveImportsWithSideEffects": true - } + "simplify": true } } }, @@ -76,4 +74,4 @@ "type": "commonjs" }, "minify": false -} +} \ No newline at end of file From 7c24306d0d3dfb68d2e4870d70ca8e3308758291 Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Thu, 2 Mar 2023 01:53:32 +0900 Subject: [PATCH 08/12] Revert "fix: update node test" This reverts commit cb6f660b718ceee5370a08554ac97d54cf4670ce. --- node-swc/__tests__/transform/optimizer_test.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/node-swc/__tests__/transform/optimizer_test.js b/node-swc/__tests__/transform/optimizer_test.js index 56b721f9b1c9..14b54d85910c 100644 --- a/node-swc/__tests__/transform/optimizer_test.js +++ b/node-swc/__tests__/transform/optimizer_test.js @@ -7,9 +7,6 @@ it('should perform dce', () => { jsc: { transform: { optimizer: { - simplify: { - preserveImportsWithSideEffects: true - }, globals: { vars: { __DEBUG__: 'true' @@ -23,4 +20,4 @@ it('should perform dce', () => { expect(out.map).toBeFalsy(); expect(out.code.trim()).toBe(`console.log("Foo");`); -}); +}); \ No newline at end of file From d296f8ba77486e20b445ab80ba500938b2e745c1 Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Thu, 2 Mar 2023 02:04:40 +0900 Subject: [PATCH 09/12] feat: refactor simplify option --- crates/swc/src/config/mod.rs | 44 ++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/crates/swc/src/config/mod.rs b/crates/swc/src/config/mod.rs index 7b124ff7b698..ccf957c7c969 100644 --- a/crates/swc/src/config/mod.rs +++ b/crates/swc/src/config/mod.rs @@ -453,13 +453,22 @@ impl Options { let simplifier_pass = { if let Some(ref opts) = optimizer.as_ref().and_then(|o| o.simplify) { - Either::Left(simplifier( - top_level_mark, - opts.preserve_imports_with_side_effects.into_bool(), - Default::default(), - )) + match opts { + SimplifyOption::Bool(allow_simplify) => { + if *allow_simplify { + Either::Left(simplifier(top_level_mark, true, Default::default())) + } else { + Either::Right(noop()) + } + } + SimplifyOption::Json(cfg) => Either::Left(simplifier( + top_level_mark, + cfg.preserve_imports_with_side_effects, + Default::default(), + )), + } } else { - Either::Right(noop()) + Either::Left(simplifier(top_level_mark, true, Default::default())) } }; @@ -1487,11 +1496,28 @@ pub struct OptimizerConfig { pub jsonify: Option, } +#[derive(Debug, Copy, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum SimplifyOption { + Bool(bool), + Json(SimplifyJsonOption), +} + +impl Default for SimplifyOption { + fn default() -> Self { + SimplifyOption::Bool(true) + } +} + #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "camelCase")] -pub struct SimplifyOption { - #[serde(default)] - pub preserve_imports_with_side_effects: BoolConfig, +pub struct SimplifyJsonOption { + #[serde(default = "preserve_imports_with_side_effects")] + pub preserve_imports_with_side_effects: bool, +} + +fn preserve_imports_with_side_effects() -> bool { + true } #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] From 65861d897b5f43cd7a565e9cc6ceea976233648f Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Thu, 2 Mar 2023 02:06:32 +0900 Subject: [PATCH 10/12] feat: refactor default function --- crates/swc/src/config/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/swc/src/config/mod.rs b/crates/swc/src/config/mod.rs index ccf957c7c969..22dde3140ce9 100644 --- a/crates/swc/src/config/mod.rs +++ b/crates/swc/src/config/mod.rs @@ -1512,11 +1512,11 @@ impl Default for SimplifyOption { #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "camelCase")] pub struct SimplifyJsonOption { - #[serde(default = "preserve_imports_with_side_effects")] + #[serde(default = "default_preserve_imports_with_side_effects")] pub preserve_imports_with_side_effects: bool, } -fn preserve_imports_with_side_effects() -> bool { +fn default_preserve_imports_with_side_effects() -> bool { true } From eaeea1afecce5f44a464069d85e90271611da5e1 Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Thu, 2 Mar 2023 18:45:54 +0900 Subject: [PATCH 11/12] fix: ci error --- crates/swc/src/config/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/swc/src/config/mod.rs b/crates/swc/src/config/mod.rs index 22dde3140ce9..b4781572d0ef 100644 --- a/crates/swc/src/config/mod.rs +++ b/crates/swc/src/config/mod.rs @@ -468,7 +468,7 @@ impl Options { )), } } else { - Either::Left(simplifier(top_level_mark, true, Default::default())) + Either::Right(noop()) } }; From c89bd09c79f354d86fb653f8886e5a6a25b54a66 Mon Sep 17 00:00:00 2001 From: nissy-dev Date: Sat, 4 Mar 2023 21:41:53 +0900 Subject: [PATCH 12/12] fix: move option to Config --- crates/swc/src/config/mod.rs | 18 ++++++++++++++---- crates/swc_bundler/src/bundler/optimize.rs | 2 +- crates/swc_ecma_minifier/src/lib.rs | 2 +- .../src/simplify/dce/mod.rs | 10 +++++----- .../src/simplify/mod.rs | 8 ++------ .../tests/fixture.rs | 6 +++--- .../tests/remove_imports_with_side_effects.rs | 2 +- .../tests/simplify.rs | 8 ++++---- .../tests/simplify_dce.rs | 1 - 9 files changed, 31 insertions(+), 26 deletions(-) diff --git a/crates/swc/src/config/mod.rs b/crates/swc/src/config/mod.rs index b4781572d0ef..6dae698d9508 100644 --- a/crates/swc/src/config/mod.rs +++ b/crates/swc/src/config/mod.rs @@ -67,7 +67,11 @@ use swc_ecma_transforms::{ Assumptions, }; use swc_ecma_transforms_compat::es2015::regenerator; -use swc_ecma_transforms_optimization::{inline_globals2, GlobalExprMap}; +use swc_ecma_transforms_optimization::{ + inline_globals2, + simplify::{dce::Config as DceConfig, Config as SimplifyConfig}, + GlobalExprMap, +}; use swc_ecma_visit::{Fold, VisitMutWith}; pub use crate::plugin::PluginConfig; @@ -456,15 +460,21 @@ impl Options { match opts { SimplifyOption::Bool(allow_simplify) => { if *allow_simplify { - Either::Left(simplifier(top_level_mark, true, Default::default())) + Either::Left(simplifier(top_level_mark, Default::default())) } else { Either::Right(noop()) } } SimplifyOption::Json(cfg) => Either::Left(simplifier( top_level_mark, - cfg.preserve_imports_with_side_effects, - Default::default(), + SimplifyConfig { + dce: DceConfig { + preserve_imports_with_side_effects: cfg + .preserve_imports_with_side_effects, + ..Default::default() + }, + ..Default::default() + }, )), } } else { diff --git a/crates/swc_bundler/src/bundler/optimize.rs b/crates/swc_bundler/src/bundler/optimize.rs index 0812ec9cc9c9..fd4998af6cd7 100644 --- a/crates/swc_bundler/src/bundler/optimize.rs +++ b/crates/swc_bundler/src/bundler/optimize.rs @@ -26,9 +26,9 @@ where module_mark: None, top_level: true, top_retain: Default::default(), + preserve_imports_with_side_effects: true, }, self.unresolved_mark, - true, ))); } node diff --git a/crates/swc_ecma_minifier/src/lib.rs b/crates/swc_ecma_minifier/src/lib.rs index 4d053fbe3974..7dff7819c391 100644 --- a/crates/swc_ecma_minifier/src/lib.rs +++ b/crates/swc_ecma_minifier/src/lib.rs @@ -304,9 +304,9 @@ fn perform_dce(m: &mut Program, options: &CompressOptions, extra: &ExtraOptions) module_mark: None, top_level: options.top_level(), top_retain: options.top_retain.clone(), + preserve_imports_with_side_effects: true, }, extra.unresolved_mark, - true, ); loop { 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 d9e276886bfd..86d85a9e0afc 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs @@ -30,7 +30,6 @@ use crate::debug_assert_valid; pub fn dce( config: Config, unresolved_mark: Mark, - preserve_imports_with_side_effects: bool, ) -> impl Fold + VisitMut + Repeated + CompilerPass { as_folder(TreeShaker { expr_ctx: ExprCtx { @@ -45,7 +44,6 @@ pub fn dce( var_decl_kind: None, data: Default::default(), bindings: Default::default(), - preserve_imports_with_side_effects, }) } @@ -65,6 +63,9 @@ pub struct Config { /// Declarations with a symbol in this set will be preserved. pub top_retain: Vec, + + /// If false, imports with side effects will be removed. + pub preserve_imports_with_side_effects: bool, } impl Default for Config { @@ -73,6 +74,7 @@ impl Default for Config { module_mark: Default::default(), top_level: true, top_retain: Default::default(), + preserve_imports_with_side_effects: true, } } } @@ -91,8 +93,6 @@ struct TreeShaker { data: Arc, bindings: Arc>, - - preserve_imports_with_side_effects: bool, } impl CompilerPass for TreeShaker { @@ -914,7 +914,7 @@ impl VisitMut for TreeShaker { i.visit_mut_with(self); - if !self.preserve_imports_with_side_effects + if !self.config.preserve_imports_with_side_effects && !is_for_side_effect && i.specifiers.is_empty() { diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs index 30867ad1e5ec..3d45ee1089f8 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/mod.rs @@ -22,14 +22,10 @@ pub struct Config { /// Performs simplify-expr, inlining, remove-dead-branch and dce until nothing /// changes. -pub fn simplifier( - unresolved_mark: Mark, - preserve_imports_with_side_effects: bool, - c: Config, -) -> impl RepeatedJsPass { +pub fn simplifier(unresolved_mark: Mark, c: Config) -> impl RepeatedJsPass { Repeat::new(chain!( expr_simplifier(unresolved_mark, c.expr), dead_branch_remover(unresolved_mark), - dce::dce(c.dce, unresolved_mark, preserve_imports_with_side_effects) + dce::dce(c.dce, unresolved_mark) )) } diff --git a/crates/swc_ecma_transforms_optimization/tests/fixture.rs b/crates/swc_ecma_transforms_optimization/tests/fixture.rs index 1dce82a12cb7..5af350a7080d 100644 --- a/crates/swc_ecma_transforms_optimization/tests/fixture.rs +++ b/crates/swc_ecma_transforms_optimization/tests/fixture.rs @@ -25,7 +25,7 @@ fn dce_single_pass(input: PathBuf) { &|t| { let unresolved_mark = Mark::new(); - chain!(remover(t), dce(Default::default(), unresolved_mark, true)) + chain!(remover(t), dce(Default::default(), unresolved_mark)) }, &input, &output, @@ -45,7 +45,7 @@ fn dce_repeated(input: PathBuf) { &|t| { chain!( remover(t), - Repeat::new(dce(Default::default(), Mark::new(), true)) + Repeat::new(dce(Default::default(), Mark::new())) ) }, &input, @@ -64,7 +64,7 @@ fn dce_jsx(input: PathBuf) { jsx: true, ..Default::default() }), - &|t| chain!(remover(t), dce(Default::default(), Mark::new(), true)), + &|t| chain!(remover(t), dce(Default::default(), Mark::new())), &input, &output, Default::default(), diff --git a/crates/swc_ecma_transforms_optimization/tests/remove_imports_with_side_effects.rs b/crates/swc_ecma_transforms_optimization/tests/remove_imports_with_side_effects.rs index 8c4e051fc49f..f40b6430bea6 100644 --- a/crates/swc_ecma_transforms_optimization/tests/remove_imports_with_side_effects.rs +++ b/crates/swc_ecma_transforms_optimization/tests/remove_imports_with_side_effects.rs @@ -9,10 +9,10 @@ fn tr() -> impl Fold { Repeat::new(dce( Config { top_level: true, + preserve_imports_with_side_effects: false, ..Default::default() }, Mark::new(), - false, )) } diff --git a/crates/swc_ecma_transforms_optimization/tests/simplify.rs b/crates/swc_ecma_transforms_optimization/tests/simplify.rs index b39db0411609..b6280e2b1913 100644 --- a/crates/swc_ecma_transforms_optimization/tests/simplify.rs +++ b/crates/swc_ecma_transforms_optimization/tests/simplify.rs @@ -29,7 +29,7 @@ fn test(src: &str, expected: &str) { expr_simplifier(unresolved_mark, Default::default()), inlining::inlining(Default::default()), dead_branch_remover(unresolved_mark), - dce::dce(Default::default(), unresolved_mark, true) + dce::dce(Default::default(), unresolved_mark) )), ) }, @@ -57,7 +57,7 @@ macro_rules! to { expr_simplifier(unresolved_mark, Default::default()), inlining::inlining(Default::default()), dead_branch_remover(unresolved_mark), - dce::dce(Default::default(), unresolved_mark, true) + dce::dce(Default::default(), unresolved_mark) )), ) }, @@ -514,7 +514,7 @@ test!( ..Default::default() } ), - dce(Default::default(), unresolved_mark, true), + dce(Default::default(), unresolved_mark), inlining(Default::default()) ) }, @@ -590,7 +590,7 @@ test!( expr_simplifier(unresolved_mark, Default::default()), inlining::inlining(Default::default()), dead_branch_remover(unresolved_mark), - dce::dce(Default::default(), unresolved_mark, true) + dce::dce(Default::default(), unresolved_mark) )), es2018(Default::default()), es2017( diff --git a/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs b/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs index d8588730c282..bcccc835aa65 100644 --- a/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs +++ b/crates/swc_ecma_transforms_optimization/tests/simplify_dce.rs @@ -15,7 +15,6 @@ fn tr() -> impl Fold { ..Default::default() }, Mark::new(), - true, )) }