Skip to content

Commit 7b642b9

Browse files
authored
update to es transform (#108)
1 parent 8764034 commit 7b642b9

File tree

3 files changed

+56
-42
lines changed

3 files changed

+56
-42
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ swc = "6.0.0"
2727
swc_common = "4.0.1"
2828
swc_ecma_ast = "4.0.1"
2929
swc_ecma_parser = { version = "5.0.0", features = ["typescript"] }
30-
swc_ecma_transforms = "6.0.0"
30+
swc_ecma_transforms = { version = "6.0.0", features = ["compat"] }
3131
swc_ecma_transforms_react = "5.0.0"
3232
swc_ecma_transforms_typescript = "5.0.0"
3333
swc_ecma_visit = "4.0.1"

benches/transformer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ impl TheBencher for OxcBencher {
4949
struct SwcBencher;
5050

5151
impl TheBencher for SwcBencher {
52-
type RunOutput = (swc_ecma_ast::Program, String);
52+
type RunOutput = String;
5353

5454
const ID: &'static str = "swc";
5555

src/lib.rs

Lines changed: 54 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ pub mod oxc {
77
parser::Parser,
88
semantic::SemanticBuilder,
99
span::SourceType,
10-
transformer::{JsxOptions, TransformOptions, Transformer, TypeScriptOptions},
10+
transformer::{TransformOptions, Transformer},
1111
};
1212

1313
pub fn transform(path: &Path, source_text: &str) -> (Allocator, String) {
@@ -16,11 +16,7 @@ pub mod oxc {
1616
let printed = {
1717
let ret = Parser::new(&allocator, source_text, source_type).parse();
1818
let mut program = ret.program;
19-
let transform_options = TransformOptions {
20-
typescript: TypeScriptOptions::default(),
21-
jsx: JsxOptions::default(),
22-
..TransformOptions::default()
23-
};
19+
let transform_options = TransformOptions::from_target("es2015").unwrap();
2420
let (symbols, scopes) = SemanticBuilder::new()
2521
.build(&program)
2622
.semantic
@@ -38,16 +34,19 @@ pub mod oxc {
3834
pub mod swc {
3935
use std::{path::Path, sync::Arc};
4036

41-
use swc::{Compiler, PrintArgs, SwcComments};
42-
use swc_common::{source_map::SourceMap, sync::Lrc, Mark, GLOBALS};
43-
use swc_ecma_ast::Program;
37+
use swc::{try_with_handler, Compiler, PrintArgs, SwcComments};
38+
use swc_common::{errors::HANDLER, source_map::SourceMap, sync::Lrc, Mark, GLOBALS};
4439
use swc_ecma_parser::{EsSyntax, Parser, StringInput, Syntax, TsSyntax};
45-
use swc_ecma_transforms::resolver;
40+
use swc_ecma_transforms::{
41+
compat::{es2016, es2017, es2018, es2019, es2020, es2021, es2022},
42+
helpers::{Helpers, HELPERS},
43+
resolver,
44+
};
4645
use swc_ecma_transforms_react::{react, Options, Runtime};
4746
use swc_ecma_transforms_typescript::strip;
4847
use swc_ecma_visit::VisitMutWith;
4948

50-
pub fn transform(path: &Path, source_text: &str) -> (Program, String) {
49+
pub fn transform(path: &Path, source_text: &str) -> String {
5150
let cm = Lrc::new(SourceMap::new(swc_common::FilePathMapping::empty()));
5251
let compiler = Compiler::new(Arc::clone(&cm));
5352
let comments = SwcComments::default();
@@ -61,40 +60,55 @@ pub mod swc {
6160
};
6261

6362
GLOBALS.set(&Default::default(), || {
64-
let input = StringInput::new(source_text, Default::default(), Default::default());
65-
let mut program = Parser::new(syntax, input, Some(&comments))
66-
.parse_program()
67-
.unwrap();
63+
try_with_handler(cm.clone(), Default::default(), |handler| {
64+
HELPERS.set(&Helpers::new(true), || {
65+
HANDLER.set(handler, || {
66+
let input =
67+
StringInput::new(source_text, Default::default(), Default::default());
68+
let mut program = Parser::new(syntax, input, Some(&comments))
69+
.parse_program()
70+
.unwrap();
6871

69-
let top_level_mark = Mark::new();
70-
let unresolved_mark = Mark::new();
72+
let top_level_mark = Mark::new();
73+
let unresolved_mark = Mark::new();
7174

72-
program.visit_mut_with(&mut resolver(
73-
unresolved_mark,
74-
top_level_mark,
75-
syntax.typescript(),
76-
));
75+
program.visit_mut_with(&mut resolver(
76+
unresolved_mark,
77+
top_level_mark,
78+
syntax.typescript(),
79+
));
7780

78-
let mut ast_pass = (
79-
strip(unresolved_mark, top_level_mark),
80-
react(
81-
Arc::clone(&cm),
82-
Some(comments),
83-
Options {
84-
runtime: Some(Runtime::Automatic),
85-
..Options::default()
86-
},
87-
top_level_mark,
88-
unresolved_mark,
89-
),
90-
);
91-
let program = program.apply(&mut ast_pass);
81+
let mut ast_pass = (
82+
strip(unresolved_mark, top_level_mark),
83+
react(
84+
Arc::clone(&cm),
85+
Some(comments),
86+
Options {
87+
runtime: Some(Runtime::Automatic),
88+
..Options::default()
89+
},
90+
top_level_mark,
91+
unresolved_mark,
92+
),
93+
es2022(Default::default(), unresolved_mark),
94+
es2021(),
95+
es2020(Default::default(), unresolved_mark),
96+
es2019(),
97+
es2018(Default::default()),
98+
es2017(Default::default(), unresolved_mark),
99+
es2016(),
100+
);
101+
let program = program.apply(&mut ast_pass);
92102

93-
let printed = compiler
94-
.print(&program, PrintArgs::default())
95-
.expect("print failed");
103+
let printed = compiler
104+
.print(&program, PrintArgs::default())
105+
.expect("print failed");
96106

97-
(program, printed.code)
107+
Ok(printed.code)
108+
})
109+
})
110+
})
111+
.unwrap()
98112
})
99113
}
100114
}

0 commit comments

Comments
 (0)