luaur_analysis/functions/
trace_requires.rs1use crate::records::file_resolver::FileResolver;
2use crate::records::require_trace_result::RequireTraceResult;
3use crate::records::type_check_limits::TypeCheckLimits;
4use crate::type_aliases::module_name_file_resolver::ModuleName;
5use luaur_ast::records::ast_stat_block::AstStatBlock;
6use luaur_ast::visit::AstVisitable;
7
8use crate::records::require_tracer::RequireTracer;
9
10pub fn trace_requires(
11 file_resolver: *mut FileResolver,
12 root: *mut AstStatBlock,
13 current_module_name: ModuleName,
14 limits: &TypeCheckLimits,
15) -> RequireTraceResult {
16 let mut result = RequireTraceResult {
17 exprs: luaur_common::records::dense_hash_map::DenseHashMap::new(core::ptr::null_mut()),
18 require_list: alloc::vec::Vec::new(),
19 };
20
21 let mut tracer = RequireTracer::require_tracer(
22 &mut result as *mut RequireTraceResult,
23 file_resolver,
24 current_module_name,
25 );
26
27 unsafe {
28 if let Some(root_ref) = root.as_mut() {
29 root_ref.visit(&mut tracer);
30 }
31 }
32
33 tracer.process(limits);
34
35 result
36}