feature: Check if first_arm bool and second_arm bool is inverted or not.

This commit is contained in:
Pocket7878 2022-08-31 18:38:20 +09:00
parent 5a1b45dcc1
commit 7464b6dbc4

View file

@ -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<u32>) -> 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<u32>) -> 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<u32>) -> 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<u32>) -> bool {
match a$0 {
Some(val) => true,
_ => true
}
}
"#,
);
}
#[test]
fn convert_simple_case() {