diff options
| author | airt <airtial@gmail.com> | 2019-05-01 03:09:27 +0800 |
|---|---|---|
| committer | airt <airtial@gmail.com> | 2019-05-01 03:11:58 +0800 |
| commit | c3fde34fd53a6eed89dd30064b1985acf39f7f07 (patch) | |
| tree | 1d654fac6bdc04569cb26e3d08b414a63be11f9a | |
| parent | bd0b75f6c3a8c147aa95a64877280abf1fc1b069 (diff) | |
| download | rust-c3fde34fd53a6eed89dd30064b1985acf39f7f07.tar.gz rust-c3fde34fd53a6eed89dd30064b1985acf39f7f07.zip | |
fix suggestion for search_is_some
| -rw-r--r-- | clippy_lints/src/methods/mod.rs | 14 |
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( |
