From 20f2958b8af32dd08173272a7ede09aaa255c980 Mon Sep 17 00:00:00 2001 From: Xiretza Date: Thu, 20 Oct 2022 21:17:14 +0200 Subject: [PATCH] Add "tool-only" suggestion style --- compiler/rustc_macros/src/diagnostics/utils.rs | 13 ++++++++----- .../session-diagnostic/subdiagnostic-derive.rs | 7 +++++++ .../subdiagnostic-derive.stderr | 18 +++++++++--------- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/compiler/rustc_macros/src/diagnostics/utils.rs b/compiler/rustc_macros/src/diagnostics/utils.rs index aaeb0e1aba9..99ecaaae0e8 100644 --- a/compiler/rustc_macros/src/diagnostics/utils.rs +++ b/compiler/rustc_macros/src/diagnostics/utils.rs @@ -474,14 +474,11 @@ pub(super) fn build_suggestion_code( /// Possible styles for suggestion subdiagnostics. #[derive(Clone, Copy, PartialEq)] pub(super) enum SuggestionKind { - /// `#[suggestion]` Normal, - /// `#[suggestion_short]` Short, - /// `#[suggestion_hidden]` Hidden, - /// `#[suggestion_verbose]` Verbose, + ToolOnly, } impl FromStr for SuggestionKind { @@ -493,6 +490,7 @@ impl FromStr for SuggestionKind { "short" => Ok(SuggestionKind::Short), "hidden" => Ok(SuggestionKind::Hidden), "verbose" => Ok(SuggestionKind::Verbose), + "tool-only" => Ok(SuggestionKind::ToolOnly), _ => Err(()), } } @@ -513,6 +511,9 @@ impl SuggestionKind { SuggestionKind::Verbose => { quote! { rustc_errors::SuggestionStyle::ShowAlways } } + SuggestionKind::ToolOnly => { + quote! { rustc_errors::SuggestionStyle::CompletelyHidden } + } } } @@ -583,6 +584,8 @@ impl SubdiagnosticKind { "help" => SubdiagnosticKind::Help, "warning" => SubdiagnosticKind::Warn, _ => { + // FIXME(#100717): remove #[suggestion_{short,verbose,hidden}] attributes, use + // #[suggestion(style = "...")] instead if let Some(suggestion_kind) = name.strip_prefix("suggestion").and_then(SuggestionKind::from_suffix) { @@ -719,7 +722,7 @@ impl SubdiagnosticKind { let value = value.value().parse().unwrap_or_else(|()| { span_err(value.span().unwrap(), "invalid suggestion style") - .help("valid styles are `normal`, `short`, `hidden` and `verbose`") + .help("valid styles are `normal`, `short`, `hidden`, `verbose` and `tool-only`") .emit(); SuggestionKind::Normal }); diff --git a/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.rs b/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.rs index 50a6c816578..7d9e2576cae 100644 --- a/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.rs +++ b/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.rs @@ -735,6 +735,13 @@ struct SuggestionStyleVerbose { sub: Span, } +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code = "", style = "tool-only")] +struct SuggestionStyleToolOnly { + #[primary_span] + sub: Span, +} + #[derive(Subdiagnostic)] #[suggestion(parser_add_paren, code = "", style = "hidden", style = "normal")] //~^ ERROR specified multiple times diff --git a/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.stderr b/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.stderr index 4ae7ed34230..b76b7fdfcea 100644 --- a/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.stderr +++ b/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.stderr @@ -446,45 +446,45 @@ LL | #[suggestion_part(code = 3)] | ^^^^^^^^ error: specified multiple times - --> $DIR/subdiagnostic-derive.rs:739:61 + --> $DIR/subdiagnostic-derive.rs:746:61 | LL | #[suggestion(parser_add_paren, code = "", style = "hidden", style = "normal")] | ^^^^^^^^^^^^^^^^ | note: previously specified here - --> $DIR/subdiagnostic-derive.rs:739:43 + --> $DIR/subdiagnostic-derive.rs:746:43 | LL | #[suggestion(parser_add_paren, code = "", style = "hidden", style = "normal")] | ^^^^^^^^^^^^^^^^ error: specified multiple times - --> $DIR/subdiagnostic-derive.rs:748:50 + --> $DIR/subdiagnostic-derive.rs:755:50 | LL | #[suggestion_hidden(parser_add_paren, code = "", style = "normal")] | ^^^^^^^^^^^^^^^^ | note: previously specified here - --> $DIR/subdiagnostic-derive.rs:748:3 + --> $DIR/subdiagnostic-derive.rs:755:3 | LL | #[suggestion_hidden(parser_add_paren, code = "", style = "normal")] | ^^^^^^^^^^^^^^^^^ error: invalid suggestion style - --> $DIR/subdiagnostic-derive.rs:757:51 + --> $DIR/subdiagnostic-derive.rs:764:51 | LL | #[suggestion(parser_add_paren, code = "", style = "foo")] | ^^^^^ | - = help: valid styles are `normal`, `short`, `hidden` and `verbose` + = help: valid styles are `normal`, `short`, `hidden`, `verbose` and `tool-only` error: `#[suggestion(style = ...)]` is not a valid attribute - --> $DIR/subdiagnostic-derive.rs:765:43 + --> $DIR/subdiagnostic-derive.rs:772:43 | LL | #[suggestion(parser_add_paren, code = "", style = 42)] | ^^^^^^^^^^ error: `#[suggestion(style)]` is not a valid attribute - --> $DIR/subdiagnostic-derive.rs:773:43 + --> $DIR/subdiagnostic-derive.rs:780:43 | LL | #[suggestion(parser_add_paren, code = "", style)] | ^^^^^ @@ -492,7 +492,7 @@ LL | #[suggestion(parser_add_paren, code = "", style)] = help: a diagnostic slug must be the first argument to the attribute error: `#[suggestion(style(...))]` is not a valid attribute - --> $DIR/subdiagnostic-derive.rs:781:43 + --> $DIR/subdiagnostic-derive.rs:788:43 | LL | #[suggestion(parser_add_paren, code = "", style("foo"))] | ^^^^^^^^^^^^