From 8a29f650c0e05d9ff7dd668a5355c894223f8da5 Mon Sep 17 00:00:00 2001 From: dswij Date: Sat, 14 Aug 2021 17:43:28 +0800 Subject: [PATCH] Check `if let` expr usage in `manual_flatten` `manual_flatten` should not trigger when match expression in `if let` is going to be used. --- clippy_lints/src/loops/manual_flatten.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/clippy_lints/src/loops/manual_flatten.rs b/clippy_lints/src/loops/manual_flatten.rs index 64ff7574f86b..499f1a36d2ad 100644 --- a/clippy_lints/src/loops/manual_flatten.rs +++ b/clippy_lints/src/loops/manual_flatten.rs @@ -1,6 +1,7 @@ use super::utils::make_iterator_snippet; use super::MANUAL_FLATTEN; use clippy_utils::diagnostics::span_lint_and_then; +use clippy_utils::visitors::LocalUsedVisitor; use clippy_utils::{is_lang_ctor, path_to_local_id}; use if_chain::if_chain; use rustc_errors::Applicability; @@ -47,6 +48,9 @@ pub(super) fn check<'tcx>( let some_ctor = is_lang_ctor(cx, qpath, OptionSome); let ok_ctor = is_lang_ctor(cx, qpath, ResultOk); if some_ctor || ok_ctor; + // Ensure epxr in `if let` is not used afterwards + let mut used_visitor = LocalUsedVisitor::new(cx, pat_hir_id); + if !match_arms.iter().any(|arm| used_visitor.check_arm(arm)); then { let if_let_type = if some_ctor { "Some" } else { "Ok" }; // Prepare the error message