1
Fork 0

Split back out unused_lifetimes -> redundant_lifetimes

This commit is contained in:
Michael Goulet 2023-12-16 01:58:26 +00:00
parent ee78eab62b
commit a9e262a32d
12 changed files with 52 additions and 26 deletions

View file

@ -2118,8 +2118,8 @@ fn lint_redundant_lifetimes<'tcx>(
&& outlives_env.free_region_map().sub_free_regions(tcx, victim, candidate) && outlives_env.free_region_map().sub_free_regions(tcx, victim, candidate)
{ {
shadowed.insert(victim); shadowed.insert(victim);
tcx.emit_spanned_lint( tcx.emit_node_span_lint(
rustc_lint_defs::builtin::UNUSED_LIFETIMES, rustc_lint_defs::builtin::REDUNDANT_LIFETIMES,
tcx.local_def_id_to_hir_id(def_id.expect_local()), tcx.local_def_id_to_hir_id(def_id.expect_local()),
tcx.def_span(def_id), tcx.def_span(def_id),
RedundantLifetimeArgsLint { candidate, victim }, RedundantLifetimeArgsLint { candidate, victim },

View file

@ -79,6 +79,7 @@ declare_lint_pass! {
PROC_MACRO_BACK_COMPAT, PROC_MACRO_BACK_COMPAT,
PROC_MACRO_DERIVE_RESOLUTION_FALLBACK, PROC_MACRO_DERIVE_RESOLUTION_FALLBACK,
PUB_USE_OF_PRIVATE_EXTERN_CRATE, PUB_USE_OF_PRIVATE_EXTERN_CRATE,
REDUNDANT_LIFETIMES,
REFINING_IMPL_TRAIT_INTERNAL, REFINING_IMPL_TRAIT_INTERNAL,
REFINING_IMPL_TRAIT_REACHABLE, REFINING_IMPL_TRAIT_REACHABLE,
RENAMED_AND_REMOVED_LINTS, RENAMED_AND_REMOVED_LINTS,
@ -1694,6 +1695,27 @@ declare_lint! {
/// #[deny(unused_lifetimes)] /// #[deny(unused_lifetimes)]
/// ///
/// pub fn foo<'a>() {} /// pub fn foo<'a>() {}
/// ```
///
/// {{produces}}
///
/// ### Explanation
///
/// Unused lifetime parameters may signal a mistake or unfinished code.
/// Consider removing the parameter.
pub UNUSED_LIFETIMES,
Allow,
"detects lifetime parameters that are never used"
}
declare_lint! {
/// The `redundant_lifetimes` lint detects lifetime parameters that are
/// redundant because they are equal to another named lifetime.
///
/// ### Example
///
/// ```rust,compile_fail
/// #[deny(redundant_lifetimes)]
/// ///
/// // `'a = 'static`, so all usages of `'a` can be replaced with `'static` /// // `'a = 'static`, so all usages of `'a` can be replaced with `'static`
/// pub fn bar<'a: 'static>() {} /// pub fn bar<'a: 'static>() {}
@ -1708,9 +1730,9 @@ declare_lint! {
/// ///
/// Unused lifetime parameters may signal a mistake or unfinished code. /// Unused lifetime parameters may signal a mistake or unfinished code.
/// Consider removing the parameter. /// Consider removing the parameter.
pub UNUSED_LIFETIMES, pub REDUNDANT_LIFETIMES,
Allow, Allow,
"detects lifetime parameters that are never used" "detects lifetime parameters that are redundant because they are equal to some other named lifetime"
} }
declare_lint! { declare_lint! {

View file

@ -1,4 +1,4 @@
#![warn(unused_lifetimes)] #![warn(unused_lifetimes, redundant_lifetimes)]
pub trait X { pub trait X {
type Y<'a: 'static>; //~ WARN unnecessary lifetime parameter `'a` type Y<'a: 'static>; //~ WARN unnecessary lifetime parameter `'a`

View file

@ -65,10 +65,10 @@ LL | type Y<'a: 'static>;
| |
= note: you can use the `'static` lifetime directly, in place of `'a` = note: you can use the `'static` lifetime directly, in place of `'a`
note: the lint level is defined here note: the lint level is defined here
--> $DIR/unsatisfied-item-lifetime-bound.rs:1:9 --> $DIR/unsatisfied-item-lifetime-bound.rs:1:27
| |
LL | #![warn(unused_lifetimes)] LL | #![warn(unused_lifetimes, redundant_lifetimes)]
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
error: aborting due to 4 previous errors; 1 warning emitted error: aborting due to 4 previous errors; 1 warning emitted

View file

@ -8,7 +8,7 @@
// //
// 'a : 'b // 'a : 'b
#![warn(unused_lifetimes)] #![warn(redundant_lifetimes)]
fn test<'a,'b>(x: &'a i32) -> &'b i32 //~ WARN unnecessary lifetime parameter `'a` fn test<'a,'b>(x: &'a i32) -> &'b i32 //~ WARN unnecessary lifetime parameter `'a`
where 'a: 'static where 'a: 'static

View file

@ -8,8 +8,8 @@ LL | fn test<'a,'b>(x: &'a i32) -> &'b i32
note: the lint level is defined here note: the lint level is defined here
--> $DIR/regions-free-region-outlives-static-outlives-free-region.rs:11:9 --> $DIR/regions-free-region-outlives-static-outlives-free-region.rs:11:9
| |
LL | #![warn(unused_lifetimes)] LL | #![warn(redundant_lifetimes)]
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
warning: 1 warning emitted warning: 1 warning emitted

View file

@ -1,6 +1,6 @@
//@ run-pass //@ run-pass
#![warn(unused_lifetimes)] #![warn(redundant_lifetimes)]
fn invariant_id<'a,'b>(t: &'b mut &'static ()) -> &'b mut &'a () fn invariant_id<'a,'b>(t: &'b mut &'static ()) -> &'b mut &'a ()
//~^ WARN unnecessary lifetime parameter `'a` //~^ WARN unnecessary lifetime parameter `'a`

View file

@ -8,8 +8,8 @@ LL | fn invariant_id<'a,'b>(t: &'b mut &'static ()) -> &'b mut &'a ()
note: the lint level is defined here note: the lint level is defined here
--> $DIR/regions-static-bound-rpass.rs:3:9 --> $DIR/regions-static-bound-rpass.rs:3:9
| |
LL | #![warn(unused_lifetimes)] LL | #![warn(redundant_lifetimes)]
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
warning: unnecessary lifetime parameter `'a` warning: unnecessary lifetime parameter `'a`
--> $DIR/regions-static-bound-rpass.rs:9:14 --> $DIR/regions-static-bound-rpass.rs:9:14

View file

@ -1,4 +1,4 @@
#![warn(unused_lifetimes)] #![warn(unused_lifetimes, redundant_lifetimes)]
fn static_id<'a,'b>(t: &'a ()) -> &'static () where 'a: 'static { t } fn static_id<'a,'b>(t: &'a ()) -> &'static () where 'a: 'static { t }
//~^ WARN unnecessary lifetime parameter `'a` //~^ WARN unnecessary lifetime parameter `'a`

View file

@ -9,7 +9,7 @@ LL | fn static_id<'a,'b>(t: &'a ()) -> &'static () where 'a: 'static { t }
note: the lint level is defined here note: the lint level is defined here
--> $DIR/regions-static-bound.rs:1:9 --> $DIR/regions-static-bound.rs:1:9
| |
LL | #![warn(unused_lifetimes)] LL | #![warn(unused_lifetimes, redundant_lifetimes)]
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
warning: unnecessary lifetime parameter `'a` warning: unnecessary lifetime parameter `'a`
@ -19,6 +19,11 @@ LL | fn static_id<'a,'b>(t: &'a ()) -> &'static () where 'a: 'static { t }
| ^^ | ^^
| |
= note: you can use the `'static` lifetime directly, in place of `'a` = note: you can use the `'static` lifetime directly, in place of `'a`
note: the lint level is defined here
--> $DIR/regions-static-bound.rs:1:27
|
LL | #![warn(unused_lifetimes, redundant_lifetimes)]
| ^^^^^^^^^^^^^^^^^^^
warning: unnecessary lifetime parameter `'a` warning: unnecessary lifetime parameter `'a`
--> $DIR/regions-static-bound.rs:7:23 --> $DIR/regions-static-bound.rs:7:23

View file

@ -1,5 +1,4 @@
#![allow(unused)] #![deny(redundant_lifetimes)]
#![deny(unused_lifetimes)]
fn a<'a, 'b>(x: &'a &'b &'a ()) {} //~ ERROR unnecessary lifetime parameter `'b` fn a<'a, 'b>(x: &'a &'b &'a ()) {} //~ ERROR unnecessary lifetime parameter `'b`

View file

@ -1,18 +1,18 @@
error: unnecessary lifetime parameter `'b` error: unnecessary lifetime parameter `'b`
--> $DIR/transitively-redundant-lifetimes.rs:4:10 --> $DIR/transitively-redundant-lifetimes.rs:3:10
| |
LL | fn a<'a, 'b>(x: &'a &'b &'a ()) {} LL | fn a<'a, 'b>(x: &'a &'b &'a ()) {}
| ^^ | ^^
| |
= note: you can use the `'a` lifetime directly, in place of `'b` = note: you can use the `'a` lifetime directly, in place of `'b`
note: the lint level is defined here note: the lint level is defined here
--> $DIR/transitively-redundant-lifetimes.rs:2:9 --> $DIR/transitively-redundant-lifetimes.rs:1:9
| |
LL | #![deny(unused_lifetimes)] LL | #![deny(redundant_lifetimes)]
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
error: unnecessary lifetime parameter `'b` error: unnecessary lifetime parameter `'b`
--> $DIR/transitively-redundant-lifetimes.rs:6:14 --> $DIR/transitively-redundant-lifetimes.rs:5:14
| |
LL | fn b<'a: 'b, 'b: 'a>() {} LL | fn b<'a: 'b, 'b: 'a>() {}
| ^^ | ^^
@ -20,7 +20,7 @@ LL | fn b<'a: 'b, 'b: 'a>() {}
= note: you can use the `'a` lifetime directly, in place of `'b` = note: you can use the `'a` lifetime directly, in place of `'b`
error: unnecessary lifetime parameter `'a` error: unnecessary lifetime parameter `'a`
--> $DIR/transitively-redundant-lifetimes.rs:9:6 --> $DIR/transitively-redundant-lifetimes.rs:8:6
| |
LL | fn c<'a>(_: Foo<&'a ()>) {} LL | fn c<'a>(_: Foo<&'a ()>) {}
| ^^ | ^^
@ -28,7 +28,7 @@ LL | fn c<'a>(_: Foo<&'a ()>) {}
= note: you can use the `'static` lifetime directly, in place of `'a` = note: you can use the `'static` lifetime directly, in place of `'a`
error: unnecessary lifetime parameter `'a` error: unnecessary lifetime parameter `'a`
--> $DIR/transitively-redundant-lifetimes.rs:19:6 --> $DIR/transitively-redundant-lifetimes.rs:18:6
| |
LL | impl<'a: 'static> Tr<'a> for () {} LL | impl<'a: 'static> Tr<'a> for () {}
| ^^ | ^^
@ -36,7 +36,7 @@ LL | impl<'a: 'static> Tr<'a> for () {}
= note: you can use the `'static` lifetime directly, in place of `'a` = note: you can use the `'static` lifetime directly, in place of `'a`
error: unnecessary lifetime parameter `'b` error: unnecessary lifetime parameter `'b`
--> $DIR/transitively-redundant-lifetimes.rs:13:10 --> $DIR/transitively-redundant-lifetimes.rs:12:10
| |
LL | fn d<'b: 'a>(&'b self) {} LL | fn d<'b: 'a>(&'b self) {}
| ^^ | ^^