Closed
Description
I've found an issue in the redundant_closure lint where it'll suggest a closure which won't actually compile.
I think what's happening is clippy
sees a closure that just calls a function, and because the input/output types match up it thinks the closure is redundant. However, when you get rid of the closure it fails because of lifetimes/HKT.
use std::path::Path;
fn redundant<P: AsRef<Path>>(path: P) {
let path = path.as_ref();
println!("{}", path.display());
}
fn use_it<F>(thunk: F)
where
F: FnOnce(&str),
{
thunk("/bin/bash");
}
fn main() {
use_it(|s| redundant(s));
// use_it(redundant); <- recommended code that doesn't compile
}
And rustc
gives the following compilation error:
error[E0631]: type mismatch in function arguments
--> src/main.rs:17:5
|
3 | fn redundant<P: AsRef<Path>>(path: P) {
| ------------------------------------- found signature of `fn(_) -> _`
...
17 | use_it(redundant); //<- recommended code that doesn't compile
| ^^^^^^ expected signature of `for<'r> fn(&'r str) -> _`
|
note: required by `use_it`
...
error[E0271]: type mismatch resolving `for<'r> <fn(_) {redundant::<_>} as std::ops::FnOnce<(&'r str,)>>::Output == ()`
--> src/main.rs:17:5
|
17 | use_it(redundant); //<- recommended code that doesn't compile
| ^^^^^^ expected bound lifetime parameter, found concrete lifetime
|
note: required by `use_it`
This may also be a simpler example for #1439.