1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
use swc_atoms::JsWord; use swc_common::{SyntaxContext, Visit, VisitWith}; use swc_ecma_ast::*; pub struct VarCollector<'a> { pub to: &'a mut Vec<(JsWord, SyntaxContext)>, } impl<'a> Visit<VarDeclarator> for VarCollector<'a> { fn visit(&mut self, node: &VarDeclarator) { node.name.visit_with(self); } } impl<'a> Visit<Ident> for VarCollector<'a> { fn visit(&mut self, i: &Ident) { self.to.push((i.sym.clone(), i.span.ctxt())) } } macro_rules! var_noop { ($T:path) => { impl<'a> Visit<$T> for VarCollector<'a> { fn visit(&mut self, _: &$T) {} } }; ($T:path, $($rest:tt)*) => { var_noop!($T); var_noop!($($rest)*); }; } var_noop!(Expr, ArrowExpr, Function, Constructor); var_noop!(TsType, TsTypeAnn, TsTypeParam);