symbol_js/
lib.rs

1use parse_js::ast::Node;
2use parse_js::visit::VisitorMut;
3use symbol::Scope;
4use symbol::ScopeType;
5use symbol::SymbolGenerator;
6use visitor::DeclVisitor;
7
8pub mod symbol;
9pub mod visitor;
10
11#[derive(Clone, Copy, PartialEq, Eq, Debug)]
12pub enum TopLevelMode {
13  Global,
14  Module,
15}
16
17pub fn compute_symbols(top_level_node: &mut Node, top_level_mode: TopLevelMode) -> Scope {
18  let top_level_scope = Scope::new(SymbolGenerator::new(), None, match top_level_mode {
19    TopLevelMode::Global => ScopeType::Global,
20    TopLevelMode::Module => ScopeType::Module,
21  });
22  let mut visitor = DeclVisitor::new(top_level_scope.clone());
23  visitor.visit(top_level_node);
24  top_level_scope
25}