Skip to main content

luaur_analysis/functions/
trace_requires.rs

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