about summary refs log tree commit diff
diff options
context:
space:
mode:
authorXiretza <xiretza@xiretza.xyz>2022-10-20 21:17:14 +0200
committerXiretza <xiretza@xiretza.xyz>2022-10-26 15:04:09 +0200
commit20f2958b8af32dd08173272a7ede09aaa255c980 (patch)
treeb5b1a6ccb04f195519a69912baad8ec6e2609e2c
parent29334b951a6ab997d63d72a496454a0455ce5ee2 (diff)
downloadrust-20f2958b8af32dd08173272a7ede09aaa255c980.tar.gz
rust-20f2958b8af32dd08173272a7ede09aaa255c980.zip
Add "tool-only" suggestion style
-rw-r--r--compiler/rustc_macros/src/diagnostics/utils.rs13
-rw-r--r--src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.rs7
-rw-r--r--src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.stderr18
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
@@ -736,6 +736,13 @@ struct SuggestionStyleVerbose {
 }
 
 #[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
 //~| NOTE previously specified here
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"))]
    |                                           ^^^^^^^^^^^^