Skip to content

Commit

Permalink
Unify Collect for (no)scopehoist
Browse files Browse the repository at this point in the history
  • Loading branch information
mischnic committed Nov 6, 2021
1 parent 539ed28 commit 460d0ee
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 40 deletions.
25 changes: 7 additions & 18 deletions packages/transformers/js/core/src/hoist.rs
Expand Up @@ -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 {
Expand All @@ -24,28 +24,16 @@ macro_rules! hash {

pub fn hoist(
module: Module,
source_map: Lrc<swc_common::SourceMap>,
module_id: &str,
decls: HashSet<IdentId>,
ignore_mark: Mark,
global_mark: Mark,
trace_bailouts: bool,
collect: &Collect,
) -> Result<(Module, HoistResult, Vec<Diagnostic>), Vec<Diagnostic>> {
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))
}
Expand Down Expand Up @@ -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;

Expand Down
36 changes: 14 additions & 22 deletions packages/transformers/js/core/src/lib.rs
Expand Up @@ -396,16 +396,20 @@ pub fn transform(config: Config) -> Result<TransformResult, std::io::Error> {
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);
Expand All @@ -418,19 +422,7 @@ pub fn transform(config: Config) -> Result<TransformResult, std::io::Error> {
}
}
} 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;
Expand Down

0 comments on commit 460d0ee

Please sign in to comment.