Skip to content

Commit cfd26ec

Browse files
committedNov 12, 2024
Bump swc to latest
1 parent 71acf87 commit cfd26ec

File tree

8 files changed

+340
-335
lines changed

8 files changed

+340
-335
lines changed
 

‎Cargo.lock

+235-222
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎crates/macros/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ napi = ["dep:napi", "dep:napi-derive", "dep:crossbeam-channel"]
99

1010
[dependencies]
1111
indexmap = "1.9.2"
12-
swc_core = { version = "0.106", features = [
12+
swc_core = { version = "5.0.4", features = [
1313
"common",
1414
"common_ahash",
1515
"common_sourcemap",

‎packages/transformers/js/core/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ edition = "2021"
88
crate-type = ["rlib"]
99

1010
[dependencies]
11-
swc_core = { version = "0.106", features = [
11+
swc_core = { version = "5.0.4", features = [
1212
"common",
1313
"common_ahash",
1414
"common_sourcemap",

‎packages/transformers/js/core/src/global_replacer.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ impl VisitMut for GlobalReplacer<'_> {
172172
0..0,
173173
self
174174
.globals
175-
.values()
176-
.map(|(_, stmt)| ast::ModuleItem::Stmt(stmt.clone())),
175+
.drain(..)
176+
.map(|(_, (_, stmt))| ast::ModuleItem::Stmt(stmt)),
177177
);
178178
}
179179
}

‎packages/transformers/js/core/src/hoist.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -1354,12 +1354,12 @@ impl<'a> Hoist<'a> {
13541354
#[cfg(test)]
13551355
mod tests {
13561356
use swc_core::{
1357-
common::{chain, comments::SingleThreadedComments, sync::Lrc, FileName, Globals, SourceMap},
1357+
common::{comments::SingleThreadedComments, sync::Lrc, FileName, Globals, SourceMap},
13581358
ecma::{
13591359
codegen::text_writer::JsWriter,
13601360
parser::{lexer::Lexer, Parser, StringInput},
13611361
transforms::base::{fixer::fixer, hygiene::hygiene, resolver},
1362-
visit::VisitWith,
1362+
visit::{VisitMutWith, VisitWith},
13631363
},
13641364
};
13651365

@@ -1382,11 +1382,15 @@ mod tests {
13821382

13831383
let mut parser = Parser::new_from(lexer);
13841384
match parser.parse_program() {
1385-
Ok(program) => swc_core::common::GLOBALS.set(&Globals::new(), || {
1385+
Ok(mut program) => swc_core::common::GLOBALS.set(&Globals::new(), || {
13861386
swc_core::ecma::transforms::base::helpers::HELPERS.set(
13871387
&swc_core::ecma::transforms::base::helpers::Helpers::new(false),
13881388
|| {
13891389
let is_module = program.is_module();
1390+
let unresolved_mark = Mark::fresh(Mark::root());
1391+
let global_mark = Mark::fresh(Mark::root());
1392+
program.mutate(&mut resolver(unresolved_mark, global_mark, false));
1393+
13901394
let module = match program {
13911395
Program::Module(module) => module,
13921396
Program::Script(script) => Module {
@@ -1396,10 +1400,6 @@ mod tests {
13961400
},
13971401
};
13981402

1399-
let unresolved_mark = Mark::fresh(Mark::root());
1400-
let global_mark = Mark::fresh(Mark::root());
1401-
let module = module.fold_with(&mut resolver(unresolved_mark, global_mark, false));
1402-
14031403
let mut collect = Collect::new(
14041404
source_map.clone(),
14051405
unresolved_mark,
@@ -1410,13 +1410,13 @@ mod tests {
14101410
);
14111411
module.visit_with(&mut collect);
14121412

1413-
let (module, res) = {
1413+
let (mut module, res) = {
14141414
let mut hoist = Hoist::new("abc", unresolved_mark, &collect);
14151415
let module = module.fold_with(&mut hoist);
14161416
(module, hoist.get_result())
14171417
};
14181418

1419-
let module = module.fold_with(&mut chain!(hygiene(), fixer(Some(&comments))));
1419+
module.visit_mut_with(&mut (hygiene(), fixer(Some(&comments))));
14201420

14211421
let code = emit(source_map, comments, &module);
14221422
(collect, code, res)

‎packages/transformers/js/core/src/lib.rs

+88-96
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use path_slash::PathExt;
3535
use serde::{Deserialize, Serialize};
3636
use swc_core::{
3737
common::{
38-
chain, comments::SingleThreadedComments, errors::Handler, pass::Optional,
38+
comments::SingleThreadedComments, errors::Handler, pass::Optional,
3939
source_map::SourceMapGenConfig, sync::Lrc, FileName, Globals, Mark, SourceMap,
4040
},
4141
ecma::{
@@ -45,17 +45,18 @@ use swc_core::{
4545
preset_env::{preset_env, Mode::Entry, Targets, Version, Versions},
4646
transforms::{
4747
base::{
48+
assumptions::Assumptions,
4849
fixer::{fixer, paren_remover},
4950
helpers,
5051
hygiene::hygiene,
51-
resolver, Assumptions,
52+
resolver,
5253
},
5354
compat::reserved_words::reserved_words,
5455
optimization::simplify::{dead_branch_remover, expr_simplifier},
5556
proposal::decorators,
5657
react, typescript,
5758
},
58-
visit::{as_folder, FoldWith, VisitWith},
59+
visit::{FoldWith, VisitMutWith, VisitWith},
5960
},
6061
};
6162
use typeof_replacer::*;
@@ -231,7 +232,7 @@ pub fn transform(
231232

232233
let global_mark = Mark::fresh(Mark::root());
233234
let unresolved_mark = Mark::fresh(Mark::root());
234-
let module = module.fold_with(&mut chain!(
235+
module.mutate(&mut (
235236
resolver(unresolved_mark, global_mark, config.is_type_script),
236237
// Decorators can use type information, so must run before the TypeScript pass.
237238
Optional::new(
@@ -242,7 +243,7 @@ pub fn transform(
242243
// use_define_for_class_fields is ignored here, uses preset-env assumptions instead
243244
..Default::default()
244245
}),
245-
config.decorators
246+
config.decorators,
246247
),
247248
Optional::new(
248249
typescript::tsx(
@@ -256,11 +257,11 @@ pub fn transform(
256257
unresolved_mark,
257258
global_mark,
258259
),
259-
config.is_type_script && config.is_jsx
260+
config.is_type_script && config.is_jsx,
260261
),
261262
Optional::new(
262263
typescript::strip(unresolved_mark, global_mark),
263-
config.is_type_script && !config.is_jsx
264+
config.is_type_script && !config.is_jsx,
264265
),
265266
));
266267

@@ -276,7 +277,8 @@ pub fn transform(
276277
},
277278
};
278279

279-
let mut module = module.fold_with(&mut Optional::new(
280+
let mut program = Program::Module(module);
281+
program.mutate(&mut Optional::new(
280282
react::react(
281283
source_map.clone(),
282284
Some(&comments),
@@ -286,6 +288,7 @@ pub fn transform(
286288
),
287289
config.is_jsx,
288290
));
291+
let mut module = program.expect_module();
289292

290293
let mut preset_env_config = swc_core::ecma::preset_env::Config {
291294
dynamic_import: true,
@@ -326,111 +329,104 @@ pub fn transform(
326329
result.is_constant_module = constant_module.is_constant_module;
327330
}
328331

329-
let module = {
330-
let mut passes = chain!(
331-
Optional::new(
332-
as_folder(TypeofReplacer::new(unresolved_mark)),
333-
config.source_type != SourceType::Script,
334-
),
335-
// Inline process.env and process.browser,
336-
Optional::new(
337-
as_folder(EnvReplacer {
338-
replace_env: config.replace_env,
339-
env: &config.env,
340-
is_browser: config.is_browser,
341-
used_env: &mut result.used_env,
342-
source_map: source_map.clone(),
343-
diagnostics: &mut diagnostics,
344-
unresolved_mark
345-
}),
346-
config.source_type != SourceType::Script
347-
),
348-
paren_remover(Some(&comments)),
349-
// Simplify expressions and remove dead branches so that we
350-
// don't include dependencies inside conditionals that are always false.
351-
expr_simplifier(unresolved_mark, Default::default()),
352-
dead_branch_remover(unresolved_mark),
353-
// Inline Node fs.readFileSync calls
354-
Optional::new(
355-
inline_fs(
356-
config.filename.as_str(),
357-
source_map.clone(),
358-
unresolved_mark,
359-
global_mark,
360-
&config.project_root,
361-
&mut fs_deps,
362-
is_module
363-
),
364-
should_inline_fs
365-
),
366-
);
332+
module.visit_mut_with(&mut (
333+
Optional::new(
334+
TypeofReplacer::new(unresolved_mark),
335+
config.source_type != SourceType::Script,
336+
),
337+
// Inline process.env and process.browser,
338+
Optional::new(
339+
EnvReplacer {
340+
replace_env: config.replace_env,
341+
env: &config.env,
342+
is_browser: config.is_browser,
343+
used_env: &mut result.used_env,
344+
source_map: source_map.clone(),
345+
diagnostics: &mut diagnostics,
346+
unresolved_mark,
347+
},
348+
config.source_type != SourceType::Script,
349+
),
350+
paren_remover(Some(&comments)),
351+
// Simplify expressions and remove dead branches so that we
352+
// don't include dependencies inside conditionals that are always false.
353+
expr_simplifier(unresolved_mark, Default::default()),
354+
dead_branch_remover(unresolved_mark),
355+
));
367356

368-
module.fold_with(&mut passes)
369-
};
357+
let mut module = module.fold_with(&mut Optional::new(
358+
inline_fs(
359+
config.filename.as_str(),
360+
source_map.clone(),
361+
unresolved_mark,
362+
global_mark,
363+
&config.project_root,
364+
&mut fs_deps,
365+
is_module,
366+
),
367+
should_inline_fs,
368+
));
370369

371-
let module = module.fold_with(
370+
module.visit_mut_with(
372371
// Replace __dirname and __filename with placeholders in Node env
373372
&mut Optional::new(
374-
as_folder(NodeReplacer {
373+
NodeReplacer {
375374
source_map: source_map.clone(),
376375
items: &mut global_deps,
377376
global_mark,
378377
globals: HashMap::new(),
379378
filename: Path::new(&config.filename),
380379
unresolved_mark,
381380
has_node_replacements: &mut result.has_node_replacements,
382-
}),
381+
},
383382
config.node_replacer,
384383
),
385384
);
386385

387-
let module = {
388-
let mut passes = chain!(
389-
// Insert dependencies for node globals
390-
Optional::new(
391-
as_folder(GlobalReplacer {
392-
source_map: source_map.clone(),
393-
items: &mut global_deps,
394-
global_mark,
395-
globals: IndexMap::new(),
396-
project_root: Path::new(&config.project_root),
397-
filename: Path::new(&config.filename),
398-
unresolved_mark,
399-
scope_hoist: config.scope_hoist
400-
}),
401-
config.insert_node_globals
402-
),
403-
// Transpile new syntax to older syntax if needed
404-
Optional::new(
405-
preset_env(
406-
unresolved_mark,
407-
Some(&comments),
408-
preset_env_config,
409-
assumptions,
410-
&mut Default::default(),
411-
),
412-
should_run_preset_env,
413-
),
414-
// Inject SWC helpers if needed.
415-
helpers::inject_helpers(global_mark),
416-
);
386+
module.visit_mut_with(
387+
// Insert dependencies for node globals
388+
&mut Optional::new(
389+
GlobalReplacer {
390+
source_map: source_map.clone(),
391+
items: &mut global_deps,
392+
global_mark,
393+
globals: IndexMap::new(),
394+
project_root: Path::new(&config.project_root),
395+
filename: Path::new(&config.filename),
396+
unresolved_mark,
397+
scope_hoist: config.scope_hoist,
398+
},
399+
config.insert_node_globals,
400+
),
401+
);
417402

418-
module.fold_with(&mut passes)
419-
};
403+
let mut program = Program::Module(module);
404+
program.mutate(&mut (
405+
// Transpile new syntax to older syntax if needed
406+
Optional::new(
407+
preset_env(
408+
unresolved_mark,
409+
Some(&comments),
410+
preset_env_config,
411+
assumptions,
412+
&mut Default::default(),
413+
),
414+
should_run_preset_env,
415+
),
416+
// Inject SWC helpers if needed.
417+
helpers::inject_helpers(global_mark),
418+
));
419+
let mut module = program.expect_module();
420420

421421
// Flush Id=(JsWord, SyntaxContexts) into unique names and reresolve to
422422
// set global_mark for all nodes, even generated ones.
423423
// - This will also remove any other other marks (like ignore_mark)
424424
// This only needs to be done if preset_env ran because all other transforms
425425
// insert declarations with global_mark (even though they are generated).
426-
let module = if config.scope_hoist && should_run_preset_env {
427-
module.fold_with(&mut chain!(
428-
hygiene(),
429-
resolver(unresolved_mark, global_mark, false)
430-
))
431-
} else {
426+
if config.scope_hoist && should_run_preset_env {
432427
module
433-
};
428+
.visit_mut_with(&mut (hygiene(), resolver(unresolved_mark, global_mark, false)))
429+
}
434430

435431
let ignore_mark = Mark::fresh(Mark::root());
436432
let module = module.fold_with(
@@ -468,7 +464,7 @@ pub fn transform(
468464
diagnostics.extend(bailouts.iter().map(|bailout| bailout.to_diagnostic()));
469465
}
470466

471-
let module = if config.scope_hoist {
467+
let mut module = if config.scope_hoist {
472468
let res = hoist(module, config.module_id.as_str(), unresolved_mark, &collect);
473469
match res {
474470
Ok((module, hoist_result, hoist_diagnostics)) => {
@@ -492,11 +488,7 @@ pub fn transform(
492488
module
493489
};
494490

495-
let module = module.fold_with(&mut chain!(
496-
reserved_words(),
497-
hygiene(),
498-
fixer(Some(&comments)),
499-
));
491+
module.visit_mut_with(&mut (reserved_words(), hygiene(), fixer(Some(&comments))));
500492

501493
result.dependencies.extend(global_deps);
502494
result.dependencies.extend(fs_deps);

‎packages/transformers/js/core/src/node_replacer.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ impl<'a> VisitMut for NodeReplacer<'a> {
193193
0..0,
194194
self
195195
.globals
196-
.values()
197-
.map(|(_, stmt)| ast::ModuleItem::Stmt(stmt.clone())),
196+
.drain()
197+
.map(|(_, (_, stmt))| ast::ModuleItem::Stmt(stmt)),
198198
);
199199
}
200200
}

‎packages/transformers/js/core/src/test_utils.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,12 @@ fn run_with_transformation<R>(
8787
);
8888

8989
let mut parser = Parser::new_from(lexer);
90-
let module = parser.parse_module().unwrap();
90+
let mut module = parser.parse_module().unwrap();
9191

9292
GLOBALS.set(&Globals::new(), || {
9393
let global_mark = Mark::new();
9494
let unresolved_mark = Mark::new();
95-
let mut module = module.fold_with(&mut resolver(unresolved_mark, global_mark, false));
95+
module.visit_mut_with(&mut resolver(unresolved_mark, global_mark, false));
9696

9797
let context = RunTestContext {
9898
source_map: source_map.clone(),

0 commit comments

Comments
 (0)
Please sign in to comment.