]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_ast_lowering/src/errors.rs
Rollup merge of #105433 - ComputerDruid:docker_continuation_fix, r=jyn514
[rust.git] / compiler / rustc_ast_lowering / src / errors.rs
1 use rustc_errors::DiagnosticArgFromDisplay;
2 use rustc_macros::{Diagnostic, Subdiagnostic};
3 use rustc_span::{symbol::Ident, Span, Symbol};
4
5 #[derive(Diagnostic, Clone, Copy)]
6 #[diag(ast_lowering_generic_type_with_parentheses, code = "E0214")]
7 pub struct GenericTypeWithParentheses {
8     #[primary_span]
9     #[label]
10     pub span: Span,
11     #[subdiagnostic]
12     pub sub: Option<UseAngleBrackets>,
13 }
14
15 #[derive(Clone, Copy, Subdiagnostic)]
16 #[multipart_suggestion(ast_lowering_use_angle_brackets, applicability = "maybe-incorrect")]
17 pub struct UseAngleBrackets {
18     #[suggestion_part(code = "<")]
19     pub open_param: Span,
20     #[suggestion_part(code = ">")]
21     pub close_param: Span,
22 }
23
24 #[derive(Diagnostic)]
25 #[diag(ast_lowering_invalid_abi, code = "E0703")]
26 #[note]
27 pub struct InvalidAbi {
28     #[primary_span]
29     #[label]
30     pub span: Span,
31     pub abi: Symbol,
32     pub command: String,
33     #[subdiagnostic]
34     pub suggestion: Option<InvalidAbiSuggestion>,
35 }
36
37 #[derive(Subdiagnostic)]
38 #[suggestion(
39     ast_lowering_invalid_abi_suggestion,
40     code = "{suggestion}",
41     applicability = "maybe-incorrect"
42 )]
43 pub struct InvalidAbiSuggestion {
44     #[primary_span]
45     pub span: Span,
46     pub suggestion: String,
47 }
48
49 #[derive(Diagnostic, Clone, Copy)]
50 #[diag(ast_lowering_assoc_ty_parentheses)]
51 pub struct AssocTyParentheses {
52     #[primary_span]
53     pub span: Span,
54     #[subdiagnostic]
55     pub sub: AssocTyParenthesesSub,
56 }
57
58 #[derive(Clone, Copy, Subdiagnostic)]
59 pub enum AssocTyParenthesesSub {
60     #[multipart_suggestion(ast_lowering_remove_parentheses)]
61     Empty {
62         #[suggestion_part(code = "")]
63         parentheses_span: Span,
64     },
65     #[multipart_suggestion(ast_lowering_use_angle_brackets)]
66     NotEmpty {
67         #[suggestion_part(code = "<")]
68         open_param: Span,
69         #[suggestion_part(code = ">")]
70         close_param: Span,
71     },
72 }
73
74 #[derive(Diagnostic)]
75 #[diag(ast_lowering_misplaced_impl_trait, code = "E0562")]
76 pub struct MisplacedImplTrait<'a> {
77     #[primary_span]
78     pub span: Span,
79     pub position: DiagnosticArgFromDisplay<'a>,
80 }
81
82 #[derive(Diagnostic, Clone, Copy)]
83 #[diag(ast_lowering_rustc_box_attribute_error)]
84 pub struct RustcBoxAttributeError {
85     #[primary_span]
86     pub span: Span,
87 }
88
89 #[derive(Diagnostic, Clone, Copy)]
90 #[diag(ast_lowering_underscore_expr_lhs_assign)]
91 pub struct UnderscoreExprLhsAssign {
92     #[primary_span]
93     #[label]
94     pub span: Span,
95 }
96
97 #[derive(Diagnostic, Clone, Copy)]
98 #[diag(ast_lowering_base_expression_double_dot)]
99 pub struct BaseExpressionDoubleDot {
100     #[primary_span]
101     #[label]
102     pub span: Span,
103 }
104
105 #[derive(Diagnostic, Clone, Copy)]
106 #[diag(ast_lowering_await_only_in_async_fn_and_blocks, code = "E0728")]
107 pub struct AwaitOnlyInAsyncFnAndBlocks {
108     #[primary_span]
109     #[label]
110     pub dot_await_span: Span,
111     #[label(ast_lowering_this_not_async)]
112     pub item_span: Option<Span>,
113 }
114
115 #[derive(Diagnostic, Clone, Copy)]
116 #[diag(ast_lowering_generator_too_many_parameters, code = "E0628")]
117 pub struct GeneratorTooManyParameters {
118     #[primary_span]
119     pub fn_decl_span: Span,
120 }
121
122 #[derive(Diagnostic, Clone, Copy)]
123 #[diag(ast_lowering_closure_cannot_be_static, code = "E0697")]
124 pub struct ClosureCannotBeStatic {
125     #[primary_span]
126     pub fn_decl_span: Span,
127 }
128
129 #[derive(Diagnostic, Clone, Copy)]
130 #[help]
131 #[diag(ast_lowering_async_non_move_closure_not_supported, code = "E0708")]
132 pub struct AsyncNonMoveClosureNotSupported {
133     #[primary_span]
134     pub fn_decl_span: Span,
135 }
136
137 #[derive(Diagnostic, Clone, Copy)]
138 #[diag(ast_lowering_functional_record_update_destructuring_assignment)]
139 pub struct FunctionalRecordUpdateDestructuringAssignemnt {
140     #[primary_span]
141     #[suggestion(code = "", applicability = "machine-applicable")]
142     pub span: Span,
143 }
144
145 #[derive(Diagnostic, Clone, Copy)]
146 #[diag(ast_lowering_async_generators_not_supported, code = "E0727")]
147 pub struct AsyncGeneratorsNotSupported {
148     #[primary_span]
149     pub span: Span,
150 }
151
152 #[derive(Diagnostic, Clone, Copy)]
153 #[diag(ast_lowering_inline_asm_unsupported_target, code = "E0472")]
154 pub struct InlineAsmUnsupportedTarget {
155     #[primary_span]
156     pub span: Span,
157 }
158
159 #[derive(Diagnostic, Clone, Copy)]
160 #[diag(ast_lowering_att_syntax_only_x86)]
161 pub struct AttSyntaxOnlyX86 {
162     #[primary_span]
163     pub span: Span,
164 }
165
166 #[derive(Diagnostic, Clone, Copy)]
167 #[diag(ast_lowering_abi_specified_multiple_times)]
168 pub struct AbiSpecifiedMultipleTimes {
169     #[primary_span]
170     pub abi_span: Span,
171     pub prev_name: Symbol,
172     #[label]
173     pub prev_span: Span,
174     #[note]
175     pub equivalent: Option<()>,
176 }
177
178 #[derive(Diagnostic, Clone, Copy)]
179 #[diag(ast_lowering_clobber_abi_not_supported)]
180 pub struct ClobberAbiNotSupported {
181     #[primary_span]
182     pub abi_span: Span,
183 }
184
185 #[derive(Diagnostic)]
186 #[note]
187 #[diag(ast_lowering_invalid_abi_clobber_abi)]
188 pub struct InvalidAbiClobberAbi {
189     #[primary_span]
190     pub abi_span: Span,
191     pub supported_abis: String,
192 }
193
194 #[derive(Diagnostic, Clone, Copy)]
195 #[diag(ast_lowering_invalid_register)]
196 pub struct InvalidRegister<'a> {
197     #[primary_span]
198     pub op_span: Span,
199     pub reg: Symbol,
200     pub error: &'a str,
201 }
202
203 #[derive(Diagnostic, Clone, Copy)]
204 #[diag(ast_lowering_invalid_register_class)]
205 pub struct InvalidRegisterClass<'a> {
206     #[primary_span]
207     pub op_span: Span,
208     pub reg_class: Symbol,
209     pub error: &'a str,
210 }
211
212 #[derive(Diagnostic)]
213 #[diag(ast_lowering_invalid_asm_template_modifier_reg_class)]
214 pub struct InvalidAsmTemplateModifierRegClass {
215     #[primary_span]
216     #[label(ast_lowering_template_modifier)]
217     pub placeholder_span: Span,
218     #[label(ast_lowering_argument)]
219     pub op_span: Span,
220     #[subdiagnostic]
221     pub sub: InvalidAsmTemplateModifierRegClassSub,
222 }
223
224 #[derive(Subdiagnostic)]
225 pub enum InvalidAsmTemplateModifierRegClassSub {
226     #[note(ast_lowering_support_modifiers)]
227     SupportModifier { class_name: Symbol, modifiers: String },
228     #[note(ast_lowering_does_not_support_modifiers)]
229     DoesNotSupportModifier { class_name: Symbol },
230 }
231
232 #[derive(Diagnostic, Clone, Copy)]
233 #[diag(ast_lowering_invalid_asm_template_modifier_const)]
234 pub struct InvalidAsmTemplateModifierConst {
235     #[primary_span]
236     #[label(ast_lowering_template_modifier)]
237     pub placeholder_span: Span,
238     #[label(ast_lowering_argument)]
239     pub op_span: Span,
240 }
241
242 #[derive(Diagnostic, Clone, Copy)]
243 #[diag(ast_lowering_invalid_asm_template_modifier_sym)]
244 pub struct InvalidAsmTemplateModifierSym {
245     #[primary_span]
246     #[label(ast_lowering_template_modifier)]
247     pub placeholder_span: Span,
248     #[label(ast_lowering_argument)]
249     pub op_span: Span,
250 }
251
252 #[derive(Diagnostic, Clone, Copy)]
253 #[diag(ast_lowering_register_class_only_clobber)]
254 pub struct RegisterClassOnlyClobber {
255     #[primary_span]
256     pub op_span: Span,
257     pub reg_class_name: Symbol,
258 }
259
260 #[derive(Diagnostic, Clone, Copy)]
261 #[diag(ast_lowering_register_conflict)]
262 pub struct RegisterConflict<'a> {
263     #[primary_span]
264     #[label(ast_lowering_register1)]
265     pub op_span1: Span,
266     #[label(ast_lowering_register2)]
267     pub op_span2: Span,
268     pub reg1_name: &'a str,
269     pub reg2_name: &'a str,
270     #[help]
271     pub in_out: Option<Span>,
272 }
273
274 #[derive(Diagnostic, Clone, Copy)]
275 #[help]
276 #[diag(ast_lowering_sub_tuple_binding)]
277 pub struct SubTupleBinding<'a> {
278     #[primary_span]
279     #[label]
280     #[suggestion(
281         ast_lowering_sub_tuple_binding_suggestion,
282         style = "verbose",
283         code = "..",
284         applicability = "maybe-incorrect"
285     )]
286     pub span: Span,
287     pub ident: Ident,
288     pub ident_name: Symbol,
289     pub ctx: &'a str,
290 }
291
292 #[derive(Diagnostic, Clone, Copy)]
293 #[diag(ast_lowering_extra_double_dot)]
294 pub struct ExtraDoubleDot<'a> {
295     #[primary_span]
296     #[label]
297     pub span: Span,
298     #[label(ast_lowering_previously_used_here)]
299     pub prev_span: Span,
300     pub ctx: &'a str,
301 }
302
303 #[derive(Diagnostic, Clone, Copy)]
304 #[note]
305 #[diag(ast_lowering_misplaced_double_dot)]
306 pub struct MisplacedDoubleDot {
307     #[primary_span]
308     pub span: Span,
309 }
310
311 #[derive(Diagnostic, Clone, Copy)]
312 #[diag(ast_lowering_misplaced_relax_trait_bound)]
313 pub struct MisplacedRelaxTraitBound {
314     #[primary_span]
315     pub span: Span,
316 }
317
318 #[derive(Diagnostic, Clone, Copy)]
319 #[diag(ast_lowering_not_supported_for_lifetime_binder_async_closure)]
320 pub struct NotSupportedForLifetimeBinderAsyncClosure {
321     #[primary_span]
322     pub span: Span,
323 }
324
325 #[derive(Diagnostic, Clone, Copy)]
326 #[diag(ast_lowering_arbitrary_expression_in_pattern)]
327 pub struct ArbitraryExpressionInPattern {
328     #[primary_span]
329     pub span: Span,
330 }
331
332 #[derive(Diagnostic, Clone, Copy)]
333 #[diag(ast_lowering_inclusive_range_with_no_end)]
334 pub struct InclusiveRangeWithNoEnd {
335     #[primary_span]
336     pub span: Span,
337 }
338
339 #[derive(Diagnostic, Clone, Copy)]
340 #[diag(ast_lowering_trait_fn_async, code = "E0706")]
341 #[note]
342 #[note(note2)]
343 pub struct TraitFnAsync {
344     #[primary_span]
345     pub fn_span: Span,
346     #[label]
347     pub span: Span,
348 }