@@ -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#"
527528fn 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#"
567581fn 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