luaur_analysis/records/
frontend.rs1use crate::records::builtin_types::BuiltinTypes;
4use crate::records::config_resolver::ConfigResolver;
5use crate::records::file_resolver::FileResolver;
6use crate::records::frontend_module_resolver::FrontendModuleResolver;
7use crate::records::frontend_options::FrontendOptions;
8use crate::records::global_types::GlobalTypes;
9use crate::records::internal_error_reporter::InternalErrorReporter;
10use crate::records::require_trace_result::RequireTraceResult;
11use crate::records::source_module::SourceModule;
12use crate::records::source_node::SourceNode;
13use crate::type_aliases::scope_ptr_type::ScopePtr;
14use alloc::rc::Rc;
15use alloc::string::String;
16use alloc::sync::Arc;
17use alloc::vec::Vec;
18use core::sync::atomic::AtomicI32;
19use luaur_config::type_aliases::module_name::ModuleName;
20use std::collections::HashMap;
21
22#[derive(Debug, Clone, Copy, Default)]
24pub struct FrontendStats {
25 pub files: usize,
26 pub lines: usize,
27 pub files_strict: usize,
28 pub files_nonstrict: usize,
29 pub types_allocated: usize,
30 pub type_packs_allocated: usize,
31 pub bool_singletons_minted: usize,
32 pub str_singletons_minted: usize,
33 pub unique_str_singletons_minted: usize,
34 pub time_read: f64,
35 pub time_parse: f64,
36 pub time_check: f64,
37 pub time_lint: f64,
38 pub dynamic_constraints_created: usize,
39}
40
41pub struct Frontend {
42 pub use_new_luau_solver: AtomicI32,
43
44 pub environments: HashMap<String, ScopePtr>,
45 pub builtin_definitions: HashMap<String, Rc<dyn Fn(&mut Frontend, &mut GlobalTypes, ScopePtr)>>,
46
47 pub builtin_types_: BuiltinTypes,
48 pub builtin_types: *mut BuiltinTypes, pub file_resolver: *mut FileResolver,
51 pub module_resolver: FrontendModuleResolver,
52 pub module_resolver_for_autocomplete: FrontendModuleResolver,
53 pub globals: GlobalTypes,
54 pub globals_for_autocomplete: GlobalTypes,
55 pub config_resolver: *mut ConfigResolver,
56 pub options: FrontendOptions,
57 pub ice_handler: InternalErrorReporter,
58 pub prepare_module_scope: Option<Rc<dyn Fn(&ModuleName, &ScopePtr, bool)>>,
59 pub write_json_log: Option<Rc<dyn Fn(&ModuleName, String)>>,
60
61 pub source_nodes: HashMap<ModuleName, Arc<SourceNode>>,
62 pub source_modules: HashMap<ModuleName, Arc<SourceModule>>,
63 pub require_trace: HashMap<ModuleName, RequireTraceResult>,
64
65 pub stats: FrontendStats,
66
67 pub module_queue: Vec<ModuleName>,
68}
69
70impl core::fmt::Debug for Frontend {
71 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
72 f.debug_struct("Frontend")
73 .field("use_new_luau_solver", &self.use_new_luau_solver)
74 .field("environments", &self.environments)
75 .field("builtin_definitions_len", &self.builtin_definitions.len())
76 .field("builtin_types_", &self.builtin_types_)
77 .field("builtin_types", &self.builtin_types)
78 .field("file_resolver", &self.file_resolver)
79 .field("module_resolver", &self.module_resolver)
80 .field(
81 "module_resolver_for_autocomplete",
82 &self.module_resolver_for_autocomplete,
83 )
84 .field("globals", &self.globals)
85 .field("globals_for_autocomplete", &self.globals_for_autocomplete)
86 .field("config_resolver", &self.config_resolver)
87 .field("options", &self.options)
88 .field("ice_handler", &self.ice_handler)
89 .field(
90 "prepare_module_scope",
91 &self.prepare_module_scope.as_ref().map(|_| "..."),
92 )
93 .field(
94 "write_json_log",
95 &self.write_json_log.as_ref().map(|_| "..."),
96 )
97 .field("source_nodes", &self.source_nodes)
98 .field("source_modules", &self.source_modules)
99 .field("require_trace", &self.require_trace)
100 .field("stats", &self.stats)
101 .field("module_queue", &self.module_queue)
102 .finish()
103 }
104}