luaur_analysis/methods/
frontend_parse_modules.rs1use crate::records::frontend::Frontend;
2use crate::records::type_check_limits::TypeCheckLimits;
3use crate::type_aliases::module_name_file_resolver::ModuleName;
4use alloc::vec::Vec;
5use luaur_common::macros::luau_timetrace_scope::LUAU_TIMETRACE_SCOPE;
6use luaur_common::records::dense_hash_set::DenseHashSet;
7
8impl Frontend {
9 pub fn parse_modules(&mut self, names: &Vec<ModuleName>) {
10 LUAU_TIMETRACE_SCOPE!("Frontend::parseModules", "Frontend");
11
12 let mut seen: DenseHashSet<ModuleName> = DenseHashSet::new(ModuleName::default());
13
14 for name in names {
15 if seen.contains(name) {
16 continue;
17 }
18
19 if let Some(node) = self.source_nodes.get(name) {
20 if !node.has_dirty_source_module() {
21 seen.insert(name.clone());
22 continue;
23 }
24 }
25
26 let mut queue: Vec<ModuleName> = Vec::new();
27 self.parse_graph(&mut queue, name, &TypeCheckLimits::default(), false);
32
33 seen.insert(name.clone());
34 }
35 }
36}