about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--clippy_lints/src/lines_filter_map_ok.rs42
1 files changed, 22 insertions, 20 deletions
diff --git a/clippy_lints/src/lines_filter_map_ok.rs b/clippy_lints/src/lines_filter_map_ok.rs
index 1449357e25c..f12d042ec66 100644
--- a/clippy_lints/src/lines_filter_map_ok.rs
+++ b/clippy_lints/src/lines_filter_map_ok.rs
@@ -65,27 +65,29 @@ impl LateLintPass<'_> for LinesFilterMapOk {
             matches!(fm_method_str, "filter_map" | "flat_map" | "flatten") &&
             is_type_diagnostic_item(cx, cx.typeck_results().expr_ty_adjusted(fm_receiver), sym::IoLines)
         {
-            let lint = if let [fm_arg] = fm_args {
-                match &fm_arg.kind {
-                    // Detect `Result::ok`
-                    ExprKind::Path(qpath) =>
-                        cx.qpath_res(qpath, fm_arg.hir_id).opt_def_id().map(|did|
-                            match_def_path(cx, did, &paths::CORE_RESULT_OK_METHOD)).unwrap_or_default(),
-                    // Detect `|x| x.ok()`
-                    ExprKind::Closure(Closure { body, .. }) =>
-                        if let Body { params: [param], value, .. } = cx.tcx.hir().body(*body) &&
-                            let ExprKind::MethodCall(method, receiver, [], _) = value.kind &&
-                            path_to_local_id(receiver, param.pat.hir_id) &&
-                            let Some(method_did) = cx.typeck_results().type_dependent_def_id(value.hir_id)
-                        {
-                            is_diag_item_method(cx, method_did, sym::Result) && method.ident.as_str() == "ok"
-                        } else {
-                            false
-                        },
-                    _ => false,
+            let lint = match fm_args {
+                [] => fm_method_str == "flatten",
+                [fm_arg] => {
+                    match &fm_arg.kind {
+                        // Detect `Result::ok`
+                        ExprKind::Path(qpath) =>
+                            cx.qpath_res(qpath, fm_arg.hir_id).opt_def_id().map(|did|
+                                match_def_path(cx, did, &paths::CORE_RESULT_OK_METHOD)).unwrap_or_default(),
+                        // Detect `|x| x.ok()`
+                        ExprKind::Closure(Closure { body, .. }) =>
+                            if let Body { params: [param], value, .. } = cx.tcx.hir().body(*body) &&
+                                let ExprKind::MethodCall(method, receiver, [], _) = value.kind &&
+                                path_to_local_id(receiver, param.pat.hir_id) &&
+                                let Some(method_did) = cx.typeck_results().type_dependent_def_id(value.hir_id)
+                            {
+                                is_diag_item_method(cx, method_did, sym::Result) && method.ident.as_str() == "ok"
+                            } else {
+                                false
+                            },
+                        _ => false,
+                    }
                 }
-            } else {
-                fm_method_str == "flatten"
+                _ => false,
             };
 
             if lint {