• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)]
83 #[diag(ast_lowering_misplaced_assoc_ty_binding)]
84 pub struct MisplacedAssocTyBinding<'a> {
85     #[primary_span]
86     pub span: Span,
87     pub position: DiagnosticArgFromDisplay<'a>,
88 }
89 
90 #[derive(Diagnostic, Clone, Copy)]
91 #[diag(ast_lowering_underscore_expr_lhs_assign)]
92 pub struct UnderscoreExprLhsAssign {
93     #[primary_span]
94     #[label]
95     pub span: Span,
96 }
97 
98 #[derive(Diagnostic, Clone, Copy)]
99 #[diag(ast_lowering_base_expression_double_dot)]
100 pub struct BaseExpressionDoubleDot {
101     #[primary_span]
102     #[label]
103     pub span: Span,
104 }
105 
106 #[derive(Diagnostic, Clone, Copy)]
107 #[diag(ast_lowering_await_only_in_async_fn_and_blocks, code = "E0728")]
108 pub struct AwaitOnlyInAsyncFnAndBlocks {
109     #[primary_span]
110     #[label]
111     pub await_kw_span: Span,
112     #[label(ast_lowering_this_not_async)]
113     pub item_span: Option<Span>,
114 }
115 
116 #[derive(Diagnostic, Clone, Copy)]
117 #[diag(ast_lowering_generator_too_many_parameters, code = "E0628")]
118 pub struct GeneratorTooManyParameters {
119     #[primary_span]
120     pub fn_decl_span: Span,
121 }
122 
123 #[derive(Diagnostic, Clone, Copy)]
124 #[diag(ast_lowering_closure_cannot_be_static, code = "E0697")]
125 pub struct ClosureCannotBeStatic {
126     #[primary_span]
127     pub fn_decl_span: Span,
128 }
129 
130 #[derive(Diagnostic, Clone, Copy)]
131 #[help]
132 #[diag(ast_lowering_async_non_move_closure_not_supported, code = "E0708")]
133 pub struct AsyncNonMoveClosureNotSupported {
134     #[primary_span]
135     pub fn_decl_span: Span,
136 }
137 
138 #[derive(Diagnostic, Clone, Copy)]
139 #[diag(ast_lowering_functional_record_update_destructuring_assignment)]
140 pub struct FunctionalRecordUpdateDestructuringAssignment {
141     #[primary_span]
142     #[suggestion(code = "", applicability = "machine-applicable")]
143     pub span: Span,
144 }
145 
146 #[derive(Diagnostic, Clone, Copy)]
147 #[diag(ast_lowering_async_generators_not_supported, code = "E0727")]
148 pub struct AsyncGeneratorsNotSupported {
149     #[primary_span]
150     pub span: Span,
151 }
152 
153 #[derive(Diagnostic, Clone, Copy)]
154 #[diag(ast_lowering_inline_asm_unsupported_target, code = "E0472")]
155 pub struct InlineAsmUnsupportedTarget {
156     #[primary_span]
157     pub span: Span,
158 }
159 
160 #[derive(Diagnostic, Clone, Copy)]
161 #[diag(ast_lowering_att_syntax_only_x86)]
162 pub struct AttSyntaxOnlyX86 {
163     #[primary_span]
164     pub span: Span,
165 }
166 
167 #[derive(Diagnostic, Clone, Copy)]
168 #[diag(ast_lowering_abi_specified_multiple_times)]
169 pub struct AbiSpecifiedMultipleTimes {
170     #[primary_span]
171     pub abi_span: Span,
172     pub prev_name: Symbol,
173     #[label]
174     pub prev_span: Span,
175     #[note]
176     pub equivalent: Option<()>,
177 }
178 
179 #[derive(Diagnostic, Clone, Copy)]
180 #[diag(ast_lowering_clobber_abi_not_supported)]
181 pub struct ClobberAbiNotSupported {
182     #[primary_span]
183     pub abi_span: Span,
184 }
185 
186 #[derive(Diagnostic)]
187 #[note]
188 #[diag(ast_lowering_invalid_abi_clobber_abi)]
189 pub struct InvalidAbiClobberAbi {
190     #[primary_span]
191     pub abi_span: Span,
192     pub supported_abis: String,
193 }
194 
195 #[derive(Diagnostic, Clone, Copy)]
196 #[diag(ast_lowering_invalid_register)]
197 pub struct InvalidRegister<'a> {
198     #[primary_span]
199     pub op_span: Span,
200     pub reg: Symbol,
201     pub error: &'a str,
202 }
203 
204 #[derive(Diagnostic, Clone, Copy)]
205 #[diag(ast_lowering_invalid_register_class)]
206 pub struct InvalidRegisterClass<'a> {
207     #[primary_span]
208     pub op_span: Span,
209     pub reg_class: Symbol,
210     pub error: &'a str,
211 }
212 
213 #[derive(Diagnostic)]
214 #[diag(ast_lowering_invalid_asm_template_modifier_reg_class)]
215 pub struct InvalidAsmTemplateModifierRegClass {
216     #[primary_span]
217     #[label(ast_lowering_template_modifier)]
218     pub placeholder_span: Span,
219     #[label(ast_lowering_argument)]
220     pub op_span: Span,
221     #[subdiagnostic]
222     pub sub: InvalidAsmTemplateModifierRegClassSub,
223 }
224 
225 #[derive(Subdiagnostic)]
226 pub enum InvalidAsmTemplateModifierRegClassSub {
227     #[note(ast_lowering_support_modifiers)]
228     SupportModifier { class_name: Symbol, modifiers: String },
229     #[note(ast_lowering_does_not_support_modifiers)]
230     DoesNotSupportModifier { class_name: Symbol },
231 }
232 
233 #[derive(Diagnostic, Clone, Copy)]
234 #[diag(ast_lowering_invalid_asm_template_modifier_const)]
235 pub struct InvalidAsmTemplateModifierConst {
236     #[primary_span]
237     #[label(ast_lowering_template_modifier)]
238     pub placeholder_span: Span,
239     #[label(ast_lowering_argument)]
240     pub op_span: Span,
241 }
242 
243 #[derive(Diagnostic, Clone, Copy)]
244 #[diag(ast_lowering_invalid_asm_template_modifier_sym)]
245 pub struct InvalidAsmTemplateModifierSym {
246     #[primary_span]
247     #[label(ast_lowering_template_modifier)]
248     pub placeholder_span: Span,
249     #[label(ast_lowering_argument)]
250     pub op_span: Span,
251 }
252 
253 #[derive(Diagnostic, Clone, Copy)]
254 #[diag(ast_lowering_register_class_only_clobber)]
255 pub struct RegisterClassOnlyClobber {
256     #[primary_span]
257     pub op_span: Span,
258     pub reg_class_name: Symbol,
259 }
260 
261 #[derive(Diagnostic, Clone, Copy)]
262 #[diag(ast_lowering_register_conflict)]
263 pub struct RegisterConflict<'a> {
264     #[primary_span]
265     #[label(ast_lowering_register1)]
266     pub op_span1: Span,
267     #[label(ast_lowering_register2)]
268     pub op_span2: Span,
269     pub reg1_name: &'a str,
270     pub reg2_name: &'a str,
271     #[help]
272     pub in_out: Option<Span>,
273 }
274 
275 #[derive(Diagnostic, Clone, Copy)]
276 #[help]
277 #[diag(ast_lowering_sub_tuple_binding)]
278 pub struct SubTupleBinding<'a> {
279     #[primary_span]
280     #[label]
281     #[suggestion(
282         ast_lowering_sub_tuple_binding_suggestion,
283         style = "verbose",
284         code = "..",
285         applicability = "maybe-incorrect"
286     )]
287     pub span: Span,
288     pub ident: Ident,
289     pub ident_name: Symbol,
290     pub ctx: &'a str,
291 }
292 
293 #[derive(Diagnostic, Clone, Copy)]
294 #[diag(ast_lowering_extra_double_dot)]
295 pub struct ExtraDoubleDot<'a> {
296     #[primary_span]
297     #[label]
298     pub span: Span,
299     #[label(ast_lowering_previously_used_here)]
300     pub prev_span: Span,
301     pub ctx: &'a str,
302 }
303 
304 #[derive(Diagnostic, Clone, Copy)]
305 #[note]
306 #[diag(ast_lowering_misplaced_double_dot)]
307 pub struct MisplacedDoubleDot {
308     #[primary_span]
309     pub span: Span,
310 }
311 
312 #[derive(Diagnostic, Clone, Copy)]
313 #[diag(ast_lowering_misplaced_relax_trait_bound)]
314 pub struct MisplacedRelaxTraitBound {
315     #[primary_span]
316     pub span: Span,
317 }
318 
319 #[derive(Diagnostic, Clone, Copy)]
320 #[diag(ast_lowering_not_supported_for_lifetime_binder_async_closure)]
321 pub struct NotSupportedForLifetimeBinderAsyncClosure {
322     #[primary_span]
323     pub span: Span,
324 }
325 
326 #[derive(Diagnostic, Clone, Copy)]
327 #[diag(ast_lowering_arbitrary_expression_in_pattern)]
328 pub struct ArbitraryExpressionInPattern {
329     #[primary_span]
330     pub span: Span,
331 }
332 
333 #[derive(Diagnostic, Clone, Copy)]
334 #[diag(ast_lowering_inclusive_range_with_no_end)]
335 pub struct InclusiveRangeWithNoEnd {
336     #[primary_span]
337     pub span: Span,
338 }
339 
340 #[derive(Diagnostic, Clone, Copy)]
341 #[diag(ast_lowering_trait_fn_async, code = "E0706")]
342 #[note]
343 #[note(ast_lowering_note2)]
344 pub struct TraitFnAsync {
345     #[primary_span]
346     pub fn_span: Span,
347     #[label]
348     pub span: Span,
349 }
350 
351 #[derive(Diagnostic)]
352 pub enum BadReturnTypeNotation {
353     #[diag(ast_lowering_bad_return_type_notation_inputs)]
354     Inputs {
355         #[primary_span]
356         #[suggestion(code = "()", applicability = "maybe-incorrect")]
357         span: Span,
358     },
359     #[diag(ast_lowering_bad_return_type_notation_output)]
360     Output {
361         #[primary_span]
362         #[suggestion(code = "", applicability = "maybe-incorrect")]
363         span: Span,
364     },
365 }
366