Skip to content

Commit c1b0ed3

Browse files
committed
feat(transformer): transform explicit resource management
1 parent 4ca62ab commit c1b0ed3

File tree

15 files changed

+943
-61
lines changed

15 files changed

+943
-61
lines changed

crates/oxc_transformer/examples/transformer.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ fn main() {
4545
let ret = SemanticBuilder::new()
4646
// Estimate transformer will triple scopes, symbols, references
4747
.with_excess_capacity(2.0)
48+
.with_scope_tree_child_ids(true)
4849
.build(&program);
4950

5051
if !ret.errors.is_empty() {

crates/oxc_transformer/src/common/helper_loader.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ pub enum Helper {
167167
Decorate,
168168
DecorateParam,
169169
DecorateMetadata,
170+
UsingCtx,
170171
}
171172

172173
impl Helper {
@@ -199,6 +200,7 @@ impl Helper {
199200
Self::Decorate => "decorate",
200201
Self::DecorateParam => "decorateParam",
201202
Self::DecorateMetadata => "decorateMetadata",
203+
Self::UsingCtx => "usingCtx",
202204
}
203205
}
204206

crates/oxc_transformer/src/lib.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ mod es2020;
3131
mod es2021;
3232
mod es2022;
3333
mod jsx;
34+
mod proposals;
3435
mod regexp;
3536
mod typescript;
3637

@@ -49,6 +50,7 @@ use es2020::ES2020;
4950
use es2021::ES2021;
5051
use es2022::ES2022;
5152
use jsx::Jsx;
53+
use proposals::explicit_resource_management::ExplicitResourceManagement;
5254
use regexp::RegExp;
5355
use rustc_hash::FxHashMap;
5456
use typescript::TypeScript;
@@ -122,6 +124,7 @@ impl<'a> Transformer<'a> {
122124
let mut transformer = TransformerImpl {
123125
common: Common::new(&self.env, &self.ctx),
124126
decorator: Decorator::new(self.decorator, &self.ctx),
127+
explicit_resource_management: ExplicitResourceManagement::new(&self.ctx),
125128
x0_typescript: program
126129
.source_type
127130
.is_typescript()
@@ -149,6 +152,7 @@ struct TransformerImpl<'a, 'ctx> {
149152
// NOTE: all callbacks must run in order.
150153
x0_typescript: Option<TypeScript<'a, 'ctx>>,
151154
decorator: Decorator<'a, 'ctx>,
155+
explicit_resource_management: ExplicitResourceManagement<'a, 'ctx>,
152156
x1_jsx: Jsx<'a, 'ctx>,
153157
x2_es2022: ES2022<'a, 'ctx>,
154158
x2_es2021: ES2021<'a, 'ctx>,
@@ -169,6 +173,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
169173
typescript.enter_program(program, ctx);
170174
}
171175
self.x1_jsx.enter_program(program, ctx);
176+
self.explicit_resource_management.enter_program(program, ctx);
172177
}
173178

174179
fn exit_program(&mut self, program: &mut Program<'a>, ctx: &mut TraverseCtx<'a>) {
@@ -211,6 +216,10 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
211216
}
212217
}
213218

219+
fn enter_block_statement(&mut self, node: &mut BlockStatement<'a>, ctx: &mut TraverseCtx<'a>) {
220+
self.explicit_resource_management.enter_block_statement(node, ctx);
221+
}
222+
214223
fn enter_big_int_literal(&mut self, node: &mut BigIntLiteral<'a>, ctx: &mut TraverseCtx<'a>) {
215224
self.x2_es2020.enter_big_int_literal(node, ctx);
216225
}
@@ -271,6 +280,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
271280
fn enter_static_block(&mut self, block: &mut StaticBlock<'a>, ctx: &mut TraverseCtx<'a>) {
272281
self.common.enter_static_block(block, ctx);
273282
self.x2_es2022.enter_static_block(block, ctx);
283+
self.explicit_resource_management.enter_static_block(block, ctx);
274284
}
275285

276286
fn exit_static_block(&mut self, block: &mut StaticBlock<'a>, ctx: &mut TraverseCtx<'a>) {
@@ -374,6 +384,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
374384

375385
fn enter_function_body(&mut self, body: &mut FunctionBody<'a>, ctx: &mut TraverseCtx<'a>) {
376386
self.common.enter_function_body(body, ctx);
387+
self.explicit_resource_management.enter_function_body(body, ctx);
377388
}
378389

379390
fn exit_function_body(&mut self, body: &mut FunctionBody<'a>, ctx: &mut TraverseCtx<'a>) {
@@ -482,6 +493,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
482493
if let Some(typescript) = self.x0_typescript.as_mut() {
483494
typescript.enter_statements(stmts, ctx);
484495
}
496+
self.explicit_resource_management.enter_statements(stmts, ctx);
485497
}
486498

487499
fn exit_arrow_function_expression(
@@ -538,6 +550,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
538550
typescript.exit_statement(stmt, ctx);
539551
}
540552
self.decorator.enter_statement(stmt, ctx);
553+
self.explicit_resource_management.enter_statement(stmt, ctx);
541554
self.x2_es2018.exit_statement(stmt, ctx);
542555
self.x2_es2017.exit_statement(stmt, ctx);
543556
}
@@ -557,6 +570,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
557570
typescript.enter_statement(stmt, ctx);
558571
}
559572
self.x2_es2018.enter_statement(stmt, ctx);
573+
self.explicit_resource_management.enter_statement(stmt, ctx);
560574
}
561575

562576
fn enter_declaration(&mut self, decl: &mut Declaration<'a>, ctx: &mut TraverseCtx<'a>) {
@@ -597,6 +611,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
597611
if let Some(typescript) = self.x0_typescript.as_mut() {
598612
typescript.enter_for_of_statement(stmt, ctx);
599613
}
614+
self.explicit_resource_management.enter_for_of_statement(stmt, ctx);
600615
self.x2_es2018.enter_for_of_statement(stmt, ctx);
601616
}
602617

0 commit comments

Comments
 (0)