]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_hir_analysis/src/structured_errors.rs
rustc_typeck to rustc_hir_analysis
[rust.git] / compiler / rustc_hir_analysis / src / structured_errors.rs
1 mod missing_cast_for_variadic_arg;
2 mod sized_unsized_cast;
3 mod wrong_number_of_generic_args;
4
5 pub use self::{
6     missing_cast_for_variadic_arg::*, sized_unsized_cast::*, wrong_number_of_generic_args::*,
7 };
8
9 use rustc_errors::{DiagnosticBuilder, DiagnosticId, ErrorGuaranteed};
10 use rustc_session::Session;
11
12 pub trait StructuredDiagnostic<'tcx> {
13     fn session(&self) -> &Session;
14
15     fn code(&self) -> DiagnosticId;
16
17     fn diagnostic(&self) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
18         let err = self.diagnostic_common();
19
20         if self.session().teach(&self.code()) {
21             self.diagnostic_extended(err)
22         } else {
23             self.diagnostic_regular(err)
24         }
25     }
26
27     fn diagnostic_common(&self) -> DiagnosticBuilder<'tcx, ErrorGuaranteed>;
28
29     fn diagnostic_regular(
30         &self,
31         err: DiagnosticBuilder<'tcx, ErrorGuaranteed>,
32     ) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
33         err
34     }
35
36     fn diagnostic_extended(
37         &self,
38         err: DiagnosticBuilder<'tcx, ErrorGuaranteed>,
39     ) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
40         err
41     }
42 }