@@ -34,13 +34,18 @@ pub(crate) fn convert_two_arm_bool_match_to_matches_macro(
3434 return None ;
3535 }
3636 let first_arm_expr = first_arm. expr ( ) ;
37+ let second_arm_expr = second_arm. expr ( ) ;
3738
38- let invert_matches = if is_bool_literal_expr ( & first_arm_expr, true ) {
39+ let invert_matches = if is_bool_literal_expr ( & first_arm_expr, true )
40+ && is_bool_literal_expr ( & second_arm_expr, false )
41+ {
3942 false
40- } else if is_bool_literal_expr ( & first_arm_expr, false ) {
43+ } else if is_bool_literal_expr ( & first_arm_expr, false )
44+ && is_bool_literal_expr ( & second_arm_expr, true )
45+ {
4146 true
4247 } else {
43- cov_mark:: hit!( non_bool_literal_match ) ;
48+ cov_mark:: hit!( non_invert_bool_literal_arms ) ;
4449 return None ;
4550 } ;
4651
@@ -118,7 +123,7 @@ fn foo(a: Option<u32>) -> bool {
118123
119124 #[ test]
120125 fn not_applicable_non_bool_literal_arms ( ) {
121- cov_mark:: check!( non_bool_literal_match ) ;
126+ cov_mark:: check!( non_invert_bool_literal_arms ) ;
122127 check_assist_not_applicable (
123128 convert_two_arm_bool_match_to_matches_macro,
124129 r#"
@@ -131,6 +136,37 @@ fn foo(a: Option<u32>) -> bool {
131136 "# ,
132137 ) ;
133138 }
139+ #[ test]
140+ fn not_applicable_both_false_arms ( ) {
141+ cov_mark:: check!( non_invert_bool_literal_arms) ;
142+ check_assist_not_applicable (
143+ convert_two_arm_bool_match_to_matches_macro,
144+ r#"
145+ fn foo(a: Option<u32>) -> bool {
146+ match a$0 {
147+ Some(val) => false,
148+ _ => false
149+ }
150+ }
151+ "# ,
152+ ) ;
153+ }
154+
155+ #[ test]
156+ fn not_applicable_both_true_arms ( ) {
157+ cov_mark:: check!( non_invert_bool_literal_arms) ;
158+ check_assist_not_applicable (
159+ convert_two_arm_bool_match_to_matches_macro,
160+ r#"
161+ fn foo(a: Option<u32>) -> bool {
162+ match a$0 {
163+ Some(val) => true,
164+ _ => true
165+ }
166+ }
167+ "# ,
168+ ) ;
169+ }
134170
135171 #[ test]
136172 fn convert_simple_case ( ) {
0 commit comments