swc_ecma_utils/
var.rs

1use swc_ecma_ast::*;
2use swc_ecma_visit::{noop_visit_type, Visit, VisitWith};
3
4use crate::ident::IdentLike;
5
6/// This collects variables bindings while ignoring if it's nested in
7/// expression.
8pub struct VarCollector<'a, I: IdentLike> {
9    pub to: &'a mut Vec<I>,
10}
11
12impl<I: IdentLike> Visit for VarCollector<'_, I> {
13    noop_visit_type!(fail);
14
15    fn visit_arrow_expr(&mut self, _: &ArrowExpr) {}
16
17    fn visit_constructor(&mut self, _: &Constructor) {}
18
19    fn visit_expr(&mut self, _: &Expr) {}
20
21    fn visit_function(&mut self, _: &Function) {}
22
23    fn visit_key_value_pat_prop(&mut self, node: &KeyValuePatProp) {
24        node.value.visit_with(self);
25    }
26
27    fn visit_ident(&mut self, i: &Ident) {
28        self.to.push(I::from_ident(i))
29    }
30
31    fn visit_var_declarator(&mut self, node: &VarDeclarator) {
32        node.name.visit_with(self);
33    }
34}