Skip to main content

lisette_diagnostics/
result.rs

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