luaur_analysis/methods/
require_tracer_get_dependent.rs1use crate::records::require_tracer::RequireTracer;
2use luaur_ast::records::ast_expr_call::AstExprCall;
3use luaur_ast::records::ast_expr_group::AstExprGroup;
4use luaur_ast::records::ast_expr_index_expr::AstExprIndexExpr;
5use luaur_ast::records::ast_expr_index_name::AstExprIndexName;
6use luaur_ast::records::ast_expr_local::AstExprLocal;
7use luaur_ast::records::ast_expr_type_assertion::AstExprTypeAssertion;
8use luaur_ast::records::ast_node::AstNode;
9use luaur_ast::records::ast_type_group::AstTypeGroup;
10use luaur_ast::records::ast_type_typeof::AstTypeTypeof;
11use luaur_common::records::dense_hash_map::DenseHashMap;
12
13impl RequireTracer {
14 pub fn get_dependent(&self, node: *mut AstNode) -> *mut AstNode {
15 unsafe {
16 if (*node).is::<AstExprLocal>() {
17 let expr = node as *mut AstExprLocal;
18 let local = (*expr).local;
19 match self.locals.find(&local) {
20 Some(&val) => return val as *mut AstNode,
21 None => return core::ptr::null_mut(),
22 }
23 } else if (*node).is::<AstExprIndexName>() {
24 let expr = node as *mut AstExprIndexName;
25 return (*expr).expr as *mut AstNode;
26 } else if (*node).is::<AstExprIndexExpr>() {
27 let expr = node as *mut AstExprIndexExpr;
28 return (*expr).expr as *mut AstNode;
29 } else if (*node).is::<AstExprCall>() {
30 let expr = node as *mut AstExprCall;
31 if (*expr).self_ {
32 let func = (*expr).func as *mut AstExprIndexName;
33 return (*func).expr as *mut AstNode;
34 }
35 } else if (*node).is::<AstExprGroup>() {
36 let expr = node as *mut AstExprGroup;
37 return (*expr).expr as *mut AstNode;
38 } else if (*node).is::<AstExprTypeAssertion>() {
39 let expr = node as *mut AstExprTypeAssertion;
40 return (*expr).annotation as *mut AstNode;
41 } else if (*node).is::<AstTypeGroup>() {
42 let expr = node as *mut AstTypeGroup;
43 return (*expr).type_ as *mut AstNode;
44 } else if (*node).is::<AstTypeTypeof>() {
45 let expr = node as *mut AstTypeTypeof;
46 return (*expr).expr as *mut AstNode;
47 }
48 }
49 core::ptr::null_mut()
50 }
51}