Skip to main content

lisette_diagnostics/
result.rs

1use 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}