Skip to main content

luaur_analysis/methods/
frontend_record_item_result.rs

1use crate::records::build_queue_item::BuildQueueItem;
2use crate::records::frontend::Frontend;
3use crate::records::source_node::SourceNode;
4use alloc::sync::Arc;
5use luaur_common::macros::luau_timetrace_argument::LUAU_TIMETRACE_ARGUMENT;
6use luaur_common::macros::luau_timetrace_scope::LUAU_TIMETRACE_SCOPE;
7
8impl Frontend {
9    pub fn record_item_result(&mut self, item: &BuildQueueItem) {
10        let for_autocomplete = item.options.for_autocomplete;
11        let source_node = Arc::as_ptr(&item.source_node) as *mut SourceNode;
12
13        let replaced = if for_autocomplete {
14            let replaced = self
15                .module_resolver_for_autocomplete
16                .set_module(&item.name, item.module.clone());
17            unsafe {
18                (*source_node).dirty_module_for_autocomplete = false;
19            }
20            replaced
21        } else {
22            let replaced = self
23                .module_resolver
24                .set_module(&item.name, item.module.clone());
25            unsafe {
26                (*source_node).dirty_module = false;
27            }
28            replaced
29        };
30
31        if replaced {
32            LUAU_TIMETRACE_SCOPE!("Frontend::invalidateDependentModules", "Frontend");
33            LUAU_TIMETRACE_ARGUMENT!("name", item.name.as_str());
34            self.traverse_dependents(
35                &item.name,
36                Box::new(move |source_node: &mut SourceNode| {
37                    let traverse_subtree =
38                        !source_node.has_invalid_module_dependency(for_autocomplete);
39                    source_node.set_invalid_module_dependency(true, for_autocomplete);
40                    traverse_subtree
41                }),
42            );
43        }
44
45        unsafe {
46            (*source_node).set_invalid_module_dependency(false, for_autocomplete);
47        }
48
49        self.stats.time_check += item.stats.time_check;
50        self.stats.time_lint += item.stats.time_lint;
51        self.stats.files_strict += item.stats.files_strict;
52        self.stats.files_nonstrict += item.stats.files_nonstrict;
53        self.stats.types_allocated += item.stats.types_allocated;
54        self.stats.type_packs_allocated += item.stats.type_packs_allocated;
55        self.stats.bool_singletons_minted += item.stats.bool_singletons_minted;
56        self.stats.str_singletons_minted += item.stats.str_singletons_minted;
57        self.stats.unique_str_singletons_minted += item.stats.unique_str_singletons_minted;
58        self.stats.dynamic_constraints_created += item.stats.dynamic_constraints_created;
59    }
60}