From 7464b6dbc4b5342dc70105307c28ec26125b6380 Mon Sep 17 00:00:00 2001 From: Pocket7878 Date: Wed, 31 Aug 2022 18:38:20 +0900 Subject: [PATCH] feature: Check if first_arm bool and second_arm bool is inverted or not. --- ...ert_two_arm_bool_match_to_matches_macro.rs | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/crates/ide-assists/src/handlers/convert_two_arm_bool_match_to_matches_macro.rs b/crates/ide-assists/src/handlers/convert_two_arm_bool_match_to_matches_macro.rs index 68fe81f67b02..54a7f480a4e4 100644 --- a/crates/ide-assists/src/handlers/convert_two_arm_bool_match_to_matches_macro.rs +++ b/crates/ide-assists/src/handlers/convert_two_arm_bool_match_to_matches_macro.rs @@ -34,13 +34,18 @@ pub(crate) fn convert_two_arm_bool_match_to_matches_macro( return None; } let first_arm_expr = first_arm.expr(); + let second_arm_expr = second_arm.expr(); - let invert_matches = if is_bool_literal_expr(&first_arm_expr, true) { + let invert_matches = if is_bool_literal_expr(&first_arm_expr, true) + && is_bool_literal_expr(&second_arm_expr, false) + { false - } else if is_bool_literal_expr(&first_arm_expr, false) { + } else if is_bool_literal_expr(&first_arm_expr, false) + && is_bool_literal_expr(&second_arm_expr, true) + { true } else { - cov_mark::hit!(non_bool_literal_match); + cov_mark::hit!(non_invert_bool_literal_arms); return None; }; @@ -118,7 +123,7 @@ fn foo(a: Option) -> bool { #[test] fn not_applicable_non_bool_literal_arms() { - cov_mark::check!(non_bool_literal_match); + cov_mark::check!(non_invert_bool_literal_arms); check_assist_not_applicable( convert_two_arm_bool_match_to_matches_macro, r#" @@ -131,6 +136,37 @@ fn foo(a: Option) -> bool { "#, ); } + #[test] + fn not_applicable_both_false_arms() { + cov_mark::check!(non_invert_bool_literal_arms); + check_assist_not_applicable( + convert_two_arm_bool_match_to_matches_macro, + r#" +fn foo(a: Option) -> bool { + match a$0 { + Some(val) => false, + _ => false + } +} + "#, + ); + } + + #[test] + fn not_applicable_both_true_arms() { + cov_mark::check!(non_invert_bool_literal_arms); + check_assist_not_applicable( + convert_two_arm_bool_match_to_matches_macro, + r#" +fn foo(a: Option) -> bool { + match a$0 { + Some(val) => true, + _ => true + } +} + "#, + ); + } #[test] fn convert_simple_case() {