[unnecessary_lazy_eval
]: don't emit autofix suggestion if closure has return type
This commit is contained in:
parent
c40359d97a
commit
bb6516ace0
@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_then;
|
|||||||
use clippy_utils::source::snippet;
|
use clippy_utils::source::snippet;
|
||||||
use clippy_utils::ty::is_type_diagnostic_item;
|
use clippy_utils::ty::is_type_diagnostic_item;
|
||||||
use clippy_utils::{eager_or_lazy, is_from_proc_macro, usage};
|
use clippy_utils::{eager_or_lazy, is_from_proc_macro, usage};
|
||||||
|
use hir::FnRetTy;
|
||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
@ -27,7 +28,7 @@ pub(super) fn check<'tcx>(
|
|||||||
let is_bool = cx.typeck_results().expr_ty(recv).is_bool();
|
let is_bool = cx.typeck_results().expr_ty(recv).is_bool();
|
||||||
|
|
||||||
if is_option || is_result || is_bool {
|
if is_option || is_result || is_bool {
|
||||||
if let hir::ExprKind::Closure(&hir::Closure { body, .. }) = arg.kind {
|
if let hir::ExprKind::Closure(&hir::Closure { body, fn_decl, .. }) = arg.kind {
|
||||||
let body = cx.tcx.hir().body(body);
|
let body = cx.tcx.hir().body(body);
|
||||||
let body_expr = &body.value;
|
let body_expr = &body.value;
|
||||||
|
|
||||||
@ -48,7 +49,14 @@ pub(super) fn check<'tcx>(
|
|||||||
.iter()
|
.iter()
|
||||||
// bindings are checked to be unused above
|
// bindings are checked to be unused above
|
||||||
.all(|param| matches!(param.pat.kind, hir::PatKind::Binding(..) | hir::PatKind::Wild))
|
.all(|param| matches!(param.pat.kind, hir::PatKind::Binding(..) | hir::PatKind::Wild))
|
||||||
{
|
&& matches!(
|
||||||
|
fn_decl.output,
|
||||||
|
FnRetTy::DefaultReturn(_)
|
||||||
|
| FnRetTy::Return(hir::Ty {
|
||||||
|
kind: hir::TyKind::Infer,
|
||||||
|
..
|
||||||
|
})
|
||||||
|
) {
|
||||||
Applicability::MachineApplicable
|
Applicability::MachineApplicable
|
||||||
} else {
|
} else {
|
||||||
// replacing the lambda may break type inference
|
// replacing the lambda may break type inference
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#![allow(clippy::map_identity)]
|
#![allow(clippy::map_identity)]
|
||||||
#![allow(clippy::needless_borrow)]
|
#![allow(clippy::needless_borrow)]
|
||||||
#![allow(clippy::unnecessary_literal_unwrap)]
|
#![allow(clippy::unnecessary_literal_unwrap)]
|
||||||
|
#![allow(clippy::unit_arg)]
|
||||||
|
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
@ -76,6 +77,8 @@ fn main() {
|
|||||||
let _ = opt.ok_or(2);
|
let _ = opt.ok_or(2);
|
||||||
let _ = nested_tuple_opt.unwrap_or(Some((1, 2)));
|
let _ = nested_tuple_opt.unwrap_or(Some((1, 2)));
|
||||||
let _ = cond.then_some(astronomers_pi);
|
let _ = cond.then_some(astronomers_pi);
|
||||||
|
let _ = true.then_some({});
|
||||||
|
let _ = true.then_some({});
|
||||||
|
|
||||||
// Should lint - Builtin deref
|
// Should lint - Builtin deref
|
||||||
let r = &1;
|
let r = &1;
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#![allow(clippy::map_identity)]
|
#![allow(clippy::map_identity)]
|
||||||
#![allow(clippy::needless_borrow)]
|
#![allow(clippy::needless_borrow)]
|
||||||
#![allow(clippy::unnecessary_literal_unwrap)]
|
#![allow(clippy::unnecessary_literal_unwrap)]
|
||||||
|
#![allow(clippy::unit_arg)]
|
||||||
|
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
@ -76,6 +77,8 @@ fn main() {
|
|||||||
let _ = opt.ok_or_else(|| 2);
|
let _ = opt.ok_or_else(|| 2);
|
||||||
let _ = nested_tuple_opt.unwrap_or_else(|| Some((1, 2)));
|
let _ = nested_tuple_opt.unwrap_or_else(|| Some((1, 2)));
|
||||||
let _ = cond.then(|| astronomers_pi);
|
let _ = cond.then(|| astronomers_pi);
|
||||||
|
let _ = true.then(|| -> _ {});
|
||||||
|
let _ = true.then(|| {});
|
||||||
|
|
||||||
// Should lint - Builtin deref
|
// Should lint - Builtin deref
|
||||||
let r = &1;
|
let r = &1;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:68:13
|
--> $DIR/unnecessary_lazy_eval.rs:69:13
|
||||||
|
|
|
|
||||||
LL | let _ = opt.unwrap_or_else(|| 2);
|
LL | let _ = opt.unwrap_or_else(|| 2);
|
||||||
| ^^^^--------------------
|
| ^^^^--------------------
|
||||||
@ -10,7 +10,7 @@ LL | let _ = opt.unwrap_or_else(|| 2);
|
|||||||
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_lazy_evaluations)]`
|
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_lazy_evaluations)]`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:69:13
|
--> $DIR/unnecessary_lazy_eval.rs:70:13
|
||||||
|
|
|
|
||||||
LL | let _ = opt.unwrap_or_else(|| astronomers_pi);
|
LL | let _ = opt.unwrap_or_else(|| astronomers_pi);
|
||||||
| ^^^^---------------------------------
|
| ^^^^---------------------------------
|
||||||
@ -18,7 +18,7 @@ LL | let _ = opt.unwrap_or_else(|| astronomers_pi);
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(astronomers_pi)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(astronomers_pi)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:70:13
|
--> $DIR/unnecessary_lazy_eval.rs:71:13
|
||||||
|
|
|
|
||||||
LL | let _ = opt.unwrap_or_else(|| ext_str.some_field);
|
LL | let _ = opt.unwrap_or_else(|| ext_str.some_field);
|
||||||
| ^^^^-------------------------------------
|
| ^^^^-------------------------------------
|
||||||
@ -26,7 +26,7 @@ LL | let _ = opt.unwrap_or_else(|| ext_str.some_field);
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(ext_str.some_field)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(ext_str.some_field)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:72:13
|
--> $DIR/unnecessary_lazy_eval.rs:73:13
|
||||||
|
|
|
|
||||||
LL | let _ = opt.and_then(|_| ext_opt);
|
LL | let _ = opt.and_then(|_| ext_opt);
|
||||||
| ^^^^---------------------
|
| ^^^^---------------------
|
||||||
@ -34,7 +34,7 @@ LL | let _ = opt.and_then(|_| ext_opt);
|
|||||||
| help: use `and(..)` instead: `and(ext_opt)`
|
| help: use `and(..)` instead: `and(ext_opt)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:73:13
|
--> $DIR/unnecessary_lazy_eval.rs:74:13
|
||||||
|
|
|
|
||||||
LL | let _ = opt.or_else(|| ext_opt);
|
LL | let _ = opt.or_else(|| ext_opt);
|
||||||
| ^^^^-------------------
|
| ^^^^-------------------
|
||||||
@ -42,7 +42,7 @@ LL | let _ = opt.or_else(|| ext_opt);
|
|||||||
| help: use `or(..)` instead: `or(ext_opt)`
|
| help: use `or(..)` instead: `or(ext_opt)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:74:13
|
--> $DIR/unnecessary_lazy_eval.rs:75:13
|
||||||
|
|
|
|
||||||
LL | let _ = opt.or_else(|| None);
|
LL | let _ = opt.or_else(|| None);
|
||||||
| ^^^^----------------
|
| ^^^^----------------
|
||||||
@ -50,7 +50,7 @@ LL | let _ = opt.or_else(|| None);
|
|||||||
| help: use `or(..)` instead: `or(None)`
|
| help: use `or(..)` instead: `or(None)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:75:13
|
--> $DIR/unnecessary_lazy_eval.rs:76:13
|
||||||
|
|
|
|
||||||
LL | let _ = opt.get_or_insert_with(|| 2);
|
LL | let _ = opt.get_or_insert_with(|| 2);
|
||||||
| ^^^^------------------------
|
| ^^^^------------------------
|
||||||
@ -58,7 +58,7 @@ LL | let _ = opt.get_or_insert_with(|| 2);
|
|||||||
| help: use `get_or_insert(..)` instead: `get_or_insert(2)`
|
| help: use `get_or_insert(..)` instead: `get_or_insert(2)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:76:13
|
--> $DIR/unnecessary_lazy_eval.rs:77:13
|
||||||
|
|
|
|
||||||
LL | let _ = opt.ok_or_else(|| 2);
|
LL | let _ = opt.ok_or_else(|| 2);
|
||||||
| ^^^^----------------
|
| ^^^^----------------
|
||||||
@ -66,7 +66,7 @@ LL | let _ = opt.ok_or_else(|| 2);
|
|||||||
| help: use `ok_or(..)` instead: `ok_or(2)`
|
| help: use `ok_or(..)` instead: `ok_or(2)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:77:13
|
--> $DIR/unnecessary_lazy_eval.rs:78:13
|
||||||
|
|
|
|
||||||
LL | let _ = nested_tuple_opt.unwrap_or_else(|| Some((1, 2)));
|
LL | let _ = nested_tuple_opt.unwrap_or_else(|| Some((1, 2)));
|
||||||
| ^^^^^^^^^^^^^^^^^-------------------------------
|
| ^^^^^^^^^^^^^^^^^-------------------------------
|
||||||
@ -74,15 +74,31 @@ LL | let _ = nested_tuple_opt.unwrap_or_else(|| Some((1, 2)));
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(Some((1, 2)))`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(Some((1, 2)))`
|
||||||
|
|
||||||
error: unnecessary closure used with `bool::then`
|
error: unnecessary closure used with `bool::then`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:78:13
|
--> $DIR/unnecessary_lazy_eval.rs:79:13
|
||||||
|
|
|
|
||||||
LL | let _ = cond.then(|| astronomers_pi);
|
LL | let _ = cond.then(|| astronomers_pi);
|
||||||
| ^^^^^-----------------------
|
| ^^^^^-----------------------
|
||||||
| |
|
| |
|
||||||
| help: use `then_some(..)` instead: `then_some(astronomers_pi)`
|
| help: use `then_some(..)` instead: `then_some(astronomers_pi)`
|
||||||
|
|
||||||
|
error: unnecessary closure used with `bool::then`
|
||||||
|
--> $DIR/unnecessary_lazy_eval.rs:80:13
|
||||||
|
|
|
||||||
|
LL | let _ = true.then(|| -> _ {});
|
||||||
|
| ^^^^^----------------
|
||||||
|
| |
|
||||||
|
| help: use `then_some(..)` instead: `then_some({})`
|
||||||
|
|
||||||
|
error: unnecessary closure used with `bool::then`
|
||||||
|
--> $DIR/unnecessary_lazy_eval.rs:81:13
|
||||||
|
|
|
||||||
|
LL | let _ = true.then(|| {});
|
||||||
|
| ^^^^^-----------
|
||||||
|
| |
|
||||||
|
| help: use `then_some(..)` instead: `then_some({})`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:82:13
|
--> $DIR/unnecessary_lazy_eval.rs:85:13
|
||||||
|
|
|
|
||||||
LL | let _ = Some(1).unwrap_or_else(|| *r);
|
LL | let _ = Some(1).unwrap_or_else(|| *r);
|
||||||
| ^^^^^^^^---------------------
|
| ^^^^^^^^---------------------
|
||||||
@ -90,7 +106,7 @@ LL | let _ = Some(1).unwrap_or_else(|| *r);
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(*r)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(*r)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:84:13
|
--> $DIR/unnecessary_lazy_eval.rs:87:13
|
||||||
|
|
|
|
||||||
LL | let _ = Some(1).unwrap_or_else(|| *b);
|
LL | let _ = Some(1).unwrap_or_else(|| *b);
|
||||||
| ^^^^^^^^---------------------
|
| ^^^^^^^^---------------------
|
||||||
@ -98,7 +114,7 @@ LL | let _ = Some(1).unwrap_or_else(|| *b);
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(*b)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(*b)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:86:13
|
--> $DIR/unnecessary_lazy_eval.rs:89:13
|
||||||
|
|
|
|
||||||
LL | let _ = Some(1).as_ref().unwrap_or_else(|| &r);
|
LL | let _ = Some(1).as_ref().unwrap_or_else(|| &r);
|
||||||
| ^^^^^^^^^^^^^^^^^---------------------
|
| ^^^^^^^^^^^^^^^^^---------------------
|
||||||
@ -106,7 +122,7 @@ LL | let _ = Some(1).as_ref().unwrap_or_else(|| &r);
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(&r)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(&r)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:87:13
|
--> $DIR/unnecessary_lazy_eval.rs:90:13
|
||||||
|
|
|
|
||||||
LL | let _ = Some(1).as_ref().unwrap_or_else(|| &b);
|
LL | let _ = Some(1).as_ref().unwrap_or_else(|| &b);
|
||||||
| ^^^^^^^^^^^^^^^^^---------------------
|
| ^^^^^^^^^^^^^^^^^---------------------
|
||||||
@ -114,7 +130,7 @@ LL | let _ = Some(1).as_ref().unwrap_or_else(|| &b);
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(&b)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(&b)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:90:13
|
--> $DIR/unnecessary_lazy_eval.rs:93:13
|
||||||
|
|
|
|
||||||
LL | let _ = Some(10).unwrap_or_else(|| 2);
|
LL | let _ = Some(10).unwrap_or_else(|| 2);
|
||||||
| ^^^^^^^^^--------------------
|
| ^^^^^^^^^--------------------
|
||||||
@ -122,7 +138,7 @@ LL | let _ = Some(10).unwrap_or_else(|| 2);
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(2)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(2)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:91:13
|
--> $DIR/unnecessary_lazy_eval.rs:94:13
|
||||||
|
|
|
|
||||||
LL | let _ = Some(10).and_then(|_| ext_opt);
|
LL | let _ = Some(10).and_then(|_| ext_opt);
|
||||||
| ^^^^^^^^^---------------------
|
| ^^^^^^^^^---------------------
|
||||||
@ -130,7 +146,7 @@ LL | let _ = Some(10).and_then(|_| ext_opt);
|
|||||||
| help: use `and(..)` instead: `and(ext_opt)`
|
| help: use `and(..)` instead: `and(ext_opt)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:92:28
|
--> $DIR/unnecessary_lazy_eval.rs:95:28
|
||||||
|
|
|
|
||||||
LL | let _: Option<usize> = None.or_else(|| ext_opt);
|
LL | let _: Option<usize> = None.or_else(|| ext_opt);
|
||||||
| ^^^^^-------------------
|
| ^^^^^-------------------
|
||||||
@ -138,7 +154,7 @@ LL | let _: Option<usize> = None.or_else(|| ext_opt);
|
|||||||
| help: use `or(..)` instead: `or(ext_opt)`
|
| help: use `or(..)` instead: `or(ext_opt)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:93:13
|
--> $DIR/unnecessary_lazy_eval.rs:96:13
|
||||||
|
|
|
|
||||||
LL | let _ = None.get_or_insert_with(|| 2);
|
LL | let _ = None.get_or_insert_with(|| 2);
|
||||||
| ^^^^^------------------------
|
| ^^^^^------------------------
|
||||||
@ -146,7 +162,7 @@ LL | let _ = None.get_or_insert_with(|| 2);
|
|||||||
| help: use `get_or_insert(..)` instead: `get_or_insert(2)`
|
| help: use `get_or_insert(..)` instead: `get_or_insert(2)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:94:35
|
--> $DIR/unnecessary_lazy_eval.rs:97:35
|
||||||
|
|
|
|
||||||
LL | let _: Result<usize, usize> = None.ok_or_else(|| 2);
|
LL | let _: Result<usize, usize> = None.ok_or_else(|| 2);
|
||||||
| ^^^^^----------------
|
| ^^^^^----------------
|
||||||
@ -154,7 +170,7 @@ LL | let _: Result<usize, usize> = None.ok_or_else(|| 2);
|
|||||||
| help: use `ok_or(..)` instead: `ok_or(2)`
|
| help: use `ok_or(..)` instead: `ok_or(2)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:95:28
|
--> $DIR/unnecessary_lazy_eval.rs:98:28
|
||||||
|
|
|
|
||||||
LL | let _: Option<usize> = None.or_else(|| None);
|
LL | let _: Option<usize> = None.or_else(|| None);
|
||||||
| ^^^^^----------------
|
| ^^^^^----------------
|
||||||
@ -162,7 +178,7 @@ LL | let _: Option<usize> = None.or_else(|| None);
|
|||||||
| help: use `or(..)` instead: `or(None)`
|
| help: use `or(..)` instead: `or(None)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:98:13
|
--> $DIR/unnecessary_lazy_eval.rs:101:13
|
||||||
|
|
|
|
||||||
LL | let _ = deep.0.unwrap_or_else(|| 2);
|
LL | let _ = deep.0.unwrap_or_else(|| 2);
|
||||||
| ^^^^^^^--------------------
|
| ^^^^^^^--------------------
|
||||||
@ -170,7 +186,7 @@ LL | let _ = deep.0.unwrap_or_else(|| 2);
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(2)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(2)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:99:13
|
--> $DIR/unnecessary_lazy_eval.rs:102:13
|
||||||
|
|
|
|
||||||
LL | let _ = deep.0.and_then(|_| ext_opt);
|
LL | let _ = deep.0.and_then(|_| ext_opt);
|
||||||
| ^^^^^^^---------------------
|
| ^^^^^^^---------------------
|
||||||
@ -178,7 +194,7 @@ LL | let _ = deep.0.and_then(|_| ext_opt);
|
|||||||
| help: use `and(..)` instead: `and(ext_opt)`
|
| help: use `and(..)` instead: `and(ext_opt)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:100:13
|
--> $DIR/unnecessary_lazy_eval.rs:103:13
|
||||||
|
|
|
|
||||||
LL | let _ = deep.0.or_else(|| None);
|
LL | let _ = deep.0.or_else(|| None);
|
||||||
| ^^^^^^^----------------
|
| ^^^^^^^----------------
|
||||||
@ -186,7 +202,7 @@ LL | let _ = deep.0.or_else(|| None);
|
|||||||
| help: use `or(..)` instead: `or(None)`
|
| help: use `or(..)` instead: `or(None)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:101:13
|
--> $DIR/unnecessary_lazy_eval.rs:104:13
|
||||||
|
|
|
|
||||||
LL | let _ = deep.0.get_or_insert_with(|| 2);
|
LL | let _ = deep.0.get_or_insert_with(|| 2);
|
||||||
| ^^^^^^^------------------------
|
| ^^^^^^^------------------------
|
||||||
@ -194,7 +210,7 @@ LL | let _ = deep.0.get_or_insert_with(|| 2);
|
|||||||
| help: use `get_or_insert(..)` instead: `get_or_insert(2)`
|
| help: use `get_or_insert(..)` instead: `get_or_insert(2)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:102:13
|
--> $DIR/unnecessary_lazy_eval.rs:105:13
|
||||||
|
|
|
|
||||||
LL | let _ = deep.0.ok_or_else(|| 2);
|
LL | let _ = deep.0.ok_or_else(|| 2);
|
||||||
| ^^^^^^^----------------
|
| ^^^^^^^----------------
|
||||||
@ -202,7 +218,7 @@ LL | let _ = deep.0.ok_or_else(|| 2);
|
|||||||
| help: use `ok_or(..)` instead: `ok_or(2)`
|
| help: use `ok_or(..)` instead: `ok_or(2)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:132:28
|
--> $DIR/unnecessary_lazy_eval.rs:135:28
|
||||||
|
|
|
|
||||||
LL | let _: Option<usize> = None.or_else(|| Some(3));
|
LL | let _: Option<usize> = None.or_else(|| Some(3));
|
||||||
| ^^^^^-------------------
|
| ^^^^^-------------------
|
||||||
@ -210,7 +226,7 @@ LL | let _: Option<usize> = None.or_else(|| Some(3));
|
|||||||
| help: use `or(..)` instead: `or(Some(3))`
|
| help: use `or(..)` instead: `or(Some(3))`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:133:13
|
--> $DIR/unnecessary_lazy_eval.rs:136:13
|
||||||
|
|
|
|
||||||
LL | let _ = deep.0.or_else(|| Some(3));
|
LL | let _ = deep.0.or_else(|| Some(3));
|
||||||
| ^^^^^^^-------------------
|
| ^^^^^^^-------------------
|
||||||
@ -218,7 +234,7 @@ LL | let _ = deep.0.or_else(|| Some(3));
|
|||||||
| help: use `or(..)` instead: `or(Some(3))`
|
| help: use `or(..)` instead: `or(Some(3))`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Option::None`
|
error: unnecessary closure used to substitute value for `Option::None`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:134:13
|
--> $DIR/unnecessary_lazy_eval.rs:137:13
|
||||||
|
|
|
|
||||||
LL | let _ = opt.or_else(|| Some(3));
|
LL | let _ = opt.or_else(|| Some(3));
|
||||||
| ^^^^-------------------
|
| ^^^^-------------------
|
||||||
@ -226,7 +242,7 @@ LL | let _ = opt.or_else(|| Some(3));
|
|||||||
| help: use `or(..)` instead: `or(Some(3))`
|
| help: use `or(..)` instead: `or(Some(3))`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Result::Err`
|
error: unnecessary closure used to substitute value for `Result::Err`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:140:13
|
--> $DIR/unnecessary_lazy_eval.rs:143:13
|
||||||
|
|
|
|
||||||
LL | let _ = res2.unwrap_or_else(|_| 2);
|
LL | let _ = res2.unwrap_or_else(|_| 2);
|
||||||
| ^^^^^---------------------
|
| ^^^^^---------------------
|
||||||
@ -234,7 +250,7 @@ LL | let _ = res2.unwrap_or_else(|_| 2);
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(2)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(2)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Result::Err`
|
error: unnecessary closure used to substitute value for `Result::Err`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:141:13
|
--> $DIR/unnecessary_lazy_eval.rs:144:13
|
||||||
|
|
|
|
||||||
LL | let _ = res2.unwrap_or_else(|_| astronomers_pi);
|
LL | let _ = res2.unwrap_or_else(|_| astronomers_pi);
|
||||||
| ^^^^^----------------------------------
|
| ^^^^^----------------------------------
|
||||||
@ -242,7 +258,7 @@ LL | let _ = res2.unwrap_or_else(|_| astronomers_pi);
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(astronomers_pi)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(astronomers_pi)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Result::Err`
|
error: unnecessary closure used to substitute value for `Result::Err`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:142:13
|
--> $DIR/unnecessary_lazy_eval.rs:145:13
|
||||||
|
|
|
|
||||||
LL | let _ = res2.unwrap_or_else(|_| ext_str.some_field);
|
LL | let _ = res2.unwrap_or_else(|_| ext_str.some_field);
|
||||||
| ^^^^^--------------------------------------
|
| ^^^^^--------------------------------------
|
||||||
@ -250,7 +266,7 @@ LL | let _ = res2.unwrap_or_else(|_| ext_str.some_field);
|
|||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(ext_str.some_field)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(ext_str.some_field)`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Result::Err`
|
error: unnecessary closure used to substitute value for `Result::Err`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:164:35
|
--> $DIR/unnecessary_lazy_eval.rs:167:35
|
||||||
|
|
|
|
||||||
LL | let _: Result<usize, usize> = res.and_then(|_| Err(2));
|
LL | let _: Result<usize, usize> = res.and_then(|_| Err(2));
|
||||||
| ^^^^--------------------
|
| ^^^^--------------------
|
||||||
@ -258,7 +274,7 @@ LL | let _: Result<usize, usize> = res.and_then(|_| Err(2));
|
|||||||
| help: use `and(..)` instead: `and(Err(2))`
|
| help: use `and(..)` instead: `and(Err(2))`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Result::Err`
|
error: unnecessary closure used to substitute value for `Result::Err`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:165:35
|
--> $DIR/unnecessary_lazy_eval.rs:168:35
|
||||||
|
|
|
|
||||||
LL | let _: Result<usize, usize> = res.and_then(|_| Err(astronomers_pi));
|
LL | let _: Result<usize, usize> = res.and_then(|_| Err(astronomers_pi));
|
||||||
| ^^^^---------------------------------
|
| ^^^^---------------------------------
|
||||||
@ -266,7 +282,7 @@ LL | let _: Result<usize, usize> = res.and_then(|_| Err(astronomers_pi));
|
|||||||
| help: use `and(..)` instead: `and(Err(astronomers_pi))`
|
| help: use `and(..)` instead: `and(Err(astronomers_pi))`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Result::Err`
|
error: unnecessary closure used to substitute value for `Result::Err`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:166:35
|
--> $DIR/unnecessary_lazy_eval.rs:169:35
|
||||||
|
|
|
|
||||||
LL | let _: Result<usize, usize> = res.and_then(|_| Err(ext_str.some_field));
|
LL | let _: Result<usize, usize> = res.and_then(|_| Err(ext_str.some_field));
|
||||||
| ^^^^-------------------------------------
|
| ^^^^-------------------------------------
|
||||||
@ -274,7 +290,7 @@ LL | let _: Result<usize, usize> = res.and_then(|_| Err(ext_str.some_field))
|
|||||||
| help: use `and(..)` instead: `and(Err(ext_str.some_field))`
|
| help: use `and(..)` instead: `and(Err(ext_str.some_field))`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Result::Err`
|
error: unnecessary closure used to substitute value for `Result::Err`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:168:35
|
--> $DIR/unnecessary_lazy_eval.rs:171:35
|
||||||
|
|
|
|
||||||
LL | let _: Result<usize, usize> = res.or_else(|_| Ok(2));
|
LL | let _: Result<usize, usize> = res.or_else(|_| Ok(2));
|
||||||
| ^^^^------------------
|
| ^^^^------------------
|
||||||
@ -282,7 +298,7 @@ LL | let _: Result<usize, usize> = res.or_else(|_| Ok(2));
|
|||||||
| help: use `or(..)` instead: `or(Ok(2))`
|
| help: use `or(..)` instead: `or(Ok(2))`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Result::Err`
|
error: unnecessary closure used to substitute value for `Result::Err`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:169:35
|
--> $DIR/unnecessary_lazy_eval.rs:172:35
|
||||||
|
|
|
|
||||||
LL | let _: Result<usize, usize> = res.or_else(|_| Ok(astronomers_pi));
|
LL | let _: Result<usize, usize> = res.or_else(|_| Ok(astronomers_pi));
|
||||||
| ^^^^-------------------------------
|
| ^^^^-------------------------------
|
||||||
@ -290,7 +306,7 @@ LL | let _: Result<usize, usize> = res.or_else(|_| Ok(astronomers_pi));
|
|||||||
| help: use `or(..)` instead: `or(Ok(astronomers_pi))`
|
| help: use `or(..)` instead: `or(Ok(astronomers_pi))`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Result::Err`
|
error: unnecessary closure used to substitute value for `Result::Err`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:170:35
|
--> $DIR/unnecessary_lazy_eval.rs:173:35
|
||||||
|
|
|
|
||||||
LL | let _: Result<usize, usize> = res.or_else(|_| Ok(ext_str.some_field));
|
LL | let _: Result<usize, usize> = res.or_else(|_| Ok(ext_str.some_field));
|
||||||
| ^^^^-----------------------------------
|
| ^^^^-----------------------------------
|
||||||
@ -298,7 +314,7 @@ LL | let _: Result<usize, usize> = res.or_else(|_| Ok(ext_str.some_field));
|
|||||||
| help: use `or(..)` instead: `or(Ok(ext_str.some_field))`
|
| help: use `or(..)` instead: `or(Ok(ext_str.some_field))`
|
||||||
|
|
||||||
error: unnecessary closure used to substitute value for `Result::Err`
|
error: unnecessary closure used to substitute value for `Result::Err`
|
||||||
--> $DIR/unnecessary_lazy_eval.rs:171:35
|
--> $DIR/unnecessary_lazy_eval.rs:174:35
|
||||||
|
|
|
|
||||||
LL | let _: Result<usize, usize> = res.
|
LL | let _: Result<usize, usize> = res.
|
||||||
| ___________________________________^
|
| ___________________________________^
|
||||||
@ -312,5 +328,5 @@ LL | | or_else(|_| Ok(ext_str.some_field));
|
|||||||
| |
|
| |
|
||||||
| help: use `or(..)` instead: `or(Ok(ext_str.some_field))`
|
| help: use `or(..)` instead: `or(Ok(ext_str.some_field))`
|
||||||
|
|
||||||
error: aborting due to 38 previous errors
|
error: aborting due to 40 previous errors
|
||||||
|
|
||||||
|
@ -25,3 +25,8 @@ fn main() {
|
|||||||
let arr = [(Some(1),)];
|
let arr = [(Some(1),)];
|
||||||
Some(&0).and_then(|&i| arr[i].0);
|
Some(&0).and_then(|&i| arr[i].0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn issue11672() {
|
||||||
|
// Return type annotation helps type inference and removing it can break code
|
||||||
|
let _ = true.then(|| -> &[u8] { &[] });
|
||||||
|
}
|
||||||
|
@ -25,5 +25,13 @@ LL | let _ = Ok(1).unwrap_or_else(|SomeStruct { .. }| 2);
|
|||||||
| |
|
| |
|
||||||
| help: use `unwrap_or(..)` instead: `unwrap_or(2)`
|
| help: use `unwrap_or(..)` instead: `unwrap_or(2)`
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: unnecessary closure used with `bool::then`
|
||||||
|
--> $DIR/unnecessary_lazy_eval_unfixable.rs:31:13
|
||||||
|
|
|
||||||
|
LL | let _ = true.then(|| -> &[u8] { &[] });
|
||||||
|
| ^^^^^-------------------------
|
||||||
|
| |
|
||||||
|
| help: use `then_some(..)` instead: `then_some({ &[] })`
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user