Skip to main content

luaur_analysis/methods/
usage_finder_visit_fragment_autocomplete_alt_f.rs

1use 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}