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