Skip to main content

luaur_analysis/records/
usage_finder.rs

1use crate::records::data_flow_graph::DataFlowGraph;
2use crate::records::def::Def;
3use crate::records::symbol::Symbol;
4use crate::type_aliases::name_type::Name;
5use alloc::vec::Vec;
6use luaur_ast::records::ast_local::AstLocal;
7use luaur_ast::records::ast_name::AstName;
8use luaur_ast::records::ast_visitor::AstVisitor;
9use luaur_common::records::dense_hash_set::DenseHashSet;
10
11#[derive(Debug, Clone)]
12pub struct UsageFinder {
13    pub dfg: *mut DataFlowGraph,
14    pub declared_aliases: DenseHashSet<Name>,
15    pub local_bindings_referenced: Vec<(*const Def, *mut AstLocal)>,
16    pub mentioned_defs: DenseHashSet<*const Def>,
17    pub referenced_bindings: Vec<Name>,
18    pub referenced_imported_bindings: Vec<(Name, Name)>,
19    pub global_defs_to_pre_populate: Vec<(AstName, *const Def)>,
20    pub global_functions_referenced: Vec<AstName>,
21    pub symbols_to_refine: Vec<(*const Def, Symbol)>,
22}
23
24impl AstVisitor for UsageFinder {
25    fn visit_expr_constant_string(&mut self, node: *mut core::ffi::c_void) -> bool {
26        self.visit_ast_expr_constant_string(node as *mut _)
27    }
28    fn visit_type(&mut self, node: *mut core::ffi::c_void) -> bool {
29        self.visit_ast_type(node as *mut _)
30    }
31    fn visit_type_pack(&mut self, node: *mut core::ffi::c_void) -> bool {
32        self.visit_ast_type_pack(node as *mut _)
33    }
34    fn visit_stat_type_alias(&mut self, node: *mut core::ffi::c_void) -> bool {
35        self.visit_ast_stat_type_alias(node as *mut _)
36    }
37    fn visit_type_reference(&mut self, node: *mut core::ffi::c_void) -> bool {
38        self.visit_ast_type_reference(node as *mut _)
39    }
40    fn visit_expr(&mut self, node: *mut core::ffi::c_void) -> bool {
41        self.visit_ast_expr(node as *mut _)
42    }
43    fn visit_expr_global(&mut self, node: *mut core::ffi::c_void) -> bool {
44        self.visit_ast_expr_global(node as *mut _)
45    }
46    fn visit_stat_function(&mut self, node: *mut core::ffi::c_void) -> bool {
47        self.visit_ast_stat_function(node as *mut _)
48    }
49}