feat(search_is_some): Fix when the closure spans multiple lines (#15902)

Previously the program only fixed the code when the closure supplied to
the method contained only 1 line. This patch removes the restriction.

The code already works. This patch only removes the extra check that
causes the restriction. The test cases that can now be fixed are moved
into the files containing tests cases that can be fixed.

The unnecessary check has survived in the code this way.

- In Dec 2015, patch a6bd2d0622, pull request
rust-lang/rust-clippy#524. The lint was first added. The program did not
support fixing code automatically yet. So the suggested fix was printed
as a part of the diagnostic message. When the original code contained
multiple lines, the suggested fix was omitted in order to keep the
diagnostic message concise.

- In May 2019, patch bd0b75f6c3, pull request
rust-lang/rust-clippy#4049. Logic was added to strip the reference in
the closure when the suggested replacement method required it. Because
the fix was still only printed when the code contained a single line,
the new transformation was only done when the code contained a single
line.

- In Aug 2019, patch 945d4cf69f, pull request
rust-lang/rust-clippy#4454. The lint was updated to fix code
automatically. Because the fixed code had only been printed in the
diagnostic message for a single line, the fix was only added for a
single line.

- In Nov 2021, patch 092fe209a6, pull request
rust-lang/rust-clippy#7463. The logic for transforming the closure was
moved into another file. A comment was added saying that it was only
good for a single line because it had only been used for a single line.

changelog: [`search_is_some`] now fixes code spanning multiple lines
This commit is contained in:
Jason Newcomb 2025-10-28 09:39:01 +00:00 committed by GitHub
commit f144c6cc66
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 399 additions and 316 deletions

View file

@ -1,4 +1,4 @@
use clippy_utils::diagnostics::{span_lint_and_help, span_lint_and_sugg};
use clippy_utils::diagnostics::span_lint_and_sugg;
use clippy_utils::res::{MaybeDef, MaybeTypeckRes};
use clippy_utils::source::{snippet, snippet_with_applicability};
use clippy_utils::sugg::deref_closure_args;
@ -34,79 +34,67 @@ pub(super) fn check<'tcx>(
{
let msg = format!("called `{option_check_method}()` after searching an `Iterator` with `{search_method}`");
let search_snippet = snippet(cx, search_arg.span, "..");
if search_snippet.lines().count() <= 1 {
// suggest `any(|x| ..)` instead of `any(|&x| ..)` for `find(|&x| ..).is_some()`
// suggest `any(|..| *..)` instead of `any(|..| **..)` for `find(|..| **..).is_some()`
let mut applicability = Applicability::MachineApplicable;
let any_search_snippet = if search_method == sym::find
&& let ExprKind::Closure(&hir::Closure { body, .. }) = search_arg.kind
&& let closure_body = cx.tcx.hir_body(body)
&& let Some(closure_arg) = closure_body.params.first()
{
if let PatKind::Ref(..) = closure_arg.pat.kind {
Some(search_snippet.replacen('&', "", 1))
} else if let PatKind::Binding(..) = strip_pat_refs(closure_arg.pat).kind {
// `find()` provides a reference to the item, but `any` does not,
// so we should fix item usages for suggestion
if let Some(closure_sugg) = deref_closure_args(cx, search_arg) {
applicability = closure_sugg.applicability;
Some(closure_sugg.suggestion)
} else {
Some(search_snippet.to_string())
}
// suggest `any(|x| ..)` instead of `any(|&x| ..)` for `find(|&x| ..).is_some()`
// suggest `any(|..| *..)` instead of `any(|..| **..)` for `find(|..| **..).is_some()`
let mut applicability = Applicability::MachineApplicable;
let any_search_snippet = if search_method == sym::find
&& let ExprKind::Closure(&hir::Closure { body, .. }) = search_arg.kind
&& let closure_body = cx.tcx.hir_body(body)
&& let Some(closure_arg) = closure_body.params.first()
{
if let PatKind::Ref(..) = closure_arg.pat.kind {
Some(search_snippet.replacen('&', "", 1))
} else if let PatKind::Binding(..) = strip_pat_refs(closure_arg.pat).kind {
// `find()` provides a reference to the item, but `any` does not,
// so we should fix item usages for suggestion
if let Some(closure_sugg) = deref_closure_args(cx, search_arg) {
applicability = closure_sugg.applicability;
Some(closure_sugg.suggestion)
} else {
None
Some(search_snippet.to_string())
}
} else {
None
};
// add note if not multi-line
if is_some {
span_lint_and_sugg(
cx,
SEARCH_IS_SOME,
method_span.with_hi(expr.span.hi()),
msg,
"consider using",
format!(
"any({})",
any_search_snippet.as_ref().map_or(&*search_snippet, String::as_str)
),
applicability,
);
} else {
let iter = snippet(cx, search_recv.span, "..");
let sugg = if is_receiver_of_method_call(cx, expr) {
format!(
"(!{iter}.any({}))",
any_search_snippet.as_ref().map_or(&*search_snippet, String::as_str)
)
} else {
format!(
"!{iter}.any({})",
any_search_snippet.as_ref().map_or(&*search_snippet, String::as_str)
)
};
span_lint_and_sugg(
cx,
SEARCH_IS_SOME,
expr.span,
msg,
"consider using",
sugg,
applicability,
);
}
} else {
let hint = format!(
"this is more succinctly expressed by calling `any()`{}",
if option_check_method == "is_none" {
" with negation"
} else {
""
}
None
};
// add note if not multi-line
if is_some {
span_lint_and_sugg(
cx,
SEARCH_IS_SOME,
method_span.with_hi(expr.span.hi()),
msg,
"consider using",
format!(
"any({})",
any_search_snippet.as_ref().map_or(&*search_snippet, String::as_str)
),
applicability,
);
} else {
let iter = snippet(cx, search_recv.span, "..");
let sugg = if is_receiver_of_method_call(cx, expr) {
format!(
"(!{iter}.any({}))",
any_search_snippet.as_ref().map_or(&*search_snippet, String::as_str)
)
} else {
format!(
"!{iter}.any({})",
any_search_snippet.as_ref().map_or(&*search_snippet, String::as_str)
)
};
span_lint_and_sugg(
cx,
SEARCH_IS_SOME,
expr.span,
msg,
"consider using",
sugg,
applicability,
);
span_lint_and_help(cx, SEARCH_IS_SOME, expr.span, msg, None, hint);
}
}
// lint if `find()` is called by `String` or `&str`

View file

@ -765,7 +765,7 @@ pub struct DerefClosure {
/// such as explicit deref and borrowing cases.
/// Returns `None` if no such use cases have been triggered in closure body
///
/// note: this only works on single line immutable closures with exactly one input parameter.
/// note: This only works on immutable closures with exactly one input parameter.
pub fn deref_closure_args(cx: &LateContext<'_>, closure: &hir::Expr<'_>) -> Option<DerefClosure> {
if let ExprKind::Closure(&Closure {
fn_decl, def_id, body, ..

View file

@ -8,31 +8,6 @@ use option_helpers::IteratorFalsePositives;
//@no-rustfix
#[rustfmt::skip]
fn main() {
let v = vec![3, 2, 1, 0, -1, -2, -3];
let y = &&42;
// Check `find().is_some()`, multi-line case.
let _ = v.iter().find(|&x| {
//~^ search_is_some
*x < 0
}
).is_some();
// Check `position().is_some()`, multi-line case.
let _ = v.iter().position(|&x| {
//~^ search_is_some
x < 0
}
).is_some();
// Check `rposition().is_some()`, multi-line case.
let _ = v.iter().rposition(|&x| {
//~^ search_is_some
x < 0
}
).is_some();
// Check that we don't lint if the caller is not an `Iterator` or string
let falsepos = IteratorFalsePositives { foo: 0 };
let _ = falsepos.find().is_some();
@ -49,31 +24,6 @@ fn main() {
#[rustfmt::skip]
fn is_none() {
let v = vec![3, 2, 1, 0, -1, -2, -3];
let y = &&42;
// Check `find().is_none()`, multi-line case.
let _ = v.iter().find(|&x| {
//~^ search_is_some
*x < 0
}
).is_none();
// Check `position().is_none()`, multi-line case.
let _ = v.iter().position(|&x| {
//~^ search_is_some
x < 0
}
).is_none();
// Check `rposition().is_none()`, multi-line case.
let _ = v.iter().rposition(|&x| {
//~^ search_is_some
x < 0
}
).is_none();
// Check that we don't lint if the caller is not an `Iterator` or string
let falsepos = IteratorFalsePositives { foo: 0 };
let _ = falsepos.find().is_none();
@ -87,18 +37,3 @@ fn is_none() {
let _ = (0..1).find(some_closure).is_none();
//~^ search_is_some
}
#[allow(clippy::match_like_matches_macro)]
fn issue15102() {
let values = [None, Some(3)];
let has_even = values
//~^ search_is_some
.iter()
.find(|v| match v {
Some(x) if x % 2 == 0 => true,
_ => false,
})
.is_some();
println!("{has_even}");
}

View file

@ -1,109 +1,17 @@
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some.rs:16:13
|
LL | let _ = v.iter().find(|&x| {
| _____________^
LL | |
LL | | *x < 0
LL | | }
LL | | ).is_some();
| |______________________________^
|
= help: this is more succinctly expressed by calling `any()`
= note: `-D clippy::search-is-some` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::search_is_some)]`
error: called `is_some()` after searching an `Iterator` with `position`
--> tests/ui/search_is_some.rs:23:13
|
LL | let _ = v.iter().position(|&x| {
| _____________^
LL | |
LL | | x < 0
LL | | }
LL | | ).is_some();
| |______________________________^
|
= help: this is more succinctly expressed by calling `any()`
error: called `is_some()` after searching an `Iterator` with `rposition`
--> tests/ui/search_is_some.rs:30:13
|
LL | let _ = v.iter().rposition(|&x| {
| _____________^
LL | |
LL | | x < 0
LL | | }
LL | | ).is_some();
| |______________________________^
|
= help: this is more succinctly expressed by calling `any()`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some.rs:46:20
--> tests/ui/search_is_some.rs:21:20
|
LL | let _ = (0..1).find(some_closure).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(some_closure)`
|
= note: `-D clippy::search-is-some` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::search_is_some)]`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some.rs:57:13
|
LL | let _ = v.iter().find(|&x| {
| _____________^
LL | |
LL | | *x < 0
LL | | }
LL | | ).is_none();
| |______________________________^
|
= help: this is more succinctly expressed by calling `any()` with negation
error: called `is_none()` after searching an `Iterator` with `position`
--> tests/ui/search_is_some.rs:64:13
|
LL | let _ = v.iter().position(|&x| {
| _____________^
LL | |
LL | | x < 0
LL | | }
LL | | ).is_none();
| |______________________________^
|
= help: this is more succinctly expressed by calling `any()` with negation
error: called `is_none()` after searching an `Iterator` with `rposition`
--> tests/ui/search_is_some.rs:71:13
|
LL | let _ = v.iter().rposition(|&x| {
| _____________^
LL | |
LL | | x < 0
LL | | }
LL | | ).is_none();
| |______________________________^
|
= help: this is more succinctly expressed by calling `any()` with negation
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some.rs:87:13
--> tests/ui/search_is_some.rs:37:13
|
LL | let _ = (0..1).find(some_closure).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!(0..1).any(some_closure)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some.rs:94:20
|
LL | let has_even = values
| ____________________^
LL | |
LL | | .iter()
LL | | .find(|v| match v {
... |
LL | | })
LL | | .is_some();
| |__________________^
|
= help: this is more succinctly expressed by calling `any()`
error: aborting due to 9 previous errors
error: aborting due to 2 previous errors

View file

@ -24,14 +24,32 @@ fn main() {
let _ = !(1..3).any(|x| [1, 2, 3].contains(&x) || x == 0);
//~^ search_is_some
let _ = !(1..3).any(|x| [1, 2, 3].contains(&x) || x == 0 || [4, 5, 6].contains(&x) || x == -1);
// Check `find().is_none()`, multi-line case.
let _ = !v
//~^ search_is_some
.iter().any(|x| {
*x < 0 //
});
// Check `position().is_none()`, single-line case.
let _ = !v.iter().any(|&x| x < 0);
//~^ search_is_some
// Check `position().is_none()`, multi-line case.
let _ = !v
//~^ search_is_some
.iter().any(|&x| {
x < 0 //
});
// Check `rposition().is_none()`, single-line case.
let _ = !v.iter().any(|&x| x < 0);
//~^ search_is_some
// Check `rposition().is_none()`, multi-line case.
let _ = !v
//~^ search_is_some
.iter().any(|&x| {
x < 0 //
});
let s1 = String::from("hello world");
let s2 = String::from("world");

View file

@ -27,14 +27,38 @@ fn main() {
//~^ search_is_some
.find(|x| [1, 2, 3].contains(x) || *x == 0 || [4, 5, 6].contains(x) || *x == -1)
.is_none();
// Check `find().is_none()`, multi-line case.
let _ = v
//~^ search_is_some
.iter()
.find(|&x| {
*x < 0 //
})
.is_none();
// Check `position().is_none()`, single-line case.
let _ = v.iter().position(|&x| x < 0).is_none();
//~^ search_is_some
// Check `position().is_none()`, multi-line case.
let _ = v
//~^ search_is_some
.iter()
.position(|&x| {
x < 0 //
})
.is_none();
// Check `rposition().is_none()`, single-line case.
let _ = v.iter().rposition(|&x| x < 0).is_none();
//~^ search_is_some
// Check `rposition().is_none()`, multi-line case.
let _ = v
//~^ search_is_some
.iter()
.rposition(|&x| {
x < 0 //
})
.is_none();
let s1 = String::from("hello world");
let s2 = String::from("world");

View file

@ -59,92 +59,158 @@ LL | | .find(|x| [1, 2, 3].contains(x) || *x == 0 || [4, 5, 6].contains(
LL | | .is_none();
| |__________________^ help: consider using: `!(1..3).any(|x| [1, 2, 3].contains(&x) || x == 0 || [4, 5, 6].contains(&x) || x == -1)`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:31:13
|
LL | let _ = v
| _____________^
LL | |
LL | | .iter()
LL | | .find(|&x| {
LL | | *x < 0 //
LL | | })
LL | | .is_none();
| |__________________^
|
help: consider using
|
LL ~ let _ = !v
LL +
LL + .iter().any(|x| {
LL + *x < 0 //
LL ~ });
|
error: called `is_none()` after searching an `Iterator` with `position`
--> tests/ui/search_is_some_fixable_none.rs:32:13
--> tests/ui/search_is_some_fixable_none.rs:40:13
|
LL | let _ = v.iter().position(|&x| x < 0).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|&x| x < 0)`
error: called `is_none()` after searching an `Iterator` with `position`
--> tests/ui/search_is_some_fixable_none.rs:43:13
|
LL | let _ = v
| _____________^
LL | |
LL | | .iter()
LL | | .position(|&x| {
LL | | x < 0 //
LL | | })
LL | | .is_none();
| |__________________^
|
help: consider using
|
LL ~ let _ = !v
LL +
LL + .iter().any(|&x| {
LL + x < 0 //
LL ~ });
|
error: called `is_none()` after searching an `Iterator` with `rposition`
--> tests/ui/search_is_some_fixable_none.rs:36:13
--> tests/ui/search_is_some_fixable_none.rs:52:13
|
LL | let _ = v.iter().rposition(|&x| x < 0).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|&x| x < 0)`
error: called `is_none()` after searching an `Iterator` with `rposition`
--> tests/ui/search_is_some_fixable_none.rs:55:13
|
LL | let _ = v
| _____________^
LL | |
LL | | .iter()
LL | | .rposition(|&x| {
LL | | x < 0 //
LL | | })
LL | | .is_none();
| |__________________^
|
help: consider using
|
LL ~ let _ = !v
LL +
LL + .iter().any(|&x| {
LL + x < 0 //
LL ~ });
|
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:43:13
--> tests/ui/search_is_some_fixable_none.rs:67:13
|
LL | let _ = "hello world".find("world").is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!"hello world".contains("world")`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:45:13
--> tests/ui/search_is_some_fixable_none.rs:69:13
|
LL | let _ = "hello world".find(&s2).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!"hello world".contains(&s2)`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:47:13
--> tests/ui/search_is_some_fixable_none.rs:71:13
|
LL | let _ = "hello world".find(&s2[2..]).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!"hello world".contains(&s2[2..])`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:50:13
--> tests/ui/search_is_some_fixable_none.rs:74:13
|
LL | let _ = s1.find("world").is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s1.contains("world")`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:52:13
--> tests/ui/search_is_some_fixable_none.rs:76:13
|
LL | let _ = s1.find(&s2).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s1.contains(&s2)`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:54:13
--> tests/ui/search_is_some_fixable_none.rs:78:13
|
LL | let _ = s1.find(&s2[2..]).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s1.contains(&s2[2..])`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:57:13
--> tests/ui/search_is_some_fixable_none.rs:81:13
|
LL | let _ = s1[2..].find("world").is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s1[2..].contains("world")`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:59:13
--> tests/ui/search_is_some_fixable_none.rs:83:13
|
LL | let _ = s1[2..].find(&s2).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s1[2..].contains(&s2)`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:61:13
--> tests/ui/search_is_some_fixable_none.rs:85:13
|
LL | let _ = s1[2..].find(&s2[2..]).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s1[2..].contains(&s2[2..])`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:78:25
--> tests/ui/search_is_some_fixable_none.rs:102:25
|
LL | .filter(|c| filter_hand.iter().find(|cc| c == cc).is_none())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!filter_hand.iter().any(|cc| c == &cc)`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:95:30
--> tests/ui/search_is_some_fixable_none.rs:119:30
|
LL | .filter(|(c, _)| filter_hand.iter().find(|cc| c == *cc).is_none())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!filter_hand.iter().any(|cc| c == cc)`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:107:17
--> tests/ui/search_is_some_fixable_none.rs:131:17
|
LL | let _ = vfoo.iter().find(|v| v.foo == 1 && v.bar == 2).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!vfoo.iter().any(|v| v.foo == 1 && v.bar == 2)`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:111:17
--> tests/ui/search_is_some_fixable_none.rs:135:17
|
LL | let _ = vfoo
| _________________^
@ -162,55 +228,55 @@ LL ~ .iter().any(|(i, v)| *i == 42 && v.foo == 1 && v.bar == 2);
|
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:120:17
--> tests/ui/search_is_some_fixable_none.rs:144:17
|
LL | let _ = vfoo.iter().find(|a| a[0] == 42).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!vfoo.iter().any(|a| a[0] == 42)`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:127:17
--> tests/ui/search_is_some_fixable_none.rs:151:17
|
LL | let _ = vfoo.iter().find(|sub| sub[1..4].len() == 3).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!vfoo.iter().any(|sub| sub[1..4].len() == 3)`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:146:17
--> tests/ui/search_is_some_fixable_none.rs:170:17
|
LL | let _ = [ppx].iter().find(|ppp_x: &&&u32| please(**ppp_x)).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `![ppx].iter().any(|ppp_x: &&u32| please(ppp_x))`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:148:17
--> tests/ui/search_is_some_fixable_none.rs:172:17
|
LL | let _ = [String::from("Hey hey")].iter().find(|s| s.len() == 2).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `![String::from("Hey hey")].iter().any(|s| s.len() == 2)`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:152:17
--> tests/ui/search_is_some_fixable_none.rs:176:17
|
LL | let _ = v.iter().find(|x| deref_enough(**x)).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|x| deref_enough(*x))`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:154:17
--> tests/ui/search_is_some_fixable_none.rs:178:17
|
LL | let _ = v.iter().find(|x: &&u32| deref_enough(**x)).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|x: &u32| deref_enough(*x))`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:158:17
--> tests/ui/search_is_some_fixable_none.rs:182:17
|
LL | let _ = v.iter().find(|x| arg_no_deref(x)).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|x| arg_no_deref(&x))`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:161:17
--> tests/ui/search_is_some_fixable_none.rs:185:17
|
LL | let _ = v.iter().find(|x: &&u32| arg_no_deref(x)).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|x: &u32| arg_no_deref(&x))`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:182:17
--> tests/ui/search_is_some_fixable_none.rs:206:17
|
LL | let _ = vfoo
| _________________^
@ -228,25 +294,25 @@ LL ~ .iter().any(|v| v.inner_double.bar[0][0] == 2 && v.inner.bar[0]
|
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:199:17
--> tests/ui/search_is_some_fixable_none.rs:223:17
|
LL | let _ = vfoo.iter().find(|v| v.inner[0].bar == 2).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!vfoo.iter().any(|v| v.inner[0].bar == 2)`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:205:17
--> tests/ui/search_is_some_fixable_none.rs:229:17
|
LL | let _ = vfoo.iter().find(|x| (**x)[0] == 9).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!vfoo.iter().any(|x| (**x)[0] == 9)`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:219:17
--> tests/ui/search_is_some_fixable_none.rs:243:17
|
LL | let _ = vfoo.iter().find(|v| v.by_ref(&v.bar)).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!vfoo.iter().any(|v| v.by_ref(&v.bar))`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:224:17
--> tests/ui/search_is_some_fixable_none.rs:248:17
|
LL | let _ = [&(&1, 2), &(&3, 4), &(&5, 4)]
| _________________^
@ -264,106 +330,106 @@ LL ~ .iter().any(|&&(&x, ref y)| x == *y);
|
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:247:17
--> tests/ui/search_is_some_fixable_none.rs:271:17
|
LL | let _ = v.iter().find(|s| s[0].is_empty()).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|s| s[0].is_empty())`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:249:17
--> tests/ui/search_is_some_fixable_none.rs:273:17
|
LL | let _ = v.iter().find(|s| test_string_1(&s[0])).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|s| test_string_1(&s[0]))`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:259:17
--> tests/ui/search_is_some_fixable_none.rs:283:17
|
LL | let _ = v.iter().find(|fp| fp.field.is_power_of_two()).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|fp| fp.field.is_power_of_two())`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:261:17
--> tests/ui/search_is_some_fixable_none.rs:285:17
|
LL | let _ = v.iter().find(|fp| test_u32_1(fp.field)).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|fp| test_u32_1(fp.field))`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:263:17
--> tests/ui/search_is_some_fixable_none.rs:287:17
|
LL | let _ = v.iter().find(|fp| test_u32_2(*fp.field)).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|fp| test_u32_2(*fp.field))`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:280:17
--> tests/ui/search_is_some_fixable_none.rs:304:17
|
LL | let _ = v.iter().find(|x| **x == 42).is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|x| *x == 42)`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:282:17
--> tests/ui/search_is_some_fixable_none.rs:306:17
|
LL | Foo.bar(v.iter().find(|x| **x == 42).is_none());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!v.iter().any(|x| *x == 42)`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:288:9
--> tests/ui/search_is_some_fixable_none.rs:312:9
|
LL | v.iter().find(|x| **x == 42).is_none().then(computations);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!v.iter().any(|x| *x == 42))`
error: called `is_none()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_none.rs:294:9
--> tests/ui/search_is_some_fixable_none.rs:318:9
|
LL | v.iter().find(|x| **x == 42).is_none().then_some(0);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!v.iter().any(|x| *x == 42))`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:300:17
--> tests/ui/search_is_some_fixable_none.rs:324:17
|
LL | let _ = s.find("world").is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s.contains("world")`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:302:17
--> tests/ui/search_is_some_fixable_none.rs:326:17
|
LL | Foo.bar(s.find("world").is_none());
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s.contains("world")`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:305:17
--> tests/ui/search_is_some_fixable_none.rs:329:17
|
LL | let _ = s.find("world").is_none();
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s.contains("world")`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:307:17
--> tests/ui/search_is_some_fixable_none.rs:331:17
|
LL | Foo.bar(s.find("world").is_none());
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `!s.contains("world")`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:313:17
--> tests/ui/search_is_some_fixable_none.rs:337:17
|
LL | let _ = s.find("world").is_none().then(computations);
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!s.contains("world"))`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:316:17
--> tests/ui/search_is_some_fixable_none.rs:340:17
|
LL | let _ = s.find("world").is_none().then(computations);
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!s.contains("world"))`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:322:17
--> tests/ui/search_is_some_fixable_none.rs:346:17
|
LL | let _ = s.find("world").is_none().then_some(0);
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!s.contains("world"))`
error: called `is_none()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_none.rs:325:17
--> tests/ui/search_is_some_fixable_none.rs:349:17
|
LL | let _ = s.find("world").is_none().then_some(0);
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(!s.contains("world"))`
error: aborting due to 54 previous errors
error: aborting due to 57 previous errors

View file

@ -25,14 +25,35 @@ fn main() {
//~^ search_is_some
let _ = (1..3)
.any(|x| [1, 2, 3].contains(&x) || x == 0 || [4, 5, 6].contains(&x) || x == -1);
// Check `find().is_some()`, multi-line case.
let _ = v
.iter()
.any(|x| {
//~^ search_is_some
*x < 0
});
// Check `position().is_some()`, single-line case.
let _ = v.iter().any(|&x| x < 0);
//~^ search_is_some
// Check `position().is_some()`, multi-line case.
let _ = v
.iter()
.any(|&x| {
//~^ search_is_some
x < 0
});
// Check `rposition().is_some()`, single-line case.
let _ = v.iter().any(|&x| x < 0);
//~^ search_is_some
// Check `rposition().is_some()`, multi-line case.
let _ = v
.iter()
.any(|&x| {
//~^ search_is_some
x < 0
});
let s1 = String::from("hello world");
let s2 = String::from("world");
@ -290,9 +311,19 @@ mod issue9120 {
}
}
#[allow(clippy::match_like_matches_macro)]
fn issue15102() {
let values = [None, Some(3)];
let has_even = values.iter().any(|v| matches!(&v, Some(x) if x % 2 == 0));
//~^ search_is_some
println!("{has_even}");
let has_even = values
.iter()
.any(|v| match &v {
//~^ search_is_some
Some(x) if x % 2 == 0 => true,
_ => false,
});
println!("{has_even}");
}

View file

@ -27,14 +27,38 @@ fn main() {
.find(|x| [1, 2, 3].contains(x) || *x == 0 || [4, 5, 6].contains(x) || *x == -1)
//~^ search_is_some
.is_some();
// Check `find().is_some()`, multi-line case.
let _ = v
.iter()
.find(|&x| {
//~^ search_is_some
*x < 0
})
.is_some();
// Check `position().is_some()`, single-line case.
let _ = v.iter().position(|&x| x < 0).is_some();
//~^ search_is_some
// Check `position().is_some()`, multi-line case.
let _ = v
.iter()
.position(|&x| {
//~^ search_is_some
x < 0
})
.is_some();
// Check `rposition().is_some()`, single-line case.
let _ = v.iter().rposition(|&x| x < 0).is_some();
//~^ search_is_some
// Check `rposition().is_some()`, multi-line case.
let _ = v
.iter()
.rposition(|&x| {
//~^ search_is_some
x < 0
})
.is_some();
let s1 = String::from("hello world");
let s2 = String::from("world");
@ -298,9 +322,20 @@ mod issue9120 {
}
}
#[allow(clippy::match_like_matches_macro)]
fn issue15102() {
let values = [None, Some(3)];
let has_even = values.iter().find(|v| matches!(v, Some(x) if x % 2 == 0)).is_some();
//~^ search_is_some
println!("{has_even}");
let has_even = values
.iter()
.find(|v| match v {
//~^ search_is_some
Some(x) if x % 2 == 0 => true,
_ => false,
})
.is_some();
println!("{has_even}");
}

View file

@ -58,92 +58,149 @@ LL | |
LL | | .is_some();
| |__________________^ help: consider using: `any(|x| [1, 2, 3].contains(&x) || x == 0 || [4, 5, 6].contains(&x) || x == -1)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:33:10
|
LL | .find(|&x| {
| __________^
LL | |
LL | | *x < 0
LL | | })
LL | | .is_some();
| |__________________^
|
help: consider using
|
LL ~ .any(|x| {
LL +
LL + *x < 0
LL ~ });
|
error: called `is_some()` after searching an `Iterator` with `position`
--> tests/ui/search_is_some_fixable_some.rs:32:22
--> tests/ui/search_is_some_fixable_some.rs:40:22
|
LL | let _ = v.iter().position(|&x| x < 0).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|&x| x < 0)`
error: called `is_some()` after searching an `Iterator` with `position`
--> tests/ui/search_is_some_fixable_some.rs:45:10
|
LL | .position(|&x| {
| __________^
LL | |
LL | | x < 0
LL | | })
LL | | .is_some();
| |__________________^
|
help: consider using
|
LL ~ .any(|&x| {
LL +
LL + x < 0
LL ~ });
|
error: called `is_some()` after searching an `Iterator` with `rposition`
--> tests/ui/search_is_some_fixable_some.rs:36:22
--> tests/ui/search_is_some_fixable_some.rs:52:22
|
LL | let _ = v.iter().rposition(|&x| x < 0).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|&x| x < 0)`
error: called `is_some()` after searching an `Iterator` with `rposition`
--> tests/ui/search_is_some_fixable_some.rs:57:10
|
LL | .rposition(|&x| {
| __________^
LL | |
LL | | x < 0
LL | | })
LL | | .is_some();
| |__________________^
|
help: consider using
|
LL ~ .any(|&x| {
LL +
LL + x < 0
LL ~ });
|
error: called `is_some()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_some.rs:42:27
--> tests/ui/search_is_some_fixable_some.rs:66:27
|
LL | let _ = "hello world".find("world").is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `contains("world")`
error: called `is_some()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_some.rs:44:27
--> tests/ui/search_is_some_fixable_some.rs:68:27
|
LL | let _ = "hello world".find(&s2).is_some();
| ^^^^^^^^^^^^^^^^^^^ help: consider using: `contains(&s2)`
error: called `is_some()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_some.rs:46:27
--> tests/ui/search_is_some_fixable_some.rs:70:27
|
LL | let _ = "hello world".find(&s2[2..]).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `contains(&s2[2..])`
error: called `is_some()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_some.rs:49:16
--> tests/ui/search_is_some_fixable_some.rs:73:16
|
LL | let _ = s1.find("world").is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `contains("world")`
error: called `is_some()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_some.rs:51:16
--> tests/ui/search_is_some_fixable_some.rs:75:16
|
LL | let _ = s1.find(&s2).is_some();
| ^^^^^^^^^^^^^^^^^^^ help: consider using: `contains(&s2)`
error: called `is_some()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_some.rs:53:16
--> tests/ui/search_is_some_fixable_some.rs:77:16
|
LL | let _ = s1.find(&s2[2..]).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `contains(&s2[2..])`
error: called `is_some()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_some.rs:56:21
--> tests/ui/search_is_some_fixable_some.rs:80:21
|
LL | let _ = s1[2..].find("world").is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `contains("world")`
error: called `is_some()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_some.rs:58:21
--> tests/ui/search_is_some_fixable_some.rs:82:21
|
LL | let _ = s1[2..].find(&s2).is_some();
| ^^^^^^^^^^^^^^^^^^^ help: consider using: `contains(&s2)`
error: called `is_some()` after calling `find()` on a string
--> tests/ui/search_is_some_fixable_some.rs:60:21
--> tests/ui/search_is_some_fixable_some.rs:84:21
|
LL | let _ = s1[2..].find(&s2[2..]).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `contains(&s2[2..])`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:77:44
--> tests/ui/search_is_some_fixable_some.rs:101:44
|
LL | .filter(|c| filter_hand.iter().find(|cc| c == cc).is_some())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|cc| c == &cc)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:94:49
--> tests/ui/search_is_some_fixable_some.rs:118:49
|
LL | .filter(|(c, _)| filter_hand.iter().find(|cc| c == *cc).is_some())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|cc| c == cc)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:106:29
--> tests/ui/search_is_some_fixable_some.rs:130:29
|
LL | let _ = vfoo.iter().find(|v| v.foo == 1 && v.bar == 2).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|v| v.foo == 1 && v.bar == 2)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:112:14
--> tests/ui/search_is_some_fixable_some.rs:136:14
|
LL | .find(|(i, v)| *i == 42 && v.foo == 1 && v.bar == 2)
| ______________^
@ -152,55 +209,55 @@ LL | | .is_some();
| |______________________^ help: consider using: `any(|(i, v)| *i == 42 && v.foo == 1 && v.bar == 2)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:119:29
--> tests/ui/search_is_some_fixable_some.rs:143:29
|
LL | let _ = vfoo.iter().find(|a| a[0] == 42).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|a| a[0] == 42)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:126:29
--> tests/ui/search_is_some_fixable_some.rs:150:29
|
LL | let _ = vfoo.iter().find(|sub| sub[1..4].len() == 3).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|sub| sub[1..4].len() == 3)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:145:30
--> tests/ui/search_is_some_fixable_some.rs:169:30
|
LL | let _ = [ppx].iter().find(|ppp_x: &&&u32| please(**ppp_x)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|ppp_x: &&u32| please(ppp_x))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:147:50
--> tests/ui/search_is_some_fixable_some.rs:171:50
|
LL | let _ = [String::from("Hey hey")].iter().find(|s| s.len() == 2).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|s| s.len() == 2)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:151:26
--> tests/ui/search_is_some_fixable_some.rs:175:26
|
LL | let _ = v.iter().find(|x| deref_enough(**x)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|x| deref_enough(*x))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:153:26
--> tests/ui/search_is_some_fixable_some.rs:177:26
|
LL | let _ = v.iter().find(|x: &&u32| deref_enough(**x)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|x: &u32| deref_enough(*x))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:157:26
--> tests/ui/search_is_some_fixable_some.rs:181:26
|
LL | let _ = v.iter().find(|x| arg_no_deref(x)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|x| arg_no_deref(&x))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:160:26
--> tests/ui/search_is_some_fixable_some.rs:184:26
|
LL | let _ = v.iter().find(|x: &&u32| arg_no_deref(x)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|x: &u32| arg_no_deref(&x))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:183:14
--> tests/ui/search_is_some_fixable_some.rs:207:14
|
LL | .find(|v| v.inner_double.bar[0][0] == 2 && v.inner.bar[0] == 2)
| ______________^
@ -209,25 +266,25 @@ LL | | .is_some();
| |______________________^ help: consider using: `any(|v| v.inner_double.bar[0][0] == 2 && v.inner.bar[0] == 2)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:198:29
--> tests/ui/search_is_some_fixable_some.rs:222:29
|
LL | let _ = vfoo.iter().find(|v| v.inner[0].bar == 2).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|v| v.inner[0].bar == 2)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:204:29
--> tests/ui/search_is_some_fixable_some.rs:228:29
|
LL | let _ = vfoo.iter().find(|x| (**x)[0] == 9).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|x| (**x)[0] == 9)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:218:29
--> tests/ui/search_is_some_fixable_some.rs:242:29
|
LL | let _ = vfoo.iter().find(|v| v.by_ref(&v.bar)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|v| v.by_ref(&v.bar))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:225:14
--> tests/ui/search_is_some_fixable_some.rs:249:14
|
LL | .find(|&&&(&x, ref y)| x == *y)
| ______________^
@ -236,64 +293,85 @@ LL | | .is_some();
| |______________________^ help: consider using: `any(|&&(&x, ref y)| x == *y)`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:246:26
--> tests/ui/search_is_some_fixable_some.rs:270:26
|
LL | let _ = v.iter().find(|s| s[0].is_empty()).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|s| s[0].is_empty())`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:248:26
--> tests/ui/search_is_some_fixable_some.rs:272:26
|
LL | let _ = v.iter().find(|s| test_string_1(&s[0])).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|s| test_string_1(&s[0]))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:258:26
--> tests/ui/search_is_some_fixable_some.rs:282:26
|
LL | let _ = v.iter().find(|fp| fp.field.is_power_of_two()).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|fp| fp.field.is_power_of_two())`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:260:26
--> tests/ui/search_is_some_fixable_some.rs:284:26
|
LL | let _ = v.iter().find(|fp| test_u32_1(fp.field)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|fp| test_u32_1(fp.field))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:262:26
--> tests/ui/search_is_some_fixable_some.rs:286:26
|
LL | let _ = v.iter().find(|fp| test_u32_2(*fp.field)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|fp| test_u32_2(*fp.field))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:278:18
--> tests/ui/search_is_some_fixable_some.rs:302:18
|
LL | v.iter().find(|x: &&u32| func(x)).is_some()
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|x: &u32| func(&x))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:288:26
--> tests/ui/search_is_some_fixable_some.rs:312:26
|
LL | let _ = v.iter().find(|x: &&u32| arg_no_deref_impl(x)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|x: &u32| arg_no_deref_impl(&x))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:292:26
--> tests/ui/search_is_some_fixable_some.rs:316:26
|
LL | let _ = v.iter().find(|x: &&u32| arg_no_deref_dyn(x)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|x: &u32| arg_no_deref_dyn(&x))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:296:26
--> tests/ui/search_is_some_fixable_some.rs:320:26
|
LL | let _ = v.iter().find(|x: &&u32| (*arg_no_deref_dyn)(x)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|x: &u32| (*arg_no_deref_dyn)(&x))`
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:303:34
--> tests/ui/search_is_some_fixable_some.rs:328:34
|
LL | let has_even = values.iter().find(|v| matches!(v, Some(x) if x % 2 == 0)).is_some();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `any(|v| matches!(&v, Some(x) if x % 2 == 0))`
error: aborting due to 47 previous errors
error: called `is_some()` after searching an `Iterator` with `find`
--> tests/ui/search_is_some_fixable_some.rs:334:10
|
LL | .find(|v| match v {
| __________^
LL | |
LL | | Some(x) if x % 2 == 0 => true,
LL | | _ => false,
LL | | })
LL | | .is_some();
| |__________________^
|
help: consider using
|
LL ~ .any(|v| match &v {
LL +
LL + Some(x) if x % 2 == 0 => true,
LL + _ => false,
LL ~ });
|
error: aborting due to 51 previous errors