Skip to content

Commit

Permalink
refactor(transformer/nullish-coalescing-operator): move all entry poi…
Browse files Browse the repository at this point in the history
…nts to implementation of Traverse trait
  • Loading branch information
Dunqing committed Aug 19, 2024
1 parent 20e1c63 commit e0c07e1
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 39 deletions.
16 changes: 9 additions & 7 deletions crates/oxc_transformer/src/es2020/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ pub use nullish_coalescing_operator::NullishCoalescingOperator;
pub use options::ES2020Options;
use oxc_allocator::Vec;
use oxc_ast::ast::*;
use oxc_traverse::TraverseCtx;
use oxc_traverse::{Traverse, TraverseCtx};
use std::rc::Rc;

use crate::context::Ctx;
Expand All @@ -27,30 +27,32 @@ impl<'a> ES2020<'a> {
options,
}
}
}

pub fn transform_statements(
impl<'a> Traverse<'a> for ES2020<'a> {
fn enter_statements(
&mut self,
statements: &mut Vec<'a, Statement<'a>>,
ctx: &mut TraverseCtx<'a>,
) {
if self.options.nullish_coalescing_operator {
self.nullish_coalescing_operator.transform_statements(statements, ctx);
self.nullish_coalescing_operator.enter_statements(statements, ctx);
}
}

pub fn transform_statements_on_exit(
fn exit_statements(
&mut self,
statements: &mut Vec<'a, Statement<'a>>,
ctx: &mut TraverseCtx<'a>,
) {
if self.options.nullish_coalescing_operator {
self.nullish_coalescing_operator.transform_statements_on_exit(statements, ctx);
self.nullish_coalescing_operator.exit_statements(statements, ctx);
}
}

pub fn transform_expression(&mut self, expr: &mut Expression<'a>, ctx: &mut TraverseCtx<'a>) {
fn enter_expression(&mut self, expr: &mut Expression<'a>, ctx: &mut TraverseCtx<'a>) {
if self.options.nullish_coalescing_operator {
self.nullish_coalescing_operator.transform_expression(expr, ctx);
self.nullish_coalescing_operator.enter_expression(expr, ctx);
}
}
}
56 changes: 27 additions & 29 deletions crates/oxc_transformer/src/es2020/nullish_coalescing_operator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
use std::cell::Cell;

use oxc_semantic::{ReferenceFlag, SymbolFlags};
use oxc_traverse::TraverseCtx;
use oxc_traverse::{Traverse, TraverseCtx};

use oxc_allocator::{CloneIn, Vec};
use oxc_ast::ast::*;
Expand Down Expand Up @@ -64,33 +64,6 @@ impl<'a> NullishCoalescingOperator<'a> {
}
}

pub fn transform_statements(
&mut self,
_statements: &mut Vec<'a, Statement<'a>>,
ctx: &mut TraverseCtx<'a>,
) {
self.var_declarations.push(ctx.ast.vec());
}

pub fn transform_statements_on_exit(
&mut self,
statements: &mut Vec<'a, Statement<'a>>,
ctx: &mut TraverseCtx<'a>,
) {
if let Some(declarations) = self.var_declarations.pop() {
if declarations.is_empty() {
return;
}
let variable = ctx.ast.alloc_variable_declaration(
SPAN,
VariableDeclarationKind::Var,
declarations,
false,
);
statements.insert(0, Statement::VariableDeclaration(variable));
}
}

fn create_new_var_with_expression(
&mut self,
expr: &Expression<'a>,
Expand Down Expand Up @@ -125,8 +98,33 @@ impl<'a> NullishCoalescingOperator<'a> {

ctx.create_reference_id(SPAN, symbol_name, Some(symbol_id), ReferenceFlag::Read)
}
}

impl<'a> Traverse<'a> for NullishCoalescingOperator<'a> {
fn enter_statements(&mut self, _stmts: &mut Vec<'a, Statement<'a>>, ctx: &mut TraverseCtx<'a>) {
self.var_declarations.push(ctx.ast.vec());
}

fn exit_statements(
&mut self,
statements: &mut Vec<'a, Statement<'a>>,
ctx: &mut TraverseCtx<'a>,
) {
if let Some(declarations) = self.var_declarations.pop() {
if declarations.is_empty() {
return;
}
let variable = ctx.ast.alloc_variable_declaration(
SPAN,
VariableDeclarationKind::Var,
declarations,
false,
);
statements.insert(0, Statement::VariableDeclaration(variable));
}
}

pub fn transform_expression(&mut self, expr: &mut Expression<'a>, ctx: &mut TraverseCtx<'a>) {
fn enter_expression(&mut self, expr: &mut Expression<'a>, ctx: &mut TraverseCtx<'a>) {
// left ?? right
if !matches!(expr, Expression::LogicalExpression(logical_expr) if logical_expr.operator == LogicalOperator::Coalesce)
{
Expand Down
6 changes: 3 additions & 3 deletions crates/oxc_transformer/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ impl<'a> Traverse<'a> for Transformer<'a> {
self.x0_typescript.transform_expression(expr);
self.x1_react.transform_expression(expr, ctx);
self.x2_es2021.transform_expression(expr, ctx);
self.x2_es2020.transform_expression(expr, ctx);
self.x2_es2020.enter_expression(expr, ctx);
self.x2_es2016.transform_expression(expr, ctx);
self.x3_es2015.transform_expression(expr);
}
Expand Down Expand Up @@ -269,7 +269,7 @@ impl<'a> Traverse<'a> for Transformer<'a> {
self.x0_typescript.transform_statements(stmts);
self.x1_react.transform_statements(stmts, ctx);
self.x2_es2021.transform_statements(stmts, ctx);
self.x2_es2020.transform_statements(stmts, ctx);
self.x2_es2020.enter_statements(stmts, ctx);
self.x2_es2016.transform_statements(stmts, ctx);
self.x3_es2015.enter_statements(stmts);
}
Expand All @@ -278,7 +278,7 @@ impl<'a> Traverse<'a> for Transformer<'a> {
self.x0_typescript.transform_statements_on_exit(stmts, ctx);
self.x1_react.transform_statements_on_exit(stmts, ctx);
self.x2_es2021.transform_statements_on_exit(stmts, ctx);
self.x2_es2020.transform_statements_on_exit(stmts, ctx);
self.x2_es2020.exit_statements(stmts, ctx);
self.x2_es2016.transform_statements_on_exit(stmts, ctx);
self.x3_es2015.exit_statements(stmts);
}
Expand Down

0 comments on commit e0c07e1

Please sign in to comment.