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