mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-15 09:27:25 +00:00
Auto merge of #6272 - camsteffen:unnecesary-lazy-eval-type, r=llogiq
Fix unnecessary_lazy_eval suggestion applicability changelog: Fix unnecessary_lazy_eval suggestion applicability when breaking type inference Fixes #6240
This commit is contained in:
commit
4bbef42c48
3 changed files with 52 additions and 1 deletions
|
@ -33,6 +33,17 @@ pub(super) fn lint<'tcx>(
|
|||
} else {
|
||||
"unnecessary closure used to substitute value for `Result::Err`"
|
||||
};
|
||||
let applicability = if body
|
||||
.params
|
||||
.iter()
|
||||
// bindings are checked to be unused above
|
||||
.all(|param| matches!(param.pat.kind, hir::PatKind::Binding(..) | hir::PatKind::Wild))
|
||||
{
|
||||
Applicability::MachineApplicable
|
||||
} else {
|
||||
// replacing the lambda may break type inference
|
||||
Applicability::MaybeIncorrect
|
||||
};
|
||||
|
||||
span_lint_and_sugg(
|
||||
cx,
|
||||
|
@ -46,7 +57,7 @@ pub(super) fn lint<'tcx>(
|
|||
simplify_using,
|
||||
snippet(cx, body_expr.span, ".."),
|
||||
),
|
||||
Applicability::MachineApplicable,
|
||||
applicability,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
18
tests/ui/unnecessary_lazy_eval_unfixable.rs
Normal file
18
tests/ui/unnecessary_lazy_eval_unfixable.rs
Normal file
|
@ -0,0 +1,18 @@
|
|||
#![warn(clippy::unnecessary_lazy_evaluations)]
|
||||
|
||||
struct Deep(Option<usize>);
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
struct SomeStruct {
|
||||
some_field: usize,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// fix will break type inference
|
||||
let _ = Ok(1).unwrap_or_else(|()| 2);
|
||||
mod e {
|
||||
pub struct E;
|
||||
}
|
||||
let _ = Ok(1).unwrap_or_else(|e::E| 2);
|
||||
let _ = Ok(1).unwrap_or_else(|SomeStruct { .. }| 2);
|
||||
}
|
22
tests/ui/unnecessary_lazy_eval_unfixable.stderr
Normal file
22
tests/ui/unnecessary_lazy_eval_unfixable.stderr
Normal file
|
@ -0,0 +1,22 @@
|
|||
error: unnecessary closure used to substitute value for `Result::Err`
|
||||
--> $DIR/unnecessary_lazy_eval_unfixable.rs:12:13
|
||||
|
|
||||
LL | let _ = Ok(1).unwrap_or_else(|()| 2);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Use `unwrap_or` instead: `Ok(1).unwrap_or(2)`
|
||||
|
|
||||
= note: `-D clippy::unnecessary-lazy-evaluations` implied by `-D warnings`
|
||||
|
||||
error: unnecessary closure used to substitute value for `Result::Err`
|
||||
--> $DIR/unnecessary_lazy_eval_unfixable.rs:16:13
|
||||
|
|
||||
LL | let _ = Ok(1).unwrap_or_else(|e::E| 2);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Use `unwrap_or` instead: `Ok(1).unwrap_or(2)`
|
||||
|
||||
error: unnecessary closure used to substitute value for `Result::Err`
|
||||
--> $DIR/unnecessary_lazy_eval_unfixable.rs:17:13
|
||||
|
|
||||
LL | let _ = Ok(1).unwrap_or_else(|SomeStruct { .. }| 2);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Use `unwrap_or` instead: `Ok(1).unwrap_or(2)`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
Loading…
Reference in a new issue