Skip to content

Commit 0d94534

Browse files
committed
feat(transformer/async-to-generator): handle this within arrows function
1 parent 1674cf5 commit 0d94534

File tree

8 files changed

+490
-368
lines changed

8 files changed

+490
-368
lines changed

crates/oxc_transformer/src/common/arrow_function_to_expression.rs

Lines changed: 400 additions & 0 deletions
Large diffs are not rendered by default.

crates/oxc_transformer/src/common/mod.rs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ use oxc_traverse::{Traverse, TraverseCtx};
66

77
use crate::TransformCtx;
88

9+
pub mod arrow_function_to_expression;
910
pub mod helper_loader;
1011
pub mod module_imports;
1112
pub mod statement_injector;
1213
pub mod top_level_statements;
1314
pub mod var_declarations;
1415

16+
use arrow_function_to_expression::ArrowFunctionToExpression;
1517
use module_imports::ModuleImports;
1618
use statement_injector::StatementInjector;
1719
use top_level_statements::TopLevelStatements;
@@ -22,6 +24,7 @@ pub struct Common<'a, 'ctx> {
2224
var_declarations: VarDeclarations<'a, 'ctx>,
2325
statement_injector: StatementInjector<'a, 'ctx>,
2426
top_level_statements: TopLevelStatements<'a, 'ctx>,
27+
arrow_function_to_expression: ArrowFunctionToExpression<'a, 'ctx>,
2528
}
2629

2730
impl<'a, 'ctx> Common<'a, 'ctx> {
@@ -31,13 +34,15 @@ impl<'a, 'ctx> Common<'a, 'ctx> {
3134
var_declarations: VarDeclarations::new(ctx),
3235
statement_injector: StatementInjector::new(ctx),
3336
top_level_statements: TopLevelStatements::new(ctx),
37+
arrow_function_to_expression: ArrowFunctionToExpression::new(ctx),
3438
}
3539
}
3640
}
3741

3842
impl<'a, 'ctx> Traverse<'a> for Common<'a, 'ctx> {
3943
fn exit_program(&mut self, program: &mut Program<'a>, ctx: &mut TraverseCtx<'a>) {
4044
self.module_imports.exit_program(program, ctx);
45+
self.arrow_function_to_expression.exit_program(program, ctx);
4146
self.var_declarations.exit_program(program, ctx);
4247
self.top_level_statements.exit_program(program, ctx);
4348
}
@@ -58,4 +63,52 @@ impl<'a, 'ctx> Traverse<'a> for Common<'a, 'ctx> {
5863
self.var_declarations.exit_statements(stmts, ctx);
5964
self.statement_injector.exit_statements(stmts, ctx);
6065
}
66+
67+
fn enter_function(&mut self, func: &mut Function<'a>, ctx: &mut TraverseCtx<'a>) {
68+
self.arrow_function_to_expression.enter_function(func, ctx);
69+
}
70+
71+
fn exit_function(&mut self, func: &mut Function<'a>, ctx: &mut TraverseCtx<'a>) {
72+
self.arrow_function_to_expression.exit_function(func, ctx);
73+
}
74+
75+
fn exit_method_definition(
76+
&mut self,
77+
node: &mut MethodDefinition<'a>,
78+
ctx: &mut TraverseCtx<'a>,
79+
) {
80+
self.arrow_function_to_expression.exit_method_definition(node, ctx);
81+
}
82+
83+
fn enter_static_block(&mut self, block: &mut StaticBlock<'a>, ctx: &mut TraverseCtx<'a>) {
84+
self.arrow_function_to_expression.enter_static_block(block, ctx);
85+
}
86+
87+
fn exit_static_block(&mut self, block: &mut StaticBlock<'a>, ctx: &mut TraverseCtx<'a>) {
88+
self.arrow_function_to_expression.exit_static_block(block, ctx);
89+
}
90+
91+
fn enter_jsx_element_name(
92+
&mut self,
93+
element_name: &mut JSXElementName<'a>,
94+
ctx: &mut TraverseCtx<'a>,
95+
) {
96+
self.arrow_function_to_expression.enter_jsx_element_name(element_name, ctx);
97+
}
98+
99+
fn enter_jsx_member_expression_object(
100+
&mut self,
101+
object: &mut JSXMemberExpressionObject<'a>,
102+
ctx: &mut TraverseCtx<'a>,
103+
) {
104+
self.arrow_function_to_expression.enter_jsx_member_expression_object(object, ctx);
105+
}
106+
107+
fn enter_expression(&mut self, expr: &mut Expression<'a>, ctx: &mut TraverseCtx<'a>) {
108+
self.arrow_function_to_expression.enter_expression(expr, ctx);
109+
}
110+
111+
fn exit_expression(&mut self, expr: &mut Expression<'a>, ctx: &mut TraverseCtx<'a>) {
112+
self.arrow_function_to_expression.exit_expression(expr, ctx);
113+
}
61114
}

crates/oxc_transformer/src/context.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use oxc_span::SourceType;
99

1010
use crate::{
1111
common::{
12+
arrow_function_to_expression::ArrowFunctionToExpressionStore,
1213
helper_loader::HelperLoaderStore, module_imports::ModuleImportsStore,
1314
statement_injector::StatementInjectorStore, top_level_statements::TopLevelStatementsStore,
1415
var_declarations::VarDeclarationsStore,
@@ -40,6 +41,8 @@ pub struct TransformCtx<'a> {
4041
pub statement_injector: StatementInjectorStore<'a>,
4142
/// Manage inserting statements at top of program globally
4243
pub top_level_statements: TopLevelStatementsStore<'a>,
44+
/// Manage converting arrow functions to expressions
45+
pub arrow_function_to_expression: ArrowFunctionToExpressionStore,
4346
}
4447

4548
impl<'a> TransformCtx<'a> {
@@ -63,6 +66,7 @@ impl<'a> TransformCtx<'a> {
6366
var_declarations: VarDeclarationsStore::new(),
6467
statement_injector: StatementInjectorStore::new(),
6568
top_level_statements: TopLevelStatementsStore::new(),
69+
arrow_function_to_expression: ArrowFunctionToExpressionStore::new(),
6670
}
6771
}
6872

0 commit comments

Comments
 (0)