lisette_diagnostics/
result.rs1use 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}