aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_hir_ty/src/_match.rs64
1 files changed, 64 insertions, 0 deletions
diff --git a/crates/ra_hir_ty/src/_match.rs b/crates/ra_hir_ty/src/_match.rs
index c9a6551ab..c482cf619 100644
--- a/crates/ra_hir_ty/src/_match.rs
+++ b/crates/ra_hir_ty/src/_match.rs
@@ -1484,6 +1484,45 @@ mod tests {
1484 1484
1485 check_no_diagnostic(content); 1485 check_no_diagnostic(content);
1486 } 1486 }
1487
1488 #[test]
1489 fn enum_tuple_partial_ellipsis_no_diagnostic() {
1490 let content = r"
1491 enum Either {
1492 A(bool, bool, bool, bool),
1493 B,
1494 }
1495 fn test_fn() {
1496 match Either::B {
1497 Either::A(true, .., true) => {},
1498 Either::A(true, .., false) => {},
1499 Either::A(false, .., true) => {},
1500 Either::A(false, .., false) => {},
1501 Either::B => {},
1502 }
1503 }
1504 ";
1505
1506 check_no_diagnostic(content);
1507 }
1508
1509 #[test]
1510 fn enum_tuple_ellipsis_no_diagnostic() {
1511 let content = r"
1512 enum Either {
1513 A(bool, bool, bool, bool),
1514 B,
1515 }
1516 fn test_fn() {
1517 match Either::B {
1518 Either::A(..) => {},
1519 Either::B => {},
1520 }
1521 }
1522 ";
1523
1524 check_no_diagnostic(content);
1525 }
1487} 1526}
1488 1527
1489#[cfg(test)] 1528#[cfg(test)]
@@ -1628,4 +1667,29 @@ mod false_negatives {
1628 // See comments on `tuple_of_bools_with_ellipsis_at_end_missing_arm`. 1667 // See comments on `tuple_of_bools_with_ellipsis_at_end_missing_arm`.
1629 check_no_diagnostic(content); 1668 check_no_diagnostic(content);
1630 } 1669 }
1670
1671 #[test]
1672 fn enum_tuple_partial_ellipsis_missing_arm() {
1673 let content = r"
1674 enum Either {
1675 A(bool, bool, bool, bool),
1676 B,
1677 }
1678 fn test_fn() {
1679 match Either::B {
1680 Either::A(true, .., true) => {},
1681 Either::A(true, .., false) => {},
1682 Either::A(false, .., false) => {},
1683 Either::B => {},
1684 }
1685 }
1686 ";
1687
1688 // This is a false negative.
1689 // The `..` pattern is currently lowered to a single `Pat::Wild`
1690 // no matter how many fields the `..` pattern is covering. This
1691 // causes us to return a `MatchCheckErr::MalformedMatchArm` in
1692 // `Pat::specialize_constructor`.
1693 check_no_diagnostic(content);
1694 }
1631} 1695}