Rollup merge of #120148 - trevyn:issue-117965, r=cjgillot

`single_use_lifetimes`: Don't suggest deleting lifetimes with bounds

Closes #117965

```
9 |     pub fn get<'b: 'a>(&'b self) -> &'a str {
  |                ^^       -- ...is used only here
  |                |
  |                this lifetime...
```

In this example, I think the `&'b self` can be replaced with the bound itself, yielding `&'a self`, but this would require a deeper refactor. Happy to do as a follow-on PR if desired.
This commit is contained in:
Matthias Krüger 2024-01-20 09:37:28 +01:00 committed by GitHub
commit b7c2ba71c8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 36 additions and 1 deletions

View File

@ -2567,8 +2567,9 @@ impl<'a: 'ast, 'ast, 'tcx> LateResolutionVisitor<'a, '_, 'ast, 'tcx> {
debug!(?param.ident, ?param.ident.span, ?use_span);
let elidable = matches!(use_ctxt, LifetimeCtxt::Ref);
let deletion_span =
if param.bounds.is_empty() { deletion_span() } else { None };
let deletion_span = deletion_span();
self.r.lint_buffer.buffer_lint_with_diagnostic(
lint::builtin::SINGLE_USE_LIFETIMES,
param.id,

View File

@ -0,0 +1,18 @@
#![deny(single_use_lifetimes)]
pub enum Data<'a> {
Borrowed(&'a str),
Owned(String),
}
impl<'a> Data<'a> {
pub fn get<'b: 'a>(&'b self) -> &'a str {
//~^ ERROR lifetime parameter `'b` only used once
match &self {
Self::Borrowed(val) => val,
Self::Owned(val) => &val,
}
}
}
fn main() {}

View File

@ -0,0 +1,16 @@
error: lifetime parameter `'b` only used once
--> $DIR/issue-117965.rs:9:16
|
LL | pub fn get<'b: 'a>(&'b self) -> &'a str {
| ^^ -- ...is used only here
| |
| this lifetime...
|
note: the lint level is defined here
--> $DIR/issue-117965.rs:1:9
|
LL | #![deny(single_use_lifetimes)]
| ^^^^^^^^^^^^^^^^^^^^
error: aborting due to 1 previous error