From 460d0eed1fef5f3b9fdd42efaba7cf5aecf986d8 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Sat, 6 Nov 2021 18:27:11 +0100 Subject: [PATCH] Unify Collect for (no)scopehoist --- packages/transformers/js/core/src/hoist.rs | 25 +++++---------- packages/transformers/js/core/src/lib.rs | 36 +++++++++------------- 2 files changed, 21 insertions(+), 40 deletions(-) diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index 770831c4bf6..5a9a9c2dcd4 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -3,15 +3,15 @@ use std::collections::hash_map::DefaultHasher; use std::collections::{HashMap, HashSet}; use std::hash::Hasher; use swc_atoms::JsWord; -use swc_common::{sync::Lrc, Mark, Span, SyntaxContext, DUMMY_SP}; +use swc_common::{Span, SyntaxContext, DUMMY_SP}; use swc_ecmascript::ast::*; -use swc_ecmascript::visit::{Fold, FoldWith, VisitWith}; +use swc_ecmascript::visit::{Fold, FoldWith}; use crate::collect::{Collect, Import, ImportKind}; use crate::id; use crate::utils::{ match_import, match_member_expr, match_require, CodeHighlight, Diagnostic, DiagnosticSeverity, - IdentId, SourceLocation, + SourceLocation, }; macro_rules! hash { @@ -24,28 +24,16 @@ macro_rules! hash { pub fn hoist( module: Module, - source_map: Lrc, module_id: &str, - decls: HashSet, - ignore_mark: Mark, - global_mark: Mark, - trace_bailouts: bool, + collect: &Collect, ) -> Result<(Module, HoistResult, Vec), Vec> { - let mut collect = Collect::new(source_map, decls, ignore_mark, global_mark, trace_bailouts); - module.visit_with(&Invalid { span: DUMMY_SP } as _, &mut collect); - - let mut hoist = Hoist::new(module_id, &collect); + let mut hoist = Hoist::new(module_id, collect); let module = module.fold_with(&mut hoist); + if !hoist.diagnostics.is_empty() { return Err(hoist.diagnostics); } - if let Some(bailouts) = &collect.bailouts { - hoist - .diagnostics - .extend(bailouts.iter().map(|bailout| bailout.to_diagnostic())); - } - let diagnostics = std::mem::take(&mut hoist.diagnostics); Ok((module, hoist.get_result(), diagnostics)) } @@ -1121,6 +1109,7 @@ mod tests { use swc_ecmascript::parser::lexer::Lexer; use swc_ecmascript::parser::{EsConfig, Parser, StringInput, Syntax}; use swc_ecmascript::transforms::resolver_with_mark; + use swc_ecmascript::visit::VisitWith; extern crate indoc; use self::indoc::indoc; diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index 01e3b587a6d..5d55ec1d3be 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -396,16 +396,20 @@ pub fn transform(config: Config) -> Result { return Ok(result); } + let mut collect = Collect::new( + source_map.clone(), + decls, + ignore_mark, + global_mark, + config.trace_bailouts, + ); + module.visit_with(&Invalid { span: DUMMY_SP } as _, &mut collect); + if let Some(bailouts) = &collect.bailouts { + diagnostics.extend(bailouts.iter().map(|bailout| bailout.to_diagnostic())); + } + let module = if config.scope_hoist { - let res = hoist( - module, - source_map.clone(), - config.module_id.as_str(), - decls, - ignore_mark, - global_mark, - config.trace_bailouts, - ); + let res = hoist(module, config.module_id.as_str(), &collect); match res { Ok((module, hoist_result, hoist_diagnostics)) => { result.hoist_result = Some(hoist_result); @@ -418,19 +422,7 @@ pub fn transform(config: Config) -> Result { } } } else { - let mut symbols_collect = Collect::new( - source_map.clone(), - decls, - Mark::fresh(Mark::root()), - global_mark, - config.trace_bailouts, - ); - module.visit_with(&Invalid { span: DUMMY_SP } as _, &mut symbols_collect); - - if let Some(bailouts) = &symbols_collect.bailouts { - diagnostics.extend(bailouts.iter().map(|bailout| bailout.to_diagnostic())); - } - result.symbol_result = Some(symbols_collect.into()); + result.symbol_result = Some(collect.into()); let (module, needs_helpers) = esm2cjs(module, versions); result.needs_esm_helpers = needs_helpers;