]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_hir_typeck/src/errors.rs
Rollup merge of #103919 - nnethercote:unescaping-cleanups, r=matklad
[rust.git] / compiler / rustc_hir_typeck / src / errors.rs
1 //! Errors emitted by `rustc_hir_analysis`.
2 use rustc_macros::{Diagnostic, Subdiagnostic};
3 use rustc_middle::ty::Ty;
4 use rustc_span::{symbol::Ident, Span};
5
6 #[derive(Diagnostic)]
7 #[diag(hir_analysis_field_multiply_specified_in_initializer, code = "E0062")]
8 pub struct FieldMultiplySpecifiedInInitializer {
9     #[primary_span]
10     #[label]
11     pub span: Span,
12     #[label(previous_use_label)]
13     pub prev_span: Span,
14     pub ident: Ident,
15 }
16
17 #[derive(Diagnostic)]
18 #[diag(hir_analysis_return_stmt_outside_of_fn_body, code = "E0572")]
19 pub struct ReturnStmtOutsideOfFnBody {
20     #[primary_span]
21     pub span: Span,
22     #[label(encl_body_label)]
23     pub encl_body_span: Option<Span>,
24     #[label(encl_fn_label)]
25     pub encl_fn_span: Option<Span>,
26 }
27
28 #[derive(Diagnostic)]
29 #[diag(hir_analysis_yield_expr_outside_of_generator, code = "E0627")]
30 pub struct YieldExprOutsideOfGenerator {
31     #[primary_span]
32     pub span: Span,
33 }
34
35 #[derive(Diagnostic)]
36 #[diag(hir_analysis_struct_expr_non_exhaustive, code = "E0639")]
37 pub struct StructExprNonExhaustive {
38     #[primary_span]
39     pub span: Span,
40     pub what: &'static str,
41 }
42
43 #[derive(Diagnostic)]
44 #[diag(hir_analysis_method_call_on_unknown_type, code = "E0699")]
45 pub struct MethodCallOnUnknownType {
46     #[primary_span]
47     pub span: Span,
48 }
49
50 #[derive(Diagnostic)]
51 #[diag(hir_analysis_functional_record_update_on_non_struct, code = "E0436")]
52 pub struct FunctionalRecordUpdateOnNonStruct {
53     #[primary_span]
54     pub span: Span,
55 }
56
57 #[derive(Diagnostic)]
58 #[diag(hir_analysis_address_of_temporary_taken, code = "E0745")]
59 pub struct AddressOfTemporaryTaken {
60     #[primary_span]
61     #[label]
62     pub span: Span,
63 }
64
65 #[derive(Subdiagnostic)]
66 pub enum AddReturnTypeSuggestion {
67     #[suggestion(
68         hir_analysis_add_return_type_add,
69         code = "-> {found} ",
70         applicability = "machine-applicable"
71     )]
72     Add {
73         #[primary_span]
74         span: Span,
75         found: String,
76     },
77     #[suggestion(
78         hir_analysis_add_return_type_missing_here,
79         code = "-> _ ",
80         applicability = "has-placeholders"
81     )]
82     MissingHere {
83         #[primary_span]
84         span: Span,
85     },
86 }
87
88 #[derive(Subdiagnostic)]
89 pub enum ExpectedReturnTypeLabel<'tcx> {
90     #[label(hir_analysis_expected_default_return_type)]
91     Unit {
92         #[primary_span]
93         span: Span,
94     },
95     #[label(hir_analysis_expected_return_type)]
96     Other {
97         #[primary_span]
98         span: Span,
99         expected: Ty<'tcx>,
100     },
101 }
102
103 #[derive(Diagnostic)]
104 #[diag(hir_analysis_missing_parentheses_in_range, code = "E0689")]
105 pub struct MissingParentheseInRange {
106     #[primary_span]
107     #[label(hir_analysis_missing_parentheses_in_range)]
108     pub span: Span,
109     pub ty_str: String,
110     pub method_name: String,
111     #[subdiagnostic]
112     pub add_missing_parentheses: Option<AddMissingParenthesesInRange>,
113 }
114
115 #[derive(Subdiagnostic)]
116 #[multipart_suggestion(
117     hir_analysis_add_missing_parentheses_in_range,
118     style = "verbose",
119     applicability = "maybe-incorrect"
120 )]
121 pub struct AddMissingParenthesesInRange {
122     pub func_name: String,
123     #[suggestion_part(code = "(")]
124     pub left: Span,
125     #[suggestion_part(code = ")")]
126     pub right: Span,
127 }