diff --git a/compiler/rustc_lint_defs/src/lib.rs b/compiler/rustc_lint_defs/src/lib.rs index b3d98747dcfa2..98e3a7069c265 100644 --- a/compiler/rustc_lint_defs/src/lib.rs +++ b/compiler/rustc_lint_defs/src/lib.rs @@ -145,6 +145,11 @@ pub struct FutureIncompatibleInfo { /// The reason for the lint used by diagnostics to provide /// the right help message pub reason: FutureIncompatibilityReason, + /// Whether to explain the reason to the user. + /// + /// Set to false for lints that already include a more detailed + /// explanation. + pub explain_reason: bool, /// Information about a future breakage, which will /// be emitted in JSON messages to be displayed by Cargo /// for upstream deps @@ -185,6 +190,7 @@ impl FutureIncompatibleInfo { FutureIncompatibleInfo { reference: "", reason: FutureIncompatibilityReason::FutureReleaseError, + explain_reason: true, future_breakage: None, } } diff --git a/compiler/rustc_middle/src/lint.rs b/compiler/rustc_middle/src/lint.rs index 8180d853f6073..8d0fdf9128a51 100644 --- a/compiler/rustc_middle/src/lint.rs +++ b/compiler/rustc_middle/src/lint.rs @@ -398,9 +398,14 @@ pub fn struct_lint_level<'s, 'd>( it will become a hard error in a future release!" .to_owned() }; - let citation = format!("for more information, see {}", future_incompatible.reference); - err.warn(&explanation); - err.note(&citation); + if future_incompatible.explain_reason { + err.warn(&explanation); + } + if !future_incompatible.reference.is_empty() { + let citation = + format!("for more information, see {}", future_incompatible.reference); + err.note(&citation); + } } // Finally, run `decorate`. This function is also responsible for emitting the diagnostic.