lisette_diagnostics/
result.rs1use rustc_hash::{FxHashMap as HashMap, FxHashSet as HashSet};
2
3use ecow::EcoString;
4use syntax::ParseError;
5use syntax::program::{
6 CoercionInfo, Definition, EmitInput, File, ModuleInfo, MutationInfo, ResolutionInfo, UnusedInfo,
7};
8
9use crate::LisetteDiagnostic;
10
11pub struct SemanticResult {
12 pub files: HashMap<u32, File>,
13 pub definitions: HashMap<EcoString, Definition>,
14 pub modules: HashMap<String, ModuleInfo>,
15 pub errors: Vec<LisetteDiagnostic>,
16 pub lints: Vec<LisetteDiagnostic>,
17 pub entry_module_id: String,
18 pub unused: UnusedInfo,
19 pub mutations: MutationInfo,
20 pub coercions: CoercionInfo,
21 pub resolutions: ResolutionInfo,
22 pub cached_modules: HashSet<String>,
23 pub ufcs_methods: HashSet<(String, String)>,
24}
25
26impl SemanticResult {
27 pub fn with_parse_errors(errors: Vec<ParseError>, entry_module_id: &str) -> Self {
28 Self {
29 files: HashMap::default(),
30 definitions: HashMap::default(),
31 modules: HashMap::default(),
32 errors: errors.into_iter().map(Into::into).collect(),
33 lints: vec![],
34 entry_module_id: entry_module_id.to_string(),
35 unused: UnusedInfo::default(),
36 mutations: MutationInfo::default(),
37 coercions: CoercionInfo::default(),
38 resolutions: ResolutionInfo::default(),
39 cached_modules: HashSet::default(),
40 ufcs_methods: HashSet::default(),
41 }
42 }
43
44 pub fn failed(&self) -> bool {
45 self.errors.iter().any(|e| e.is_error())
46 }
47
48 pub fn into_emit_input(self) -> EmitInput {
49 EmitInput {
50 files: self.files,
51 definitions: self.definitions,
52 modules: self.modules,
53 entry_module_id: self.entry_module_id,
54 unused: self.unused,
55 mutations: self.mutations,
56 coercions: self.coercions,
57 resolutions: self.resolutions,
58 cached_modules: self.cached_modules,
59 ufcs_methods: self.ufcs_methods,
60 }
61 }
62}