use swc_core::plugin::{plugin_transform, proxies::TransformPluginProgramMetadata};
use swc_core::{
common::util::take::Take,
ecma::{
ast::*,
visit::{as_folder, FoldWith, VisitMut, VisitMutWith},
},
};
pub struct TransformVisitor;
impl VisitMut for TransformVisitor {
fn visit_mut_stmt(&mut self, n: &mut Stmt) {
n.visit_mut_children_with(self);
match n {
Stmt::Expr(exprStmt) => match &*exprStmt.expr {
Expr::Call(call) => match &call.callee {
Callee::Expr(callee_expr) => match &**callee_expr {
Expr::Member(member) => {
if let Expr::Ident(ident) = &*member.obj {
if ident.sym.eq("console".into()) {
n.take();
}
}
}
_ => {}
},
_ => {}
},
_ => {}
},
_ => {}
}
}
fn visit_mut_stmts(&mut self, stmts: &mut Vec<Stmt>) {
stmts.visit_mut_children_with(self);
stmts.retain(|s| !matches!(s, Stmt::Empty(..)));
}
}
#[plugin_transform]
pub fn process_transform(program: Program, _metadata: TransformPluginProgramMetadata) -> Program {
program.fold_with(&mut as_folder(TransformVisitor))
}