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