luaur_analysis/methods/
frontend_record_item_result.rs1use 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}