Rollup merge of #127591 - compiler-errors:label-after-primary, r=lcnr · rust-lang/rust@73c500b (original) (raw)
File tree
4 files changed
lines changed
- rustc_macros/src/diagnostics
4 files changed
lines changed
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -269,6 +269,7 @@ impl DiagnosticDeriveVariantBuilder { | ||
269 | 269 | let field_binding = &binding_info.binding; |
270 | 270 | |
271 | 271 | let inner_ty = FieldInnerTy::from_type(&field.ty); |
272 | +let mut seen_label = false; | |
272 | 273 | |
273 | 274 | field |
274 | 275 | .attrs |
@@ -280,6 +281,14 @@ impl DiagnosticDeriveVariantBuilder { | ||
280 | 281 | } |
281 | 282 | |
282 | 283 | let name = attr.path().segments.last().unwrap().ident.to_string(); |
284 | + | |
285 | +if name == "primary_span" && seen_label { | |
286 | +span_err(attr.span().unwrap(), format!("`#[primary_span]` must be placed before labels, since it overwrites the span of the diagnostic")).emit(); | |
287 | +} | |
288 | +if name == "label" { | |
289 | + seen_label = true; | |
290 | +} | |
291 | + | |
283 | 292 | let needs_clone = |
284 | 293 | name == "primary_span" && matches!(inner_ty, FieldInnerTy::Vec(_)); |
285 | 294 | let (binding, needs_destructure) = if needs_clone { |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1089,8 +1089,8 @@ pub(crate) struct ToolWasAlreadyRegistered { | ||
1089 | 1089 | #[derive(Diagnostic)] |
1090 | 1090 | #[diag(resolve_tool_only_accepts_identifiers)] |
1091 | 1091 | pub(crate) struct ToolOnlyAcceptsIdentifiers { |
1092 | -#[label] | |
1093 | 1092 | #[primary_span] |
1093 | +#[label] | |
1094 | 1094 | pub(crate) span: Span, |
1095 | 1095 | pub(crate) tool: Symbol, |
1096 | 1096 | } |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
1 | +#![feature(register_tool)] | |
2 | + | |
3 | +#![register_tool(1)] | |
4 | +//~^ ERROR `register_tool` only accepts identifiers | |
5 | + | |
6 | +fn main() {} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
1 | +error: `register_tool` only accepts identifiers | |
2 | + --> $DIR/invalid-tool.rs:3:18 | |
3 | + | | |
4 | +LL | #![register_tool(1)] | |
5 | + | ^ not an identifier | |
6 | + | |
7 | +error: aborting due to 1 previous error | |
8 | + |