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}
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_paths: 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}