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}