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 TypedefSource {
12    pub source: String,
13    pub filename: String,
14}
15
16pub struct SemanticResult {
17    pub files: HashMap<u32, File>,
18    pub definitions: HashMap<EcoString, Definition>,
19    pub modules: HashMap<String, ModuleInfo>,
20    pub errors: Vec<LisetteDiagnostic>,
21    pub lints: Vec<LisetteDiagnostic>,
22    pub entry_module_id: String,
23    pub unused: UnusedInfo,
24    pub mutations: MutationInfo,
25    pub coercions: CoercionInfo,
26    pub resolutions: ResolutionInfo,
27    pub cached_modules: HashSet<String>,
28    pub ufcs_methods: HashSet<(String, String)>,
29    pub typedef_sources: HashMap<u32, TypedefSource>,
30    pub go_package_names: HashMap<String, String>,
31}
32
33impl SemanticResult {
34    pub fn with_parse_errors(errors: Vec<ParseError>, entry_module_id: &str) -> Self {
35        Self {
36            files: HashMap::default(),
37            definitions: HashMap::default(),
38            modules: HashMap::default(),
39            errors: errors.into_iter().map(Into::into).collect(),
40            lints: vec![],
41            entry_module_id: entry_module_id.to_string(),
42            unused: UnusedInfo::default(),
43            mutations: MutationInfo::default(),
44            coercions: CoercionInfo::default(),
45            resolutions: ResolutionInfo::default(),
46            cached_modules: HashSet::default(),
47            ufcs_methods: HashSet::default(),
48            typedef_sources: HashMap::default(),
49            go_package_names: HashMap::default(),
50        }
51    }
52
53    pub fn failed(&self) -> bool {
54        self.errors.iter().any(|e| e.is_error())
55    }
56
57    pub fn into_emit_input(self) -> EmitInput {
58        EmitInput {
59            files: self.files,
60            definitions: self.definitions,
61            modules: self.modules,
62            entry_module_id: self.entry_module_id,
63            unused: self.unused,
64            mutations: self.mutations,
65            coercions: self.coercions,
66            resolutions: self.resolutions,
67            cached_modules: self.cached_modules,
68            ufcs_methods: self.ufcs_methods,
69            go_package_names: self.go_package_names,
70        }
71    }
72}