Apply lint restrictions from renamed lints
Previously, if you denied the old name of a renamed lint, it would warn about using the new name, but otherwise do nothing. Now, it will behave the same as if you'd used the new name.
This commit is contained in:
parent
8a9f7862bc
commit
df156c1958
|
@ -321,17 +321,18 @@ impl<'s> LintLevelsBuilder<'s> {
|
|||
None
|
||||
};
|
||||
let name = meta_item.path.segments.last().expect("empty lint name").ident.name;
|
||||
match store.check_lint_name(&name.as_str(), tool_name) {
|
||||
let lint_result = store.check_lint_name(&name.as_str(), tool_name);
|
||||
match &lint_result {
|
||||
CheckLintNameResult::Ok(ids) => {
|
||||
let src = LintLevelSource::Node(name, li.span(), reason);
|
||||
for &id in ids {
|
||||
for &id in *ids {
|
||||
self.check_gated_lint(id, attr.span);
|
||||
self.insert_spec(&mut specs, id, (level, src));
|
||||
}
|
||||
}
|
||||
|
||||
CheckLintNameResult::Tool(result) => {
|
||||
match result {
|
||||
match *result {
|
||||
Ok(ids) => {
|
||||
let complete_name = &format!("{}::{}", tool_name.unwrap(), name);
|
||||
let src = LintLevelSource::Node(
|
||||
|
@ -343,7 +344,7 @@ impl<'s> LintLevelsBuilder<'s> {
|
|||
self.insert_spec(&mut specs, *id, (level, src));
|
||||
}
|
||||
}
|
||||
Err((Some(ids), new_lint_name)) => {
|
||||
Err((Some(ids), ref new_lint_name)) => {
|
||||
let lint = builtin::RENAMED_AND_REMOVED_LINTS;
|
||||
let (lvl, src) =
|
||||
self.sets.get_lint_level(lint, self.cur, Some(&specs), &sess);
|
||||
|
@ -392,21 +393,21 @@ impl<'s> LintLevelsBuilder<'s> {
|
|||
|
||||
CheckLintNameResult::Warning(msg, renamed) => {
|
||||
let lint = builtin::RENAMED_AND_REMOVED_LINTS;
|
||||
let (level, src) =
|
||||
let (renamed_lint_level, src) =
|
||||
self.sets.get_lint_level(lint, self.cur, Some(&specs), &sess);
|
||||
struct_lint_level(
|
||||
self.sess,
|
||||
lint,
|
||||
level,
|
||||
renamed_lint_level,
|
||||
src,
|
||||
Some(li.span().into()),
|
||||
|lint| {
|
||||
let mut err = lint.build(&msg);
|
||||
if let Some(new_name) = renamed {
|
||||
if let Some(new_name) = &renamed {
|
||||
err.span_suggestion(
|
||||
li.span(),
|
||||
"use the new name",
|
||||
new_name,
|
||||
new_name.to_string(),
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
|
@ -444,6 +445,22 @@ impl<'s> LintLevelsBuilder<'s> {
|
|||
);
|
||||
}
|
||||
}
|
||||
// If this lint was renamed, apply the new lint instead of ignoring the attribute.
|
||||
// This happens outside of the match because the new lint should be applied even if
|
||||
// we don't warn about the name change.
|
||||
if let CheckLintNameResult::Warning(_, Some(new_name)) = lint_result {
|
||||
// Ignore any errors or warnings that happen because the new name is inaccurate
|
||||
if let CheckLintNameResult::Ok(ids) =
|
||||
store.check_lint_name(&new_name, tool_name)
|
||||
{
|
||||
let src =
|
||||
LintLevelSource::Node(Symbol::intern(&new_name), li.span(), reason);
|
||||
for &id in ids {
|
||||
self.check_gated_lint(id, attr.span);
|
||||
self.insert_spec(&mut specs, id, (level, src));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// compile-flags: --crate-type lib
|
||||
#![deny(single_use_lifetime)]
|
||||
//~^ WARNING renamed
|
||||
//~| NOTE `#[warn(renamed_and_removed_lints)]` on by default
|
||||
//~| NOTE defined here
|
||||
fn _foo<'a>(_x: &'a u32) {}
|
||||
//~^ ERROR only used once
|
||||
//~| NOTE this lifetime
|
||||
//~| NOTE is used only here
|
|
@ -0,0 +1,28 @@
|
|||
warning: lint `single_use_lifetime` has been renamed to `single_use_lifetimes`
|
||||
--> $DIR/renamed-lints-still-apply.rs:2:9
|
||||
|
|
||||
LL | #![deny(single_use_lifetime)]
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `single_use_lifetimes`
|
||||
|
|
||||
= note: `#[warn(renamed_and_removed_lints)]` on by default
|
||||
|
||||
error: lifetime parameter `'a` only used once
|
||||
--> $DIR/renamed-lints-still-apply.rs:6:9
|
||||
|
|
||||
LL | fn _foo<'a>(_x: &'a u32) {}
|
||||
| ^^ -- ...is used only here
|
||||
| |
|
||||
| this lifetime...
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/renamed-lints-still-apply.rs:2:9
|
||||
|
|
||||
LL | #![deny(single_use_lifetime)]
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
help: elide the single-use lifetime
|
||||
|
|
||||
LL | fn _foo(_x: &u32) {}
|
||||
| -- --
|
||||
|
||||
error: aborting due to previous error; 1 warning emitted
|
||||
|
Loading…
Reference in New Issue