Skip to content

Commit 7464b6d

Browse files
committed
feature: Check if first_arm bool and second_arm bool is inverted or not.
1 parent 5a1b45d commit 7464b6d

File tree

1 file changed

+40
-4
lines changed

1 file changed

+40
-4
lines changed

crates/ide-assists/src/handlers/convert_two_arm_bool_match_to_matches_macro.rs

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)