Skip to content

Commit ce86f12

Browse files
committed
Auto merge of rust-lang#13945 - bvanjoi:orpat-match, r=lnicola
fix: check orpat in missing match fixed rust-lang#13942
2 parents 8800ea6 + e9724e5 commit ce86f12

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

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

+61
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ fn does_pat_match_variant(pat: &Pat, var: &Pat) -> bool {
269269
(Pat::TuplePat(tpat), Pat::TuplePat(tvar)) => {
270270
tpat.fields().zip(tvar.fields()).all(|(p, v)| does_pat_match_variant(&p, &v))
271271
}
272+
(Pat::OrPat(opat), _) => opat.pats().any(|p| does_pat_match_variant(&p, var)),
272273
_ => utils::does_pat_match_variant(pat, var),
273274
}
274275
}
@@ -525,6 +526,19 @@ fn foo(a: bool) {
525526
add_missing_match_arms,
526527
r#"
527528
fn foo(a: bool) {
529+
match (a, a)$0 {
530+
(true | false, true) => {}
531+
(true, false) => {}
532+
(false, false) => {}
533+
}
534+
}
535+
"#,
536+
);
537+
538+
check_assist_not_applicable(
539+
add_missing_match_arms,
540+
r#"
541+
fn foo(a: bool) {
528542
match (a, a)$0 {
529543
(true, true) => {}
530544
(true, false) => {}
@@ -565,6 +579,26 @@ fn foo(a: bool) {
565579
add_missing_match_arms,
566580
r#"
567581
fn foo(a: bool) {
582+
match (a, a)$0 {
583+
(true | false, true) => {}
584+
}
585+
}
586+
"#,
587+
r#"
588+
fn foo(a: bool) {
589+
match (a, a) {
590+
(true | false, true) => {}
591+
$0(true, false) => todo!(),
592+
(false, false) => todo!(),
593+
}
594+
}
595+
"#,
596+
);
597+
598+
check_assist(
599+
add_missing_match_arms,
600+
r#"
601+
fn foo(a: bool) {
568602
match (a, a)$0 {
569603
(false, true) => {}
570604
}
@@ -882,6 +916,33 @@ fn main() {
882916
}
883917
"#,
884918
);
919+
920+
check_assist(
921+
add_missing_match_arms,
922+
r#"
923+
enum E { A, B, C }
924+
fn main() {
925+
use E::*;
926+
match (A, B, C)$0 {
927+
(A | B , A, A | B | C) => (),
928+
(A | B | C , B | C, A | B | C) => (),
929+
}
930+
}
931+
"#,
932+
r#"
933+
enum E { A, B, C }
934+
fn main() {
935+
use E::*;
936+
match (A, B, C) {
937+
(A | B , A, A | B | C) => (),
938+
(A | B | C , B | C, A | B | C) => (),
939+
$0(C, A, A) => todo!(),
940+
(C, A, B) => todo!(),
941+
(C, A, C) => todo!(),
942+
}
943+
}
944+
"#,
945+
)
885946
}
886947

887948
#[test]

0 commit comments

Comments
 (0)