From d351370fa12cd01b2dc67fd447a2d67b05dac3a1 Mon Sep 17 00:00:00 2001 From: "Zack M. Davis" Date: Sat, 14 Jul 2018 20:52:40 -0700 Subject: [PATCH] structured suggestion for renamed-and-removed-lints --- src/librustc/lint/context.rs | 12 ++++++---- src/librustc/lint/levels.rs | 24 ++++++++++++------- src/test/compile-fail/lint-removed-cmdline.rs | 2 +- src/test/compile-fail/lint-removed.rs | 2 +- src/test/compile-fail/lint-renamed-cmdline.rs | 2 +- src/test/compile-fail/lint-renamed.rs | 2 +- 6 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index c9874f510f7..2a44845b980 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -131,8 +131,8 @@ pub enum CheckLintNameResult<'a> { /// Lint doesn't exist NoLint, /// The lint is either renamed or removed. This is the warning - /// message. - Warning(String), + /// message, and an optional new name (`None` if removed). + Warning(String, Option), } impl LintStore { @@ -280,7 +280,7 @@ pub fn check_lint_name_cmdline(&self, level: Level) { let db = match self.check_lint_name(lint_name) { CheckLintNameResult::Ok(_) => None, - CheckLintNameResult::Warning(ref msg) => { + CheckLintNameResult::Warning(ref msg, _) => { Some(sess.struct_warn(msg)) }, CheckLintNameResult::NoLint => { @@ -313,12 +313,14 @@ pub fn check_lint_name(&self, lint_name: &str) -> CheckLintNameResult { match self.by_name.get(lint_name) { Some(&Renamed(ref new_name, _)) => { CheckLintNameResult::Warning( - format!("lint {} has been renamed to {}", lint_name, new_name) + format!("lint `{}` has been renamed to `{}`", lint_name, new_name), + Some(new_name.to_owned()) ) }, Some(&Removed(ref reason)) => { CheckLintNameResult::Warning( - format!("lint {} has been removed: {}", lint_name, reason) + format!("lint `{}` has been removed: `{}`", lint_name, reason), + None ) }, None => { diff --git a/src/librustc/lint/levels.rs b/src/librustc/lint/levels.rs index a1b84a7b716..b7b6aba970b 100644 --- a/src/librustc/lint/levels.rs +++ b/src/librustc/lint/levels.rs @@ -260,19 +260,27 @@ pub fn push(&mut self, attrs: &[ast::Attribute]) -> BuilderPush { _ if !self.warn_about_weird_lints => {} - CheckLintNameResult::Warning(ref msg) => { + CheckLintNameResult::Warning(msg, renamed) => { let lint = builtin::RENAMED_AND_REMOVED_LINTS; let (level, src) = self.sets.get_lint_level(lint, self.cur, Some(&specs), &sess); - lint::struct_lint_level(self.sess, - lint, - level, - src, - Some(li.span.into()), - msg) - .emit(); + let mut err = lint::struct_lint_level(self.sess, + lint, + level, + src, + Some(li.span.into()), + &msg); + if let Some(new_name) = renamed { + err.span_suggestion_with_applicability( + li.span, + "use the new name", + new_name, + Applicability::MachineApplicable + ); + } + err.emit(); } CheckLintNameResult::NoLint => { let lint = builtin::UNKNOWN_LINTS; diff --git a/src/test/compile-fail/lint-removed-cmdline.rs b/src/test/compile-fail/lint-removed-cmdline.rs index e1da5086612..09725b20146 100644 --- a/src/test/compile-fail/lint-removed-cmdline.rs +++ b/src/test/compile-fail/lint-removed-cmdline.rs @@ -13,7 +13,7 @@ // compile-flags:-D raw_pointer_derive -// error-pattern:lint raw_pointer_derive has been removed +// error-pattern:lint `raw_pointer_derive` has been removed // error-pattern:requested on the command line with `-D raw_pointer_derive` #![warn(unused)] diff --git a/src/test/compile-fail/lint-removed.rs b/src/test/compile-fail/lint-removed.rs index aa7f535aa64..4e53852008f 100644 --- a/src/test/compile-fail/lint-removed.rs +++ b/src/test/compile-fail/lint-removed.rs @@ -13,6 +13,6 @@ // default, and allowed in cargo dependency builds. // cc #30346 -#[deny(raw_pointer_derive)] //~ WARN raw_pointer_derive has been removed +#[deny(raw_pointer_derive)] //~ WARN `raw_pointer_derive` has been removed #[deny(unused_variables)] fn main() { let unused = (); } //~ ERROR unused diff --git a/src/test/compile-fail/lint-renamed-cmdline.rs b/src/test/compile-fail/lint-renamed-cmdline.rs index 3b352b384ff..a5246206d95 100644 --- a/src/test/compile-fail/lint-renamed-cmdline.rs +++ b/src/test/compile-fail/lint-renamed-cmdline.rs @@ -10,7 +10,7 @@ // compile-flags:-D unknown_features -// error-pattern:lint unknown_features has been renamed to unused_features +// error-pattern:lint `unknown_features` has been renamed to `unused_features` // error-pattern:requested on the command line with `-D unknown_features` // error-pattern:unused diff --git a/src/test/compile-fail/lint-renamed.rs b/src/test/compile-fail/lint-renamed.rs index 9e10ddf89ac..afe4aee7a1d 100644 --- a/src/test/compile-fail/lint-renamed.rs +++ b/src/test/compile-fail/lint-renamed.rs @@ -8,6 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#[deny(unknown_features)] //~ WARN lint unknown_features has been renamed to unused_features +#[deny(unknown_features)] //~ WARN lint `unknown_features` has been renamed to `unused_features` #[deny(unused)] fn main() { let unused = (); } //~ ERROR unused -- 2.44.0