luaur_analysis/methods/
usage_finder_visit_fragment_autocomplete_alt_f.rs1use crate::records::def::Def;
2use crate::records::symbol::Symbol;
3use crate::records::usage_finder::UsageFinder;
4use luaur_ast::records::ast_expr::AstExpr;
5use luaur_ast::records::ast_expr_local::AstExprLocal;
6use luaur_ast::records::ast_node::AstNode;
7use luaur_ast::rtti::ast_node_as;
8
9impl UsageFinder {
10 pub fn visit_ast_expr(&mut self, expr: *mut AstExpr) -> bool {
11 let dfg = unsafe { &*self.dfg };
12
13 if let Some(opt) = dfg.get_def_optional(expr) {
14 self.mentioned_defs.insert(opt);
15 }
16
17 let ref_ = dfg.get_refinement_key(expr);
18 if !ref_.is_null() {
19 self.mentioned_defs
20 .insert(unsafe { (*ref_).def() } as *const Def);
21 }
22
23 let local = unsafe { ast_node_as::<AstExprLocal>(expr as *mut AstNode) };
24 if !local.is_null() {
25 let def = dfg.get_def(local as *const AstExpr);
26 let ast_local = unsafe { (*local).local };
27 self.local_bindings_referenced.push((def, ast_local));
28 self.symbols_to_refine
29 .push((def, Symbol::from_local(ast_local)));
30 }
31
32 true
33 }
34}