luaur_analysis/records/
usage_finder.rs1use 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}