use oxc_ast::{NONE, ast::*};
use oxc_semantic::SymbolFlags;
use oxc_span::SPAN;
use oxc_traverse::Traverse;
use crate::{context::TraverseCtx, state::TransformState};
pub struct OptionalCatchBinding;
impl OptionalCatchBinding {
pub fn new() -> Self {
Self
}
}
impl<'a> Traverse<'a, TransformState<'a>> for OptionalCatchBinding {
fn enter_catch_clause(&mut self, clause: &mut CatchClause<'a>, ctx: &mut TraverseCtx<'a>) {
if clause.param.is_some() {
return;
}
let binding = ctx.generate_uid(
"unused",
clause.body.scope_id(),
SymbolFlags::CatchVariable | SymbolFlags::FunctionScopedVariable,
);
let binding_pattern = binding.create_binding_pattern(ctx);
let param = ctx.ast.catch_parameter(SPAN, binding_pattern, NONE);
clause.param = Some(param);
}
}