diff options
-rw-r--r-- | crates/ra_hir_ty/src/_match.rs | 772 |
1 files changed, 385 insertions, 387 deletions
diff --git a/crates/ra_hir_ty/src/_match.rs b/crates/ra_hir_ty/src/_match.rs index 42004282c..02a7a61f1 100644 --- a/crates/ra_hir_ty/src/_match.rs +++ b/crates/ra_hir_ty/src/_match.rs | |||
@@ -842,194 +842,193 @@ mod tests { | |||
842 | 842 | ||
843 | pub(super) use crate::{diagnostics::MissingMatchArms, test_db::TestDB}; | 843 | pub(super) use crate::{diagnostics::MissingMatchArms, test_db::TestDB}; |
844 | 844 | ||
845 | pub(super) fn check_diagnostic_message(content: &str) -> String { | 845 | pub(super) fn check_diagnostic_message(ra_fixture: &str) -> String { |
846 | TestDB::with_single_file(content).0.diagnostic::<MissingMatchArms>().0 | 846 | TestDB::with_single_file(ra_fixture).0.diagnostic::<MissingMatchArms>().0 |
847 | } | 847 | } |
848 | 848 | ||
849 | pub(super) fn check_diagnostic(content: &str) { | 849 | pub(super) fn check_diagnostic(ra_fixture: &str) { |
850 | let diagnostic_count = | 850 | let diagnostic_count = |
851 | TestDB::with_single_file(content).0.diagnostic::<MissingMatchArms>().1; | 851 | TestDB::with_single_file(ra_fixture).0.diagnostic::<MissingMatchArms>().1; |
852 | 852 | ||
853 | assert_eq!(1, diagnostic_count, "no diagnostic reported"); | 853 | assert_eq!(1, diagnostic_count, "no diagnostic reported"); |
854 | } | 854 | } |
855 | 855 | ||
856 | pub(super) fn check_no_diagnostic(content: &str) { | 856 | pub(super) fn check_no_diagnostic(ra_fixture: &str) { |
857 | let diagnostic_count = | 857 | let diagnostic_count = |
858 | TestDB::with_single_file(content).0.diagnostic::<MissingMatchArms>().1; | 858 | TestDB::with_single_file(ra_fixture).0.diagnostic::<MissingMatchArms>().1; |
859 | 859 | ||
860 | assert_eq!(0, diagnostic_count, "expected no diagnostic, found one"); | 860 | assert_eq!(0, diagnostic_count, "expected no diagnostic, found one"); |
861 | } | 861 | } |
862 | 862 | ||
863 | #[test] | 863 | #[test] |
864 | fn empty_tuple_no_arms_diagnostic_message() { | 864 | fn empty_tuple_no_arms_diagnostic_message() { |
865 | let content = r" | ||
866 | fn test_fn() { | ||
867 | match () { | ||
868 | } | ||
869 | } | ||
870 | "; | ||
871 | |||
872 | assert_snapshot!( | 865 | assert_snapshot!( |
873 | check_diagnostic_message(content), | 866 | check_diagnostic_message(r" |
867 | fn test_fn() { | ||
868 | match () { | ||
869 | } | ||
870 | } | ||
871 | "), | ||
874 | @"\"()\": Missing match arm\n" | 872 | @"\"()\": Missing match arm\n" |
875 | ); | 873 | ); |
876 | } | 874 | } |
877 | 875 | ||
878 | #[test] | 876 | #[test] |
879 | fn empty_tuple_no_arms() { | 877 | fn empty_tuple_no_arms() { |
880 | let content = r" | 878 | check_diagnostic( |
879 | r" | ||
881 | fn test_fn() { | 880 | fn test_fn() { |
882 | match () { | 881 | match () { |
883 | } | 882 | } |
884 | } | 883 | } |
885 | "; | 884 | ", |
886 | 885 | ); | |
887 | check_diagnostic(content); | ||
888 | } | 886 | } |
889 | 887 | ||
890 | #[test] | 888 | #[test] |
891 | fn empty_tuple_wild() { | 889 | fn empty_tuple_wild() { |
892 | let content = r" | 890 | check_no_diagnostic( |
891 | r" | ||
893 | fn test_fn() { | 892 | fn test_fn() { |
894 | match () { | 893 | match () { |
895 | _ => {} | 894 | _ => {} |
896 | } | 895 | } |
897 | } | 896 | } |
898 | "; | 897 | ", |
899 | 898 | ); | |
900 | check_no_diagnostic(content); | ||
901 | } | 899 | } |
902 | 900 | ||
903 | #[test] | 901 | #[test] |
904 | fn empty_tuple_no_diagnostic() { | 902 | fn empty_tuple_no_diagnostic() { |
905 | let content = r" | 903 | check_no_diagnostic( |
904 | r" | ||
906 | fn test_fn() { | 905 | fn test_fn() { |
907 | match () { | 906 | match () { |
908 | () => {} | 907 | () => {} |
909 | } | 908 | } |
910 | } | 909 | } |
911 | "; | 910 | ", |
912 | 911 | ); | |
913 | check_no_diagnostic(content); | ||
914 | } | 912 | } |
915 | 913 | ||
916 | #[test] | 914 | #[test] |
917 | fn tuple_of_empty_tuple_no_arms() { | 915 | fn tuple_of_empty_tuple_no_arms() { |
918 | let content = r" | 916 | check_diagnostic( |
917 | r" | ||
919 | fn test_fn() { | 918 | fn test_fn() { |
920 | match (()) { | 919 | match (()) { |
921 | } | 920 | } |
922 | } | 921 | } |
923 | "; | 922 | ", |
924 | 923 | ); | |
925 | check_diagnostic(content); | ||
926 | } | 924 | } |
927 | 925 | ||
928 | #[test] | 926 | #[test] |
929 | fn tuple_of_empty_tuple_no_diagnostic() { | 927 | fn tuple_of_empty_tuple_no_diagnostic() { |
930 | let content = r" | 928 | check_no_diagnostic( |
929 | r" | ||
931 | fn test_fn() { | 930 | fn test_fn() { |
932 | match (()) { | 931 | match (()) { |
933 | (()) => {} | 932 | (()) => {} |
934 | } | 933 | } |
935 | } | 934 | } |
936 | "; | 935 | ", |
937 | 936 | ); | |
938 | check_no_diagnostic(content); | ||
939 | } | 937 | } |
940 | 938 | ||
941 | #[test] | 939 | #[test] |
942 | fn tuple_of_two_empty_tuple_no_arms() { | 940 | fn tuple_of_two_empty_tuple_no_arms() { |
943 | let content = r" | 941 | check_diagnostic( |
942 | r" | ||
944 | fn test_fn() { | 943 | fn test_fn() { |
945 | match ((), ()) { | 944 | match ((), ()) { |
946 | } | 945 | } |
947 | } | 946 | } |
948 | "; | 947 | ", |
949 | 948 | ); | |
950 | check_diagnostic(content); | ||
951 | } | 949 | } |
952 | 950 | ||
953 | #[test] | 951 | #[test] |
954 | fn tuple_of_two_empty_tuple_no_diagnostic() { | 952 | fn tuple_of_two_empty_tuple_no_diagnostic() { |
955 | let content = r" | 953 | check_no_diagnostic( |
954 | r" | ||
956 | fn test_fn() { | 955 | fn test_fn() { |
957 | match ((), ()) { | 956 | match ((), ()) { |
958 | ((), ()) => {} | 957 | ((), ()) => {} |
959 | } | 958 | } |
960 | } | 959 | } |
961 | "; | 960 | ", |
962 | 961 | ); | |
963 | check_no_diagnostic(content); | ||
964 | } | 962 | } |
965 | 963 | ||
966 | #[test] | 964 | #[test] |
967 | fn bool_no_arms() { | 965 | fn bool_no_arms() { |
968 | let content = r" | 966 | check_diagnostic( |
967 | r" | ||
969 | fn test_fn() { | 968 | fn test_fn() { |
970 | match false { | 969 | match false { |
971 | } | 970 | } |
972 | } | 971 | } |
973 | "; | 972 | ", |
974 | 973 | ); | |
975 | check_diagnostic(content); | ||
976 | } | 974 | } |
977 | 975 | ||
978 | #[test] | 976 | #[test] |
979 | fn bool_missing_arm() { | 977 | fn bool_missing_arm() { |
980 | let content = r" | 978 | check_diagnostic( |
979 | r" | ||
981 | fn test_fn() { | 980 | fn test_fn() { |
982 | match false { | 981 | match false { |
983 | true => {} | 982 | true => {} |
984 | } | 983 | } |
985 | } | 984 | } |
986 | "; | 985 | ", |
987 | 986 | ); | |
988 | check_diagnostic(content); | ||
989 | } | 987 | } |
990 | 988 | ||
991 | #[test] | 989 | #[test] |
992 | fn bool_no_diagnostic() { | 990 | fn bool_no_diagnostic() { |
993 | let content = r" | 991 | check_no_diagnostic( |
992 | r" | ||
994 | fn test_fn() { | 993 | fn test_fn() { |
995 | match false { | 994 | match false { |
996 | true => {} | 995 | true => {} |
997 | false => {} | 996 | false => {} |
998 | } | 997 | } |
999 | } | 998 | } |
1000 | "; | 999 | ", |
1001 | 1000 | ); | |
1002 | check_no_diagnostic(content); | ||
1003 | } | 1001 | } |
1004 | 1002 | ||
1005 | #[test] | 1003 | #[test] |
1006 | fn tuple_of_bools_no_arms() { | 1004 | fn tuple_of_bools_no_arms() { |
1007 | let content = r" | 1005 | check_diagnostic( |
1006 | r" | ||
1008 | fn test_fn() { | 1007 | fn test_fn() { |
1009 | match (false, true) { | 1008 | match (false, true) { |
1010 | } | 1009 | } |
1011 | } | 1010 | } |
1012 | "; | 1011 | ", |
1013 | 1012 | ); | |
1014 | check_diagnostic(content); | ||
1015 | } | 1013 | } |
1016 | 1014 | ||
1017 | #[test] | 1015 | #[test] |
1018 | fn tuple_of_bools_missing_arms() { | 1016 | fn tuple_of_bools_missing_arms() { |
1019 | let content = r" | 1017 | check_diagnostic( |
1018 | r" | ||
1020 | fn test_fn() { | 1019 | fn test_fn() { |
1021 | match (false, true) { | 1020 | match (false, true) { |
1022 | (true, true) => {}, | 1021 | (true, true) => {}, |
1023 | } | 1022 | } |
1024 | } | 1023 | } |
1025 | "; | 1024 | ", |
1026 | 1025 | ); | |
1027 | check_diagnostic(content); | ||
1028 | } | 1026 | } |
1029 | 1027 | ||
1030 | #[test] | 1028 | #[test] |
1031 | fn tuple_of_bools_missing_arm() { | 1029 | fn tuple_of_bools_missing_arm() { |
1032 | let content = r" | 1030 | check_diagnostic( |
1031 | r" | ||
1033 | fn test_fn() { | 1032 | fn test_fn() { |
1034 | match (false, true) { | 1033 | match (false, true) { |
1035 | (false, true) => {}, | 1034 | (false, true) => {}, |
@@ -1037,14 +1036,14 @@ mod tests { | |||
1037 | (true, false) => {}, | 1036 | (true, false) => {}, |
1038 | } | 1037 | } |
1039 | } | 1038 | } |
1040 | "; | 1039 | ", |
1041 | 1040 | ); | |
1042 | check_diagnostic(content); | ||
1043 | } | 1041 | } |
1044 | 1042 | ||
1045 | #[test] | 1043 | #[test] |
1046 | fn tuple_of_bools_with_wilds() { | 1044 | fn tuple_of_bools_with_wilds() { |
1047 | let content = r" | 1045 | check_no_diagnostic( |
1046 | r" | ||
1048 | fn test_fn() { | 1047 | fn test_fn() { |
1049 | match (false, true) { | 1048 | match (false, true) { |
1050 | (false, _) => {}, | 1049 | (false, _) => {}, |
@@ -1052,14 +1051,14 @@ mod tests { | |||
1052 | (_, true) => {}, | 1051 | (_, true) => {}, |
1053 | } | 1052 | } |
1054 | } | 1053 | } |
1055 | "; | 1054 | ", |
1056 | 1055 | ); | |
1057 | check_no_diagnostic(content); | ||
1058 | } | 1056 | } |
1059 | 1057 | ||
1060 | #[test] | 1058 | #[test] |
1061 | fn tuple_of_bools_no_diagnostic() { | 1059 | fn tuple_of_bools_no_diagnostic() { |
1062 | let content = r" | 1060 | check_no_diagnostic( |
1061 | r" | ||
1063 | fn test_fn() { | 1062 | fn test_fn() { |
1064 | match (false, true) { | 1063 | match (false, true) { |
1065 | (true, true) => {}, | 1064 | (true, true) => {}, |
@@ -1068,27 +1067,27 @@ mod tests { | |||
1068 | (false, false) => {}, | 1067 | (false, false) => {}, |
1069 | } | 1068 | } |
1070 | } | 1069 | } |
1071 | "; | 1070 | ", |
1072 | 1071 | ); | |
1073 | check_no_diagnostic(content); | ||
1074 | } | 1072 | } |
1075 | 1073 | ||
1076 | #[test] | 1074 | #[test] |
1077 | fn tuple_of_bools_binding_missing_arms() { | 1075 | fn tuple_of_bools_binding_missing_arms() { |
1078 | let content = r" | 1076 | check_diagnostic( |
1077 | r" | ||
1079 | fn test_fn() { | 1078 | fn test_fn() { |
1080 | match (false, true) { | 1079 | match (false, true) { |
1081 | (true, _x) => {}, | 1080 | (true, _x) => {}, |
1082 | } | 1081 | } |
1083 | } | 1082 | } |
1084 | "; | 1083 | ", |
1085 | 1084 | ); | |
1086 | check_diagnostic(content); | ||
1087 | } | 1085 | } |
1088 | 1086 | ||
1089 | #[test] | 1087 | #[test] |
1090 | fn tuple_of_bools_binding_no_diagnostic() { | 1088 | fn tuple_of_bools_binding_no_diagnostic() { |
1091 | let content = r" | 1089 | check_no_diagnostic( |
1090 | r" | ||
1092 | fn test_fn() { | 1091 | fn test_fn() { |
1093 | match (false, true) { | 1092 | match (false, true) { |
1094 | (true, _x) => {}, | 1093 | (true, _x) => {}, |
@@ -1096,80 +1095,80 @@ mod tests { | |||
1096 | (false, false) => {}, | 1095 | (false, false) => {}, |
1097 | } | 1096 | } |
1098 | } | 1097 | } |
1099 | "; | 1098 | ", |
1100 | 1099 | ); | |
1101 | check_no_diagnostic(content); | ||
1102 | } | 1100 | } |
1103 | 1101 | ||
1104 | #[test] | 1102 | #[test] |
1105 | fn tuple_of_bools_with_ellipsis_at_end_no_diagnostic() { | 1103 | fn tuple_of_bools_with_ellipsis_at_end_no_diagnostic() { |
1106 | let content = r" | 1104 | check_no_diagnostic( |
1105 | r" | ||
1107 | fn test_fn() { | 1106 | fn test_fn() { |
1108 | match (false, true, false) { | 1107 | match (false, true, false) { |
1109 | (false, ..) => {}, | 1108 | (false, ..) => {}, |
1110 | (true, ..) => {}, | 1109 | (true, ..) => {}, |
1111 | } | 1110 | } |
1112 | } | 1111 | } |
1113 | "; | 1112 | ", |
1114 | 1113 | ); | |
1115 | check_no_diagnostic(content); | ||
1116 | } | 1114 | } |
1117 | 1115 | ||
1118 | #[test] | 1116 | #[test] |
1119 | fn tuple_of_bools_with_ellipsis_at_beginning_no_diagnostic() { | 1117 | fn tuple_of_bools_with_ellipsis_at_beginning_no_diagnostic() { |
1120 | let content = r" | 1118 | check_no_diagnostic( |
1119 | r" | ||
1121 | fn test_fn() { | 1120 | fn test_fn() { |
1122 | match (false, true, false) { | 1121 | match (false, true, false) { |
1123 | (.., false) => {}, | 1122 | (.., false) => {}, |
1124 | (.., true) => {}, | 1123 | (.., true) => {}, |
1125 | } | 1124 | } |
1126 | } | 1125 | } |
1127 | "; | 1126 | ", |
1128 | 1127 | ); | |
1129 | check_no_diagnostic(content); | ||
1130 | } | 1128 | } |
1131 | 1129 | ||
1132 | #[test] | 1130 | #[test] |
1133 | fn tuple_of_bools_with_ellipsis_no_diagnostic() { | 1131 | fn tuple_of_bools_with_ellipsis_no_diagnostic() { |
1134 | let content = r" | 1132 | check_no_diagnostic( |
1133 | r" | ||
1135 | fn test_fn() { | 1134 | fn test_fn() { |
1136 | match (false, true, false) { | 1135 | match (false, true, false) { |
1137 | (..) => {}, | 1136 | (..) => {}, |
1138 | } | 1137 | } |
1139 | } | 1138 | } |
1140 | "; | 1139 | ", |
1141 | 1140 | ); | |
1142 | check_no_diagnostic(content); | ||
1143 | } | 1141 | } |
1144 | 1142 | ||
1145 | #[test] | 1143 | #[test] |
1146 | fn tuple_of_tuple_and_bools_no_arms() { | 1144 | fn tuple_of_tuple_and_bools_no_arms() { |
1147 | let content = r" | 1145 | check_diagnostic( |
1146 | r" | ||
1148 | fn test_fn() { | 1147 | fn test_fn() { |
1149 | match (false, ((), false)) { | 1148 | match (false, ((), false)) { |
1150 | } | 1149 | } |
1151 | } | 1150 | } |
1152 | "; | 1151 | ", |
1153 | 1152 | ); | |
1154 | check_diagnostic(content); | ||
1155 | } | 1153 | } |
1156 | 1154 | ||
1157 | #[test] | 1155 | #[test] |
1158 | fn tuple_of_tuple_and_bools_missing_arms() { | 1156 | fn tuple_of_tuple_and_bools_missing_arms() { |
1159 | let content = r" | 1157 | check_diagnostic( |
1158 | r" | ||
1160 | fn test_fn() { | 1159 | fn test_fn() { |
1161 | match (false, ((), false)) { | 1160 | match (false, ((), false)) { |
1162 | (true, ((), true)) => {}, | 1161 | (true, ((), true)) => {}, |
1163 | } | 1162 | } |
1164 | } | 1163 | } |
1165 | "; | 1164 | ", |
1166 | 1165 | ); | |
1167 | check_diagnostic(content); | ||
1168 | } | 1166 | } |
1169 | 1167 | ||
1170 | #[test] | 1168 | #[test] |
1171 | fn tuple_of_tuple_and_bools_no_diagnostic() { | 1169 | fn tuple_of_tuple_and_bools_no_diagnostic() { |
1172 | let content = r" | 1170 | check_no_diagnostic( |
1171 | r" | ||
1173 | fn test_fn() { | 1172 | fn test_fn() { |
1174 | match (false, ((), false)) { | 1173 | match (false, ((), false)) { |
1175 | (true, ((), true)) => {}, | 1174 | (true, ((), true)) => {}, |
@@ -1178,27 +1177,27 @@ mod tests { | |||
1178 | (false, ((), false)) => {}, | 1177 | (false, ((), false)) => {}, |
1179 | } | 1178 | } |
1180 | } | 1179 | } |
1181 | "; | 1180 | ", |
1182 | 1181 | ); | |
1183 | check_no_diagnostic(content); | ||
1184 | } | 1182 | } |
1185 | 1183 | ||
1186 | #[test] | 1184 | #[test] |
1187 | fn tuple_of_tuple_and_bools_wildcard_missing_arms() { | 1185 | fn tuple_of_tuple_and_bools_wildcard_missing_arms() { |
1188 | let content = r" | 1186 | check_diagnostic( |
1187 | r" | ||
1189 | fn test_fn() { | 1188 | fn test_fn() { |
1190 | match (false, ((), false)) { | 1189 | match (false, ((), false)) { |
1191 | (true, _) => {}, | 1190 | (true, _) => {}, |
1192 | } | 1191 | } |
1193 | } | 1192 | } |
1194 | "; | 1193 | ", |
1195 | 1194 | ); | |
1196 | check_diagnostic(content); | ||
1197 | } | 1195 | } |
1198 | 1196 | ||
1199 | #[test] | 1197 | #[test] |
1200 | fn tuple_of_tuple_and_bools_wildcard_no_diagnostic() { | 1198 | fn tuple_of_tuple_and_bools_wildcard_no_diagnostic() { |
1201 | let content = r" | 1199 | check_no_diagnostic( |
1200 | r" | ||
1202 | fn test_fn() { | 1201 | fn test_fn() { |
1203 | match (false, ((), false)) { | 1202 | match (false, ((), false)) { |
1204 | (true, ((), true)) => {}, | 1203 | (true, ((), true)) => {}, |
@@ -1206,14 +1205,14 @@ mod tests { | |||
1206 | (false, _) => {}, | 1205 | (false, _) => {}, |
1207 | } | 1206 | } |
1208 | } | 1207 | } |
1209 | "; | 1208 | ", |
1210 | 1209 | ); | |
1211 | check_no_diagnostic(content); | ||
1212 | } | 1210 | } |
1213 | 1211 | ||
1214 | #[test] | 1212 | #[test] |
1215 | fn enum_no_arms() { | 1213 | fn enum_no_arms() { |
1216 | let content = r" | 1214 | check_diagnostic( |
1215 | r" | ||
1217 | enum Either { | 1216 | enum Either { |
1218 | A, | 1217 | A, |
1219 | B, | 1218 | B, |
@@ -1222,14 +1221,14 @@ mod tests { | |||
1222 | match Either::A { | 1221 | match Either::A { |
1223 | } | 1222 | } |
1224 | } | 1223 | } |
1225 | "; | 1224 | ", |
1226 | 1225 | ); | |
1227 | check_diagnostic(content); | ||
1228 | } | 1226 | } |
1229 | 1227 | ||
1230 | #[test] | 1228 | #[test] |
1231 | fn enum_missing_arms() { | 1229 | fn enum_missing_arms() { |
1232 | let content = r" | 1230 | check_diagnostic( |
1231 | r" | ||
1233 | enum Either { | 1232 | enum Either { |
1234 | A, | 1233 | A, |
1235 | B, | 1234 | B, |
@@ -1239,14 +1238,14 @@ mod tests { | |||
1239 | Either::A => {}, | 1238 | Either::A => {}, |
1240 | } | 1239 | } |
1241 | } | 1240 | } |
1242 | "; | 1241 | ", |
1243 | 1242 | ); | |
1244 | check_diagnostic(content); | ||
1245 | } | 1243 | } |
1246 | 1244 | ||
1247 | #[test] | 1245 | #[test] |
1248 | fn enum_no_diagnostic() { | 1246 | fn enum_no_diagnostic() { |
1249 | let content = r" | 1247 | check_no_diagnostic( |
1248 | r" | ||
1250 | enum Either { | 1249 | enum Either { |
1251 | A, | 1250 | A, |
1252 | B, | 1251 | B, |
@@ -1257,14 +1256,14 @@ mod tests { | |||
1257 | Either::B => {}, | 1256 | Either::B => {}, |
1258 | } | 1257 | } |
1259 | } | 1258 | } |
1260 | "; | 1259 | ", |
1261 | 1260 | ); | |
1262 | check_no_diagnostic(content); | ||
1263 | } | 1261 | } |
1264 | 1262 | ||
1265 | #[test] | 1263 | #[test] |
1266 | fn enum_ref_missing_arms() { | 1264 | fn enum_ref_missing_arms() { |
1267 | let content = r" | 1265 | check_diagnostic( |
1266 | r" | ||
1268 | enum Either { | 1267 | enum Either { |
1269 | A, | 1268 | A, |
1270 | B, | 1269 | B, |
@@ -1274,14 +1273,14 @@ mod tests { | |||
1274 | Either::A => {}, | 1273 | Either::A => {}, |
1275 | } | 1274 | } |
1276 | } | 1275 | } |
1277 | "; | 1276 | ", |
1278 | 1277 | ); | |
1279 | check_diagnostic(content); | ||
1280 | } | 1278 | } |
1281 | 1279 | ||
1282 | #[test] | 1280 | #[test] |
1283 | fn enum_ref_no_diagnostic() { | 1281 | fn enum_ref_no_diagnostic() { |
1284 | let content = r" | 1282 | check_no_diagnostic( |
1283 | r" | ||
1285 | enum Either { | 1284 | enum Either { |
1286 | A, | 1285 | A, |
1287 | B, | 1286 | B, |
@@ -1292,14 +1291,14 @@ mod tests { | |||
1292 | Either::B => {}, | 1291 | Either::B => {}, |
1293 | } | 1292 | } |
1294 | } | 1293 | } |
1295 | "; | 1294 | ", |
1296 | 1295 | ); | |
1297 | check_no_diagnostic(content); | ||
1298 | } | 1296 | } |
1299 | 1297 | ||
1300 | #[test] | 1298 | #[test] |
1301 | fn enum_containing_bool_no_arms() { | 1299 | fn enum_containing_bool_no_arms() { |
1302 | let content = r" | 1300 | check_diagnostic( |
1301 | r" | ||
1303 | enum Either { | 1302 | enum Either { |
1304 | A(bool), | 1303 | A(bool), |
1305 | B, | 1304 | B, |
@@ -1308,14 +1307,14 @@ mod tests { | |||
1308 | match Either::B { | 1307 | match Either::B { |
1309 | } | 1308 | } |
1310 | } | 1309 | } |
1311 | "; | 1310 | ", |
1312 | 1311 | ); | |
1313 | check_diagnostic(content); | ||
1314 | } | 1312 | } |
1315 | 1313 | ||
1316 | #[test] | 1314 | #[test] |
1317 | fn enum_containing_bool_missing_arms() { | 1315 | fn enum_containing_bool_missing_arms() { |
1318 | let content = r" | 1316 | check_diagnostic( |
1317 | r" | ||
1319 | enum Either { | 1318 | enum Either { |
1320 | A(bool), | 1319 | A(bool), |
1321 | B, | 1320 | B, |
@@ -1326,14 +1325,14 @@ mod tests { | |||
1326 | Either::B => (), | 1325 | Either::B => (), |
1327 | } | 1326 | } |
1328 | } | 1327 | } |
1329 | "; | 1328 | ", |
1330 | 1329 | ); | |
1331 | check_diagnostic(content); | ||
1332 | } | 1330 | } |
1333 | 1331 | ||
1334 | #[test] | 1332 | #[test] |
1335 | fn enum_containing_bool_no_diagnostic() { | 1333 | fn enum_containing_bool_no_diagnostic() { |
1336 | let content = r" | 1334 | check_no_diagnostic( |
1335 | r" | ||
1337 | enum Either { | 1336 | enum Either { |
1338 | A(bool), | 1337 | A(bool), |
1339 | B, | 1338 | B, |
@@ -1345,14 +1344,14 @@ mod tests { | |||
1345 | Either::B => (), | 1344 | Either::B => (), |
1346 | } | 1345 | } |
1347 | } | 1346 | } |
1348 | "; | 1347 | ", |
1349 | 1348 | ); | |
1350 | check_no_diagnostic(content); | ||
1351 | } | 1349 | } |
1352 | 1350 | ||
1353 | #[test] | 1351 | #[test] |
1354 | fn enum_containing_bool_with_wild_no_diagnostic() { | 1352 | fn enum_containing_bool_with_wild_no_diagnostic() { |
1355 | let content = r" | 1353 | check_no_diagnostic( |
1354 | r" | ||
1356 | enum Either { | 1355 | enum Either { |
1357 | A(bool), | 1356 | A(bool), |
1358 | B, | 1357 | B, |
@@ -1363,14 +1362,14 @@ mod tests { | |||
1363 | _ => (), | 1362 | _ => (), |
1364 | } | 1363 | } |
1365 | } | 1364 | } |
1366 | "; | 1365 | ", |
1367 | 1366 | ); | |
1368 | check_no_diagnostic(content); | ||
1369 | } | 1367 | } |
1370 | 1368 | ||
1371 | #[test] | 1369 | #[test] |
1372 | fn enum_containing_bool_with_wild_2_no_diagnostic() { | 1370 | fn enum_containing_bool_with_wild_2_no_diagnostic() { |
1373 | let content = r" | 1371 | check_no_diagnostic( |
1372 | r" | ||
1374 | enum Either { | 1373 | enum Either { |
1375 | A(bool), | 1374 | A(bool), |
1376 | B, | 1375 | B, |
@@ -1381,14 +1380,14 @@ mod tests { | |||
1381 | Either::B => (), | 1380 | Either::B => (), |
1382 | } | 1381 | } |
1383 | } | 1382 | } |
1384 | "; | 1383 | ", |
1385 | 1384 | ); | |
1386 | check_no_diagnostic(content); | ||
1387 | } | 1385 | } |
1388 | 1386 | ||
1389 | #[test] | 1387 | #[test] |
1390 | fn enum_different_sizes_missing_arms() { | 1388 | fn enum_different_sizes_missing_arms() { |
1391 | let content = r" | 1389 | check_diagnostic( |
1390 | r" | ||
1392 | enum Either { | 1391 | enum Either { |
1393 | A(bool), | 1392 | A(bool), |
1394 | B(bool, bool), | 1393 | B(bool, bool), |
@@ -1399,14 +1398,14 @@ mod tests { | |||
1399 | Either::B(false, _) => (), | 1398 | Either::B(false, _) => (), |
1400 | } | 1399 | } |
1401 | } | 1400 | } |
1402 | "; | 1401 | ", |
1403 | 1402 | ); | |
1404 | check_diagnostic(content); | ||
1405 | } | 1403 | } |
1406 | 1404 | ||
1407 | #[test] | 1405 | #[test] |
1408 | fn enum_different_sizes_no_diagnostic() { | 1406 | fn enum_different_sizes_no_diagnostic() { |
1409 | let content = r" | 1407 | check_no_diagnostic( |
1408 | r" | ||
1410 | enum Either { | 1409 | enum Either { |
1411 | A(bool), | 1410 | A(bool), |
1412 | B(bool, bool), | 1411 | B(bool, bool), |
@@ -1418,14 +1417,14 @@ mod tests { | |||
1418 | Either::B(false, _) => (), | 1417 | Either::B(false, _) => (), |
1419 | } | 1418 | } |
1420 | } | 1419 | } |
1421 | "; | 1420 | ", |
1422 | 1421 | ); | |
1423 | check_no_diagnostic(content); | ||
1424 | } | 1422 | } |
1425 | 1423 | ||
1426 | #[test] | 1424 | #[test] |
1427 | fn or_no_diagnostic() { | 1425 | fn or_no_diagnostic() { |
1428 | let content = r" | 1426 | check_no_diagnostic( |
1427 | r" | ||
1429 | enum Either { | 1428 | enum Either { |
1430 | A(bool), | 1429 | A(bool), |
1431 | B(bool, bool), | 1430 | B(bool, bool), |
@@ -1437,14 +1436,14 @@ mod tests { | |||
1437 | Either::B(false, _) => (), | 1436 | Either::B(false, _) => (), |
1438 | } | 1437 | } |
1439 | } | 1438 | } |
1440 | "; | 1439 | ", |
1441 | 1440 | ); | |
1442 | check_no_diagnostic(content); | ||
1443 | } | 1441 | } |
1444 | 1442 | ||
1445 | #[test] | 1443 | #[test] |
1446 | fn tuple_of_enum_no_diagnostic() { | 1444 | fn tuple_of_enum_no_diagnostic() { |
1447 | let content = r" | 1445 | check_no_diagnostic( |
1446 | r" | ||
1448 | enum Either { | 1447 | enum Either { |
1449 | A(bool), | 1448 | A(bool), |
1450 | B(bool, bool), | 1449 | B(bool, bool), |
@@ -1461,14 +1460,16 @@ mod tests { | |||
1461 | (Either::B(_, _), Either2::D) => (), | 1460 | (Either::B(_, _), Either2::D) => (), |
1462 | } | 1461 | } |
1463 | } | 1462 | } |
1464 | "; | 1463 | ", |
1465 | 1464 | ); | |
1466 | check_no_diagnostic(content); | ||
1467 | } | 1465 | } |
1468 | 1466 | ||
1469 | #[test] | 1467 | #[test] |
1470 | fn mismatched_types() { | 1468 | fn mismatched_types() { |
1471 | let content = r" | 1469 | // Match statements with arms that don't match the |
1470 | // expression pattern do not fire this diagnostic. | ||
1471 | check_no_diagnostic( | ||
1472 | r" | ||
1472 | enum Either { | 1473 | enum Either { |
1473 | A, | 1474 | A, |
1474 | B, | 1475 | B, |
@@ -1483,47 +1484,47 @@ mod tests { | |||
1483 | Either2::D => (), | 1484 | Either2::D => (), |
1484 | } | 1485 | } |
1485 | } | 1486 | } |
1486 | "; | 1487 | ", |
1487 | 1488 | ); | |
1488 | // Match statements with arms that don't match the | ||
1489 | // expression pattern do not fire this diagnostic. | ||
1490 | check_no_diagnostic(content); | ||
1491 | } | 1489 | } |
1492 | 1490 | ||
1493 | #[test] | 1491 | #[test] |
1494 | fn mismatched_types_with_different_arity() { | 1492 | fn mismatched_types_with_different_arity() { |
1495 | let content = r" | 1493 | // Match statements with arms that don't match the |
1494 | // expression pattern do not fire this diagnostic. | ||
1495 | check_no_diagnostic( | ||
1496 | r" | ||
1496 | fn test_fn() { | 1497 | fn test_fn() { |
1497 | match (true, false) { | 1498 | match (true, false) { |
1498 | (true, false, true) => (), | 1499 | (true, false, true) => (), |
1499 | (true) => (), | 1500 | (true) => (), |
1500 | } | 1501 | } |
1501 | } | 1502 | } |
1502 | "; | 1503 | ", |
1503 | 1504 | ); | |
1504 | // Match statements with arms that don't match the | ||
1505 | // expression pattern do not fire this diagnostic. | ||
1506 | check_no_diagnostic(content); | ||
1507 | } | 1505 | } |
1508 | 1506 | ||
1509 | #[test] | 1507 | #[test] |
1510 | fn malformed_match_arm_tuple_missing_pattern() { | 1508 | fn malformed_match_arm_tuple_missing_pattern() { |
1511 | let content = r" | 1509 | // Match statements with arms that don't match the |
1510 | // expression pattern do not fire this diagnostic. | ||
1511 | check_no_diagnostic( | ||
1512 | r" | ||
1512 | fn test_fn() { | 1513 | fn test_fn() { |
1513 | match (0) { | 1514 | match (0) { |
1514 | () => (), | 1515 | () => (), |
1515 | } | 1516 | } |
1516 | } | 1517 | } |
1517 | "; | 1518 | ", |
1518 | 1519 | ); | |
1519 | // Match statements with arms that don't match the | ||
1520 | // expression pattern do not fire this diagnostic. | ||
1521 | check_no_diagnostic(content); | ||
1522 | } | 1520 | } |
1523 | 1521 | ||
1524 | #[test] | 1522 | #[test] |
1525 | fn malformed_match_arm_tuple_enum_missing_pattern() { | 1523 | fn malformed_match_arm_tuple_enum_missing_pattern() { |
1526 | let content = r" | 1524 | // We are testing to be sure we don't panic here when the match |
1525 | // arm `Either::B` is missing its pattern. | ||
1526 | check_no_diagnostic( | ||
1527 | r" | ||
1527 | enum Either { | 1528 | enum Either { |
1528 | A, | 1529 | A, |
1529 | B(u32), | 1530 | B(u32), |
@@ -1534,32 +1535,30 @@ mod tests { | |||
1534 | Either::B() => (), | 1535 | Either::B() => (), |
1535 | } | 1536 | } |
1536 | } | 1537 | } |
1537 | "; | 1538 | ", |
1538 | 1539 | ); | |
1539 | // We are testing to be sure we don't panic here when the match | ||
1540 | // arm `Either::B` is missing its pattern. | ||
1541 | check_no_diagnostic(content); | ||
1542 | } | 1540 | } |
1543 | 1541 | ||
1544 | #[test] | 1542 | #[test] |
1545 | fn enum_not_in_scope() { | 1543 | fn enum_not_in_scope() { |
1546 | let content = r" | 1544 | // The enum is not in scope so we don't perform exhaustiveness |
1545 | // checking, but we want to be sure we don't panic here (and | ||
1546 | // we don't create a diagnostic). | ||
1547 | check_no_diagnostic( | ||
1548 | r" | ||
1547 | fn test_fn() { | 1549 | fn test_fn() { |
1548 | match Foo::Bar { | 1550 | match Foo::Bar { |
1549 | Foo::Baz => (), | 1551 | Foo::Baz => (), |
1550 | } | 1552 | } |
1551 | } | 1553 | } |
1552 | "; | 1554 | ", |
1553 | 1555 | ); | |
1554 | // The enum is not in scope so we don't perform exhaustiveness | ||
1555 | // checking, but we want to be sure we don't panic here (and | ||
1556 | // we don't create a diagnostic). | ||
1557 | check_no_diagnostic(content); | ||
1558 | } | 1556 | } |
1559 | 1557 | ||
1560 | #[test] | 1558 | #[test] |
1561 | fn expr_diverges() { | 1559 | fn expr_diverges() { |
1562 | let content = r" | 1560 | check_no_diagnostic( |
1561 | r" | ||
1563 | enum Either { | 1562 | enum Either { |
1564 | A, | 1563 | A, |
1565 | B, | 1564 | B, |
@@ -1570,14 +1569,14 @@ mod tests { | |||
1570 | Either::B => (), | 1569 | Either::B => (), |
1571 | } | 1570 | } |
1572 | } | 1571 | } |
1573 | "; | 1572 | ", |
1574 | 1573 | ); | |
1575 | check_no_diagnostic(content); | ||
1576 | } | 1574 | } |
1577 | 1575 | ||
1578 | #[test] | 1576 | #[test] |
1579 | fn expr_loop_with_break() { | 1577 | fn expr_loop_with_break() { |
1580 | let content = r" | 1578 | check_no_diagnostic( |
1579 | r" | ||
1581 | enum Either { | 1580 | enum Either { |
1582 | A, | 1581 | A, |
1583 | B, | 1582 | B, |
@@ -1588,14 +1587,14 @@ mod tests { | |||
1588 | Either::B => (), | 1587 | Either::B => (), |
1589 | } | 1588 | } |
1590 | } | 1589 | } |
1591 | "; | 1590 | ", |
1592 | 1591 | ); | |
1593 | check_no_diagnostic(content); | ||
1594 | } | 1592 | } |
1595 | 1593 | ||
1596 | #[test] | 1594 | #[test] |
1597 | fn expr_partially_diverges() { | 1595 | fn expr_partially_diverges() { |
1598 | let content = r" | 1596 | check_no_diagnostic( |
1597 | r" | ||
1599 | enum Either<T> { | 1598 | enum Either<T> { |
1600 | A(T), | 1599 | A(T), |
1601 | B, | 1600 | B, |
@@ -1609,14 +1608,14 @@ mod tests { | |||
1609 | Either::B => 0, | 1608 | Either::B => 0, |
1610 | } | 1609 | } |
1611 | } | 1610 | } |
1612 | "; | 1611 | ", |
1613 | 1612 | ); | |
1614 | check_no_diagnostic(content); | ||
1615 | } | 1613 | } |
1616 | 1614 | ||
1617 | #[test] | 1615 | #[test] |
1618 | fn enum_record_no_arms() { | 1616 | fn enum_record_no_arms() { |
1619 | let content = r" | 1617 | check_diagnostic( |
1618 | r" | ||
1620 | enum Either { | 1619 | enum Either { |
1621 | A { foo: bool }, | 1620 | A { foo: bool }, |
1622 | B, | 1621 | B, |
@@ -1626,14 +1625,14 @@ mod tests { | |||
1626 | match a { | 1625 | match a { |
1627 | } | 1626 | } |
1628 | } | 1627 | } |
1629 | "; | 1628 | ", |
1630 | 1629 | ); | |
1631 | check_diagnostic(content); | ||
1632 | } | 1630 | } |
1633 | 1631 | ||
1634 | #[test] | 1632 | #[test] |
1635 | fn enum_record_missing_arms() { | 1633 | fn enum_record_missing_arms() { |
1636 | let content = r" | 1634 | check_diagnostic( |
1635 | r" | ||
1637 | enum Either { | 1636 | enum Either { |
1638 | A { foo: bool }, | 1637 | A { foo: bool }, |
1639 | B, | 1638 | B, |
@@ -1644,14 +1643,14 @@ mod tests { | |||
1644 | Either::A { foo: true } => (), | 1643 | Either::A { foo: true } => (), |
1645 | } | 1644 | } |
1646 | } | 1645 | } |
1647 | "; | 1646 | ", |
1648 | 1647 | ); | |
1649 | check_diagnostic(content); | ||
1650 | } | 1648 | } |
1651 | 1649 | ||
1652 | #[test] | 1650 | #[test] |
1653 | fn enum_record_no_diagnostic() { | 1651 | fn enum_record_no_diagnostic() { |
1654 | let content = r" | 1652 | check_no_diagnostic( |
1653 | r" | ||
1655 | enum Either { | 1654 | enum Either { |
1656 | A { foo: bool }, | 1655 | A { foo: bool }, |
1657 | B, | 1656 | B, |
@@ -1664,14 +1663,17 @@ mod tests { | |||
1664 | Either::B => (), | 1663 | Either::B => (), |
1665 | } | 1664 | } |
1666 | } | 1665 | } |
1667 | "; | 1666 | ", |
1668 | 1667 | ); | |
1669 | check_no_diagnostic(content); | ||
1670 | } | 1668 | } |
1671 | 1669 | ||
1672 | #[test] | 1670 | #[test] |
1673 | fn enum_record_missing_field_no_diagnostic() { | 1671 | fn enum_record_missing_field_no_diagnostic() { |
1674 | let content = r" | 1672 | // When `Either::A` is missing a struct member, we don't want |
1673 | // to fire the missing match arm diagnostic. This should fire | ||
1674 | // some other diagnostic. | ||
1675 | check_no_diagnostic( | ||
1676 | r" | ||
1675 | enum Either { | 1677 | enum Either { |
1676 | A { foo: bool }, | 1678 | A { foo: bool }, |
1677 | B, | 1679 | B, |
@@ -1683,17 +1685,16 @@ mod tests { | |||
1683 | Either::B => (), | 1685 | Either::B => (), |
1684 | } | 1686 | } |
1685 | } | 1687 | } |
1686 | "; | 1688 | ", |
1687 | 1689 | ); | |
1688 | // When `Either::A` is missing a struct member, we don't want | ||
1689 | // to fire the missing match arm diagnostic. This should fire | ||
1690 | // some other diagnostic. | ||
1691 | check_no_diagnostic(content); | ||
1692 | } | 1690 | } |
1693 | 1691 | ||
1694 | #[test] | 1692 | #[test] |
1695 | fn enum_record_missing_field_missing_match_arm() { | 1693 | fn enum_record_missing_field_missing_match_arm() { |
1696 | let content = r" | 1694 | // Even though `Either::A` is missing fields, we still want to fire |
1695 | // the missing arm diagnostic here, since we know `Either::B` is missing. | ||
1696 | check_diagnostic( | ||
1697 | r" | ||
1697 | enum Either { | 1698 | enum Either { |
1698 | A { foo: bool }, | 1699 | A { foo: bool }, |
1699 | B, | 1700 | B, |
@@ -1704,16 +1705,14 @@ mod tests { | |||
1704 | Either::A { } => (), | 1705 | Either::A { } => (), |
1705 | } | 1706 | } |
1706 | } | 1707 | } |
1707 | "; | 1708 | ", |
1708 | 1709 | ); | |
1709 | // Even though `Either::A` is missing fields, we still want to fire | ||
1710 | // the missing arm diagnostic here, since we know `Either::B` is missing. | ||
1711 | check_diagnostic(content); | ||
1712 | } | 1710 | } |
1713 | 1711 | ||
1714 | #[test] | 1712 | #[test] |
1715 | fn enum_record_no_diagnostic_wild() { | 1713 | fn enum_record_no_diagnostic_wild() { |
1716 | let content = r" | 1714 | check_no_diagnostic( |
1715 | r" | ||
1717 | enum Either { | 1716 | enum Either { |
1718 | A { foo: bool }, | 1717 | A { foo: bool }, |
1719 | B, | 1718 | B, |
@@ -1725,14 +1724,14 @@ mod tests { | |||
1725 | Either::B => (), | 1724 | Either::B => (), |
1726 | } | 1725 | } |
1727 | } | 1726 | } |
1728 | "; | 1727 | ", |
1729 | 1728 | ); | |
1730 | check_no_diagnostic(content); | ||
1731 | } | 1729 | } |
1732 | 1730 | ||
1733 | #[test] | 1731 | #[test] |
1734 | fn enum_record_fields_out_of_order_missing_arm() { | 1732 | fn enum_record_fields_out_of_order_missing_arm() { |
1735 | let content = r" | 1733 | check_diagnostic( |
1734 | r" | ||
1736 | enum Either { | 1735 | enum Either { |
1737 | A { foo: bool, bar: () }, | 1736 | A { foo: bool, bar: () }, |
1738 | B, | 1737 | B, |
@@ -1744,14 +1743,14 @@ mod tests { | |||
1744 | Either::A { foo: true, bar: () } => (), | 1743 | Either::A { foo: true, bar: () } => (), |
1745 | } | 1744 | } |
1746 | } | 1745 | } |
1747 | "; | 1746 | ", |
1748 | 1747 | ); | |
1749 | check_diagnostic(content); | ||
1750 | } | 1748 | } |
1751 | 1749 | ||
1752 | #[test] | 1750 | #[test] |
1753 | fn enum_record_fields_out_of_order_no_diagnostic() { | 1751 | fn enum_record_fields_out_of_order_no_diagnostic() { |
1754 | let content = r" | 1752 | check_no_diagnostic( |
1753 | r" | ||
1755 | enum Either { | 1754 | enum Either { |
1756 | A { foo: bool, bar: () }, | 1755 | A { foo: bool, bar: () }, |
1757 | B, | 1756 | B, |
@@ -1764,89 +1763,89 @@ mod tests { | |||
1764 | Either::B => (), | 1763 | Either::B => (), |
1765 | } | 1764 | } |
1766 | } | 1765 | } |
1767 | "; | 1766 | ", |
1768 | 1767 | ); | |
1769 | check_no_diagnostic(content); | ||
1770 | } | 1768 | } |
1771 | 1769 | ||
1772 | #[test] | 1770 | #[test] |
1773 | fn enum_record_ellipsis_missing_arm() { | 1771 | fn enum_record_ellipsis_missing_arm() { |
1774 | let content = r" | 1772 | check_diagnostic( |
1775 | enum Either { | 1773 | r" |
1776 | A { foo: bool, bar: bool }, | 1774 | enum Either { |
1777 | B, | 1775 | A { foo: bool, bar: bool }, |
1778 | } | 1776 | B, |
1779 | fn test_fn() { | 1777 | } |
1780 | match Either::B { | 1778 | fn test_fn() { |
1781 | Either::A { foo: true, .. } => (), | 1779 | match Either::B { |
1782 | Either::B => (), | 1780 | Either::A { foo: true, .. } => (), |
1783 | } | 1781 | Either::B => (), |
1784 | } | 1782 | } |
1785 | "; | 1783 | } |
1786 | 1784 | ", | |
1787 | check_diagnostic(content); | 1785 | ); |
1788 | } | 1786 | } |
1789 | 1787 | ||
1790 | #[test] | 1788 | #[test] |
1791 | fn enum_record_ellipsis_no_diagnostic() { | 1789 | fn enum_record_ellipsis_no_diagnostic() { |
1792 | let content = r" | 1790 | check_no_diagnostic( |
1793 | enum Either { | 1791 | r" |
1794 | A { foo: bool, bar: bool }, | 1792 | enum Either { |
1795 | B, | 1793 | A { foo: bool, bar: bool }, |
1796 | } | 1794 | B, |
1797 | fn test_fn() { | 1795 | } |
1798 | let a = Either::A { foo: true }; | 1796 | fn test_fn() { |
1799 | match a { | 1797 | let a = Either::A { foo: true }; |
1800 | Either::A { foo: true, .. } => (), | 1798 | match a { |
1801 | Either::A { foo: false, .. } => (), | 1799 | Either::A { foo: true, .. } => (), |
1802 | Either::B => (), | 1800 | Either::A { foo: false, .. } => (), |
1803 | } | 1801 | Either::B => (), |
1804 | } | 1802 | } |
1805 | "; | 1803 | } |
1806 | 1804 | ", | |
1807 | check_no_diagnostic(content); | 1805 | ); |
1808 | } | 1806 | } |
1809 | 1807 | ||
1810 | #[test] | 1808 | #[test] |
1811 | fn enum_record_ellipsis_all_fields_missing_arm() { | 1809 | fn enum_record_ellipsis_all_fields_missing_arm() { |
1812 | let content = r" | 1810 | check_diagnostic( |
1813 | enum Either { | 1811 | r" |
1814 | A { foo: bool, bar: bool }, | 1812 | enum Either { |
1815 | B, | 1813 | A { foo: bool, bar: bool }, |
1816 | } | 1814 | B, |
1817 | fn test_fn() { | 1815 | } |
1818 | let a = Either::B; | 1816 | fn test_fn() { |
1819 | match a { | 1817 | let a = Either::B; |
1820 | Either::A { .. } => (), | 1818 | match a { |
1821 | } | 1819 | Either::A { .. } => (), |
1822 | } | 1820 | } |
1823 | "; | 1821 | } |
1824 | 1822 | ", | |
1825 | check_diagnostic(content); | 1823 | ); |
1826 | } | 1824 | } |
1827 | 1825 | ||
1828 | #[test] | 1826 | #[test] |
1829 | fn enum_record_ellipsis_all_fields_no_diagnostic() { | 1827 | fn enum_record_ellipsis_all_fields_no_diagnostic() { |
1830 | let content = r" | 1828 | check_no_diagnostic( |
1831 | enum Either { | 1829 | r" |
1832 | A { foo: bool, bar: bool }, | 1830 | enum Either { |
1833 | B, | 1831 | A { foo: bool, bar: bool }, |
1834 | } | 1832 | B, |
1835 | fn test_fn() { | 1833 | } |
1836 | let a = Either::B; | 1834 | fn test_fn() { |
1837 | match a { | 1835 | let a = Either::B; |
1838 | Either::A { .. } => (), | 1836 | match a { |
1839 | Either::B => (), | 1837 | Either::A { .. } => (), |
1840 | } | 1838 | Either::B => (), |
1841 | } | 1839 | } |
1842 | "; | 1840 | } |
1843 | 1841 | ", | |
1844 | check_no_diagnostic(content); | 1842 | ); |
1845 | } | 1843 | } |
1846 | 1844 | ||
1847 | #[test] | 1845 | #[test] |
1848 | fn enum_tuple_partial_ellipsis_no_diagnostic() { | 1846 | fn enum_tuple_partial_ellipsis_no_diagnostic() { |
1849 | let content = r" | 1847 | check_no_diagnostic( |
1848 | r" | ||
1850 | enum Either { | 1849 | enum Either { |
1851 | A(bool, bool, bool, bool), | 1850 | A(bool, bool, bool, bool), |
1852 | B, | 1851 | B, |
@@ -1860,14 +1859,14 @@ mod tests { | |||
1860 | Either::B => {}, | 1859 | Either::B => {}, |
1861 | } | 1860 | } |
1862 | } | 1861 | } |
1863 | "; | 1862 | ", |
1864 | 1863 | ); | |
1865 | check_no_diagnostic(content); | ||
1866 | } | 1864 | } |
1867 | 1865 | ||
1868 | #[test] | 1866 | #[test] |
1869 | fn enum_tuple_partial_ellipsis_2_no_diagnostic() { | 1867 | fn enum_tuple_partial_ellipsis_2_no_diagnostic() { |
1870 | let content = r" | 1868 | check_no_diagnostic( |
1869 | r" | ||
1871 | enum Either { | 1870 | enum Either { |
1872 | A(bool, bool, bool, bool), | 1871 | A(bool, bool, bool, bool), |
1873 | B, | 1872 | B, |
@@ -1881,14 +1880,14 @@ mod tests { | |||
1881 | Either::B => {}, | 1880 | Either::B => {}, |
1882 | } | 1881 | } |
1883 | } | 1882 | } |
1884 | "; | 1883 | ", |
1885 | 1884 | ); | |
1886 | check_no_diagnostic(content); | ||
1887 | } | 1885 | } |
1888 | 1886 | ||
1889 | #[test] | 1887 | #[test] |
1890 | fn enum_tuple_partial_ellipsis_missing_arm() { | 1888 | fn enum_tuple_partial_ellipsis_missing_arm() { |
1891 | let content = r" | 1889 | check_diagnostic( |
1890 | r" | ||
1892 | enum Either { | 1891 | enum Either { |
1893 | A(bool, bool, bool, bool), | 1892 | A(bool, bool, bool, bool), |
1894 | B, | 1893 | B, |
@@ -1901,14 +1900,14 @@ mod tests { | |||
1901 | Either::B => {}, | 1900 | Either::B => {}, |
1902 | } | 1901 | } |
1903 | } | 1902 | } |
1904 | "; | 1903 | ", |
1905 | 1904 | ); | |
1906 | check_diagnostic(content); | ||
1907 | } | 1905 | } |
1908 | 1906 | ||
1909 | #[test] | 1907 | #[test] |
1910 | fn enum_tuple_partial_ellipsis_2_missing_arm() { | 1908 | fn enum_tuple_partial_ellipsis_2_missing_arm() { |
1911 | let content = r" | 1909 | check_diagnostic( |
1910 | r" | ||
1912 | enum Either { | 1911 | enum Either { |
1913 | A(bool, bool, bool, bool), | 1912 | A(bool, bool, bool, bool), |
1914 | B, | 1913 | B, |
@@ -1921,14 +1920,14 @@ mod tests { | |||
1921 | Either::B => {}, | 1920 | Either::B => {}, |
1922 | } | 1921 | } |
1923 | } | 1922 | } |
1924 | "; | 1923 | ", |
1925 | 1924 | ); | |
1926 | check_diagnostic(content); | ||
1927 | } | 1925 | } |
1928 | 1926 | ||
1929 | #[test] | 1927 | #[test] |
1930 | fn enum_tuple_ellipsis_no_diagnostic() { | 1928 | fn enum_tuple_ellipsis_no_diagnostic() { |
1931 | let content = r" | 1929 | check_no_diagnostic( |
1930 | r" | ||
1932 | enum Either { | 1931 | enum Either { |
1933 | A(bool, bool, bool, bool), | 1932 | A(bool, bool, bool, bool), |
1934 | B, | 1933 | B, |
@@ -1939,51 +1938,51 @@ mod tests { | |||
1939 | Either::B => {}, | 1938 | Either::B => {}, |
1940 | } | 1939 | } |
1941 | } | 1940 | } |
1942 | "; | 1941 | ", |
1943 | 1942 | ); | |
1944 | check_no_diagnostic(content); | ||
1945 | } | 1943 | } |
1946 | 1944 | ||
1947 | #[test] | 1945 | #[test] |
1948 | fn enum_never() { | 1946 | fn enum_never() { |
1949 | let content = r" | 1947 | check_no_diagnostic( |
1948 | r" | ||
1950 | enum Never {} | 1949 | enum Never {} |
1951 | 1950 | ||
1952 | fn test_fn(never: Never) { | 1951 | fn test_fn(never: Never) { |
1953 | match never {} | 1952 | match never {} |
1954 | } | 1953 | } |
1955 | "; | 1954 | ", |
1956 | 1955 | ); | |
1957 | check_no_diagnostic(content); | ||
1958 | } | 1956 | } |
1959 | 1957 | ||
1960 | #[test] | 1958 | #[test] |
1961 | fn type_never() { | 1959 | fn type_never() { |
1962 | let content = r" | 1960 | check_no_diagnostic( |
1961 | r" | ||
1963 | fn test_fn(never: !) { | 1962 | fn test_fn(never: !) { |
1964 | match never {} | 1963 | match never {} |
1965 | } | 1964 | } |
1966 | "; | 1965 | ", |
1967 | 1966 | ); | |
1968 | check_no_diagnostic(content); | ||
1969 | } | 1967 | } |
1970 | 1968 | ||
1971 | #[test] | 1969 | #[test] |
1972 | fn enum_never_ref() { | 1970 | fn enum_never_ref() { |
1973 | let content = r" | 1971 | check_no_diagnostic( |
1972 | r" | ||
1974 | enum Never {} | 1973 | enum Never {} |
1975 | 1974 | ||
1976 | fn test_fn(never: &Never) { | 1975 | fn test_fn(never: &Never) { |
1977 | match never {} | 1976 | match never {} |
1978 | } | 1977 | } |
1979 | "; | 1978 | ", |
1980 | 1979 | ); | |
1981 | check_no_diagnostic(content); | ||
1982 | } | 1980 | } |
1983 | 1981 | ||
1984 | #[test] | 1982 | #[test] |
1985 | fn expr_diverges_missing_arm() { | 1983 | fn expr_diverges_missing_arm() { |
1986 | let content = r" | 1984 | check_no_diagnostic( |
1985 | r" | ||
1987 | enum Either { | 1986 | enum Either { |
1988 | A, | 1987 | A, |
1989 | B, | 1988 | B, |
@@ -1993,14 +1992,14 @@ mod tests { | |||
1993 | Either::A => (), | 1992 | Either::A => (), |
1994 | } | 1993 | } |
1995 | } | 1994 | } |
1996 | "; | 1995 | ", |
1997 | 1996 | ); | |
1998 | check_no_diagnostic(content); | ||
1999 | } | 1997 | } |
2000 | 1998 | ||
2001 | #[test] | 1999 | #[test] |
2002 | fn or_pattern_panic() { | 2000 | fn or_pattern_panic() { |
2003 | let content = r" | 2001 | check_no_diagnostic( |
2002 | r" | ||
2004 | pub enum Category { | 2003 | pub enum Category { |
2005 | Infinity, | 2004 | Infinity, |
2006 | Zero, | 2005 | Zero, |
@@ -2012,9 +2011,8 @@ mod tests { | |||
2012 | (_, Category::Zero | Category::Infinity) => {} | 2011 | (_, Category::Zero | Category::Infinity) => {} |
2013 | } | 2012 | } |
2014 | } | 2013 | } |
2015 | "; | 2014 | ", |
2016 | 2015 | ); | |
2017 | check_no_diagnostic(content); | ||
2018 | } | 2016 | } |
2019 | } | 2017 | } |
2020 | 2018 | ||
@@ -2034,23 +2032,26 @@ mod false_negatives { | |||
2034 | 2032 | ||
2035 | #[test] | 2033 | #[test] |
2036 | fn integers() { | 2034 | fn integers() { |
2037 | let content = r" | 2035 | // This is a false negative. |
2036 | // We don't currently check integer exhaustiveness. | ||
2037 | check_no_diagnostic( | ||
2038 | r" | ||
2038 | fn test_fn() { | 2039 | fn test_fn() { |
2039 | match 5 { | 2040 | match 5 { |
2040 | 10 => (), | 2041 | 10 => (), |
2041 | 11..20 => (), | 2042 | 11..20 => (), |
2042 | } | 2043 | } |
2043 | } | 2044 | } |
2044 | "; | 2045 | ", |
2045 | 2046 | ); | |
2046 | // This is a false negative. | ||
2047 | // We don't currently check integer exhaustiveness. | ||
2048 | check_no_diagnostic(content); | ||
2049 | } | 2047 | } |
2050 | 2048 | ||
2051 | #[test] | 2049 | #[test] |
2052 | fn internal_or() { | 2050 | fn internal_or() { |
2053 | let content = r" | 2051 | // This is a false negative. |
2052 | // We do not currently handle patterns with internal `or`s. | ||
2053 | check_no_diagnostic( | ||
2054 | r" | ||
2054 | fn test_fn() { | 2055 | fn test_fn() { |
2055 | enum Either { | 2056 | enum Either { |
2056 | A(bool), | 2057 | A(bool), |
@@ -2060,16 +2061,18 @@ mod false_negatives { | |||
2060 | Either::A(true | false) => (), | 2061 | Either::A(true | false) => (), |
2061 | } | 2062 | } |
2062 | } | 2063 | } |
2063 | "; | 2064 | ", |
2064 | 2065 | ); | |
2065 | // This is a false negative. | ||
2066 | // We do not currently handle patterns with internal `or`s. | ||
2067 | check_no_diagnostic(content); | ||
2068 | } | 2066 | } |
2069 | 2067 | ||
2070 | #[test] | 2068 | #[test] |
2071 | fn expr_loop_missing_arm() { | 2069 | fn expr_loop_missing_arm() { |
2072 | let content = r" | 2070 | // This is a false negative. |
2071 | // We currently infer the type of `loop { break Foo::A }` to `!`, which | ||
2072 | // causes us to skip the diagnostic since `Either::A` doesn't type check | ||
2073 | // with `!`. | ||
2074 | check_diagnostic( | ||
2075 | r" | ||
2073 | enum Either { | 2076 | enum Either { |
2074 | A, | 2077 | A, |
2075 | B, | 2078 | B, |
@@ -2079,48 +2082,46 @@ mod false_negatives { | |||
2079 | Either::A => (), | 2082 | Either::A => (), |
2080 | } | 2083 | } |
2081 | } | 2084 | } |
2082 | "; | 2085 | ", |
2083 | 2086 | ); | |
2084 | // This is a false negative. | ||
2085 | // We currently infer the type of `loop { break Foo::A }` to `!`, which | ||
2086 | // causes us to skip the diagnostic since `Either::A` doesn't type check | ||
2087 | // with `!`. | ||
2088 | check_diagnostic(content); | ||
2089 | } | 2087 | } |
2090 | 2088 | ||
2091 | #[test] | 2089 | #[test] |
2092 | fn tuple_of_bools_with_ellipsis_at_end_missing_arm() { | 2090 | fn tuple_of_bools_with_ellipsis_at_end_missing_arm() { |
2093 | let content = r" | 2091 | // This is a false negative. |
2092 | // We don't currently handle tuple patterns with ellipsis. | ||
2093 | check_no_diagnostic( | ||
2094 | r" | ||
2094 | fn test_fn() { | 2095 | fn test_fn() { |
2095 | match (false, true, false) { | 2096 | match (false, true, false) { |
2096 | (false, ..) => {}, | 2097 | (false, ..) => {}, |
2097 | } | 2098 | } |
2098 | } | 2099 | } |
2099 | "; | 2100 | ", |
2100 | 2101 | ); | |
2101 | // This is a false negative. | ||
2102 | // We don't currently handle tuple patterns with ellipsis. | ||
2103 | check_no_diagnostic(content); | ||
2104 | } | 2102 | } |
2105 | 2103 | ||
2106 | #[test] | 2104 | #[test] |
2107 | fn tuple_of_bools_with_ellipsis_at_beginning_missing_arm() { | 2105 | fn tuple_of_bools_with_ellipsis_at_beginning_missing_arm() { |
2108 | let content = r" | 2106 | // This is a false negative. |
2107 | // We don't currently handle tuple patterns with ellipsis. | ||
2108 | check_no_diagnostic( | ||
2109 | r" | ||
2109 | fn test_fn() { | 2110 | fn test_fn() { |
2110 | match (false, true, false) { | 2111 | match (false, true, false) { |
2111 | (.., false) => {}, | 2112 | (.., false) => {}, |
2112 | } | 2113 | } |
2113 | } | 2114 | } |
2114 | "; | 2115 | ", |
2115 | 2116 | ); | |
2116 | // This is a false negative. | ||
2117 | // We don't currently handle tuple patterns with ellipsis. | ||
2118 | check_no_diagnostic(content); | ||
2119 | } | 2117 | } |
2120 | 2118 | ||
2121 | #[test] | 2119 | #[test] |
2122 | fn struct_missing_arm() { | 2120 | fn struct_missing_arm() { |
2123 | let content = r" | 2121 | // This is a false negative. |
2122 | // We don't currently handle structs. | ||
2123 | check_no_diagnostic( | ||
2124 | r" | ||
2124 | struct Foo { | 2125 | struct Foo { |
2125 | a: bool, | 2126 | a: bool, |
2126 | } | 2127 | } |
@@ -2129,10 +2130,7 @@ mod false_negatives { | |||
2129 | Foo { a: true } => {}, | 2130 | Foo { a: true } => {}, |
2130 | } | 2131 | } |
2131 | } | 2132 | } |
2132 | "; | 2133 | ", |
2133 | 2134 | ); | |
2134 | // This is a false negative. | ||
2135 | // We don't currently handle structs. | ||
2136 | check_no_diagnostic(content); | ||
2137 | } | 2135 | } |
2138 | } | 2136 | } |