use oxc::{
ast::ast::Program,
semantic::{Scoping, Semantic, SemanticBuilder},
};
use crate::EcmaAst;
pub fn semantic_builder_for_transform<'a>() -> SemanticBuilder<'a> {
SemanticBuilder::new().with_enum_eval(true)
}
impl EcmaAst {
pub fn make_semantic<'ast>(program: &'ast Program<'ast>) -> Semantic<'ast> {
SemanticBuilder::new().build(program).semantic
}
pub fn make_scoping(&self) -> Scoping {
self.program.with_dependent(|_owner, dep| Self::make_semantic(&dep.program).into_scoping())
}
pub fn make_symbol_table_and_scope_tree_with_semantic_builder<'a>(
&'a self,
semantic_builder: SemanticBuilder<'a>,
) -> Scoping {
self.program.with_dependent::<'a, Scoping>(|_owner, dep| {
semantic_builder.build(&dep.program).semantic.into_scoping()
})
}
}