Skip to content

Commit

Permalink
Make sure that labels are defined after the primary span in diagnostics
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Jul 10, 2024
1 parent d819876 commit df72e47
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions compiler/rustc_macros/src/diagnostics/diagnostic_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@ impl DiagnosticDeriveVariantBuilder {
let field_binding = &binding_info.binding;

let inner_ty = FieldInnerTy::from_type(&field.ty);
let mut seen_label = false;

field
.attrs
Expand All @@ -280,6 +281,14 @@ impl DiagnosticDeriveVariantBuilder {
}

let name = attr.path().segments.last().unwrap().ident.to_string();

if name == "primary_span" && seen_label {
span_err(attr.span().unwrap(), format!("`#[primary_span]` must be placed before labels, since it overwrites the span of the diagnostic")).emit();
}
if name == "label" {
seen_label = true;
}

let needs_clone =
name == "primary_span" && matches!(inner_ty, FieldInnerTy::Vec(_));
let (binding, needs_destructure) = if needs_clone {
Expand Down

0 comments on commit df72e47

Please sign in to comment.