about summary refs log tree commit diff
diff options
context:
space:
mode:
authorairt <airtial@gmail.com>2019-05-01 03:09:27 +0800
committerairt <airtial@gmail.com>2019-05-01 03:11:58 +0800
commitc3fde34fd53a6eed89dd30064b1985acf39f7f07 (patch)
tree1d654fac6bdc04569cb26e3d08b414a63be11f9a
parentbd0b75f6c3a8c147aa95a64877280abf1fc1b069 (diff)
downloadrust-c3fde34fd53a6eed89dd30064b1985acf39f7f07.tar.gz
rust-c3fde34fd53a6eed89dd30064b1985acf39f7f07.zip
fix suggestion for search_is_some
-rw-r--r--clippy_lints/src/methods/mod.rs14
1 files changed, 10 insertions, 4 deletions
diff --git a/clippy_lints/src/methods/mod.rs b/clippy_lints/src/methods/mod.rs
index 0b3a406bd76..83f7d2a1f9e 100644
--- a/clippy_lints/src/methods/mod.rs
+++ b/clippy_lints/src/methods/mod.rs
@@ -1977,10 +1977,16 @@ fn lint_search_is_some<'a, 'tcx>(
         if search_snippet.lines().count() <= 1 {
             // suggest `any(|x| ..)` instead of `any(|&x| ..)` for `find(|&x| ..).is_some()`
             let any_search_snippet =
-                if search_method == "find" && search_snippet.starts_with("|&") {
-                    Some(search_snippet.replacen('&', "", 1))
-                } else {
-                    None
+                if_chain! {
+                    if search_method == "find";
+                    if let hir::ExprKind::Closure(_, _, body_id, ..) = search_args[1].node;
+                    let closure_body = cx.tcx.hir().body(body_id);
+                    if let hir::PatKind::Ref(..) = closure_body.arguments[0].pat.node;
+                    then {
+                        Some(search_snippet.replacen('&', "", 1))
+                    } else {
+                        None
+                    }
                 };
             // add note if not multi-line
             span_note_and_lint(