Skip to content

Commit fc84732

Browse files
committed
Add test cases for #10583
1 parent 2e13684 commit fc84732

File tree

1 file changed

+357
-0
lines changed

1 file changed

+357
-0
lines changed

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

Lines changed: 357 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,363 @@ fn foo(x: Result<i32, ()>) {
728728
);
729729
}
730730

731+
#[test]
732+
fn test_if_let_with_match_variant_nested_or_literal() {
733+
check_assist(
734+
replace_if_let_with_match,
735+
r#"
736+
//- minicore: result
737+
fn foo(x: Result<&[i32], ()>) {
738+
let foo: Result<&[_], ()> = Ok(&[0, 1, 2]);
739+
$0if let Ok([]) = foo {
740+
()
741+
} else {
742+
()
743+
}
744+
}
745+
"#,
746+
r#"
747+
fn foo(x: Result<&[i32], ()>) {
748+
let foo: Result<&[_], ()> = Ok(&[0, 1, 2]);
749+
match foo {
750+
Ok([]) => (),
751+
_ => (),
752+
}
753+
}
754+
"#,
755+
);
756+
757+
check_assist(
758+
replace_if_let_with_match,
759+
r#"
760+
//- minicore: result
761+
fn foo(x: Result<&'static str, ()>) {
762+
let bar: Result<&_, ()> = Ok("bar");
763+
$0if let Ok("foo") = bar {
764+
()
765+
} else {
766+
()
767+
}
768+
}
769+
"#,
770+
r#"
771+
fn foo(x: Result<&'static str, ()>) {
772+
let bar: Result<&_, ()> = Ok("bar");
773+
match bar {
774+
Ok("foo") => (),
775+
_ => (),
776+
}
777+
}
778+
"#,
779+
);
780+
781+
check_assist(
782+
replace_if_let_with_match,
783+
r#"
784+
//- minicore: result
785+
fn foo(x: Result<[&'static str; 2], ()>) {
786+
let foobar: Result<_, ()> = Ok(["foo", "bar"]);
787+
$0if let Ok([_, "bar"]) = foobar {
788+
()
789+
} else {
790+
()
791+
}
792+
}
793+
"#,
794+
r#"
795+
fn foo(x: Result<[&'static str; 2], ()>) {
796+
let foobar: Result<_, ()> = Ok(["foo", "bar"]);
797+
match foobar {
798+
Ok([_, "bar"]) => (),
799+
_ => (),
800+
}
801+
}
802+
"#,
803+
);
804+
805+
check_assist(
806+
replace_if_let_with_match,
807+
r#"
808+
//- minicore: result
809+
fn foo(x: Result<Option<[&'static str; 2]>, ()>) {
810+
let foobar: Result<_, ()> = Ok(Some(["foo", "bar"]));
811+
$0if let Ok(Some([_, "bar"])) = foobar {
812+
()
813+
} else {
814+
()
815+
}
816+
}
817+
"#,
818+
r#"
819+
fn foo(x: Result<Option<[&'static str; 2]>, ()>) {
820+
let foobar: Result<_, ()> = Ok(Some(["foo", "bar"]));
821+
match foobar {
822+
Ok(Some([_, "bar"])) => (),
823+
_ => (),
824+
}
825+
}
826+
"#,
827+
);
828+
829+
check_assist(
830+
replace_if_let_with_match,
831+
r#"
832+
//- minicore: result
833+
fn foo(x: Result<(i32, i32, i32), ()>) {
834+
let bar: Result<(i32, i32, i32), ()> = Ok((1, 2, 3));
835+
$0if let Ok((1, second, third)) = bar {
836+
()
837+
} else {
838+
()
839+
}
840+
}
841+
"#,
842+
r#"
843+
fn foo(x: Result<(i32, i32, i32), ()>) {
844+
let bar: Result<(i32, i32, i32), ()> = Ok((1, 2, 3));
845+
match bar {
846+
Ok((1, second, third)) => (),
847+
_ => (),
848+
}
849+
}
850+
"#,
851+
);
852+
853+
check_assist(
854+
replace_if_let_with_match,
855+
r#"
856+
//- minicore: result
857+
fn foo(x: Result<i32, ()>) {
858+
let bar: Result<i32, ()> = Ok(1);
859+
$0if let Ok(1 | 2) = bar {
860+
()
861+
} else {
862+
()
863+
}
864+
}
865+
"#,
866+
r#"
867+
fn foo(x: Result<i32, ()>) {
868+
let bar: Result<i32, ()> = Ok(1);
869+
match bar {
870+
Ok(1 | 2) => (),
871+
_ => (),
872+
}
873+
}
874+
"#,
875+
);
876+
877+
check_assist(
878+
replace_if_let_with_match,
879+
r#"
880+
//- minicore: result
881+
fn foo(x: Result<i32, ()>) {
882+
let bar: Result<i32, ()> = Ok(1);
883+
$0if let Ok(1..2) = bar {
884+
()
885+
} else {
886+
()
887+
}
888+
}
889+
"#,
890+
r#"
891+
fn foo(x: Result<i32, ()>) {
892+
let bar: Result<i32, ()> = Ok(1);
893+
match bar {
894+
Ok(1..2) => (),
895+
_ => (),
896+
}
897+
}
898+
"#,
899+
);
900+
901+
check_assist(
902+
replace_if_let_with_match,
903+
r#"
904+
//- minicore: result
905+
fn foo(x: Result<(i32, i32), ()>) {
906+
let bar: Result<(i32, i32), ()> = Ok((1, 1));
907+
$0if let Ok(((1, 2))) = bar {
908+
()
909+
} else {
910+
()
911+
}
912+
}
913+
"#,
914+
r#"
915+
fn foo(x: Result<(i32, i32), ()>) {
916+
let bar: Result<(i32, i32), ()> = Ok((1, 1));
917+
match bar {
918+
Ok(((1, 2))) => (),
919+
_ => (),
920+
}
921+
}
922+
"#,
923+
);
924+
925+
check_assist(
926+
replace_if_let_with_match,
927+
r#"
928+
//- minicore: result
929+
fn foo(x: Result<(i32, i32), ()>) {
930+
let bar: Result<(i32, i32), ()> = Ok((1, 1));
931+
$0if let Ok(((a, b))) = bar {
932+
()
933+
} else {
934+
()
935+
}
936+
}
937+
"#,
938+
r#"
939+
fn foo(x: Result<(i32, i32), ()>) {
940+
let bar: Result<(i32, i32), ()> = Ok((1, 1));
941+
match bar {
942+
Ok(((a, b))) => (),
943+
Err(_) => (),
944+
}
945+
}
946+
"#,
947+
);
948+
949+
check_assist(
950+
replace_if_let_with_match,
951+
r#"
952+
//- minicore: result
953+
fn foo(x: Result<i32, ()>) {
954+
macro_rules! is_42 {
955+
() => {
956+
42
957+
};
958+
}
959+
960+
let bar: Result<i32, ()> = Ok(1);
961+
$0if let Ok(is_42!()) = bar {
962+
()
963+
} else {
964+
()
965+
}
966+
}
967+
"#,
968+
r#"
969+
fn foo(x: Result<i32, ()>) {
970+
macro_rules! is_42 {
971+
() => {
972+
42
973+
};
974+
}
975+
976+
let bar: Result<i32, ()> = Ok(1);
977+
match bar {
978+
Ok(is_42!()) => (),
979+
_ => (),
980+
}
981+
}
982+
"#,
983+
);
984+
985+
check_assist(
986+
replace_if_let_with_match,
987+
r#"
988+
//- minicore: result
989+
enum MyEnum {
990+
Foo,
991+
Bar,
992+
}
993+
994+
fn foo(x: Result<MyEnum, ()>) {
995+
let bar: Result<MyEnum, ()> = Ok(MyEnum::Foo);
996+
$0if let Ok(MyEnum::Foo) = bar {
997+
()
998+
} else {
999+
()
1000+
}
1001+
}
1002+
"#,
1003+
r#"
1004+
enum MyEnum {
1005+
Foo,
1006+
Bar,
1007+
}
1008+
1009+
fn foo(x: Result<MyEnum, ()>) {
1010+
let bar: Result<MyEnum, ()> = Ok(MyEnum::Foo);
1011+
match bar {
1012+
Ok(MyEnum::Foo) => (),
1013+
_ => (),
1014+
}
1015+
}
1016+
"#,
1017+
);
1018+
1019+
check_assist(
1020+
replace_if_let_with_match,
1021+
r#"
1022+
//- minicore: result
1023+
struct MyStruct {
1024+
foo: i32,
1025+
bar: i32,
1026+
}
1027+
1028+
fn foo(x: Result<MyStruct, ()>) {
1029+
let bar: Result<MyStruct, ()> = Ok(MyStruct { foo: 1, bar: 2 });
1030+
$0if let Ok(MyStruct { foo, bar }) = bar {
1031+
()
1032+
} else {
1033+
()
1034+
}
1035+
}
1036+
"#,
1037+
r#"
1038+
struct MyStruct {
1039+
foo: i32,
1040+
bar: i32,
1041+
}
1042+
1043+
fn foo(x: Result<MyStruct, ()>) {
1044+
let bar: Result<MyStruct, ()> = Ok(MyStruct { foo: 1, bar: 2 });
1045+
match bar {
1046+
Ok(MyStruct { foo, bar }) => (),
1047+
Err(_) => (),
1048+
}
1049+
}
1050+
"#,
1051+
);
1052+
1053+
check_assist(
1054+
replace_if_let_with_match,
1055+
r#"
1056+
//- minicore: result
1057+
struct MyStruct {
1058+
foo: i32,
1059+
bar: i32,
1060+
}
1061+
1062+
fn foo(x: Result<MyStruct, ()>) {
1063+
let bar: Result<MyStruct, ()> = Ok(MyStruct { foo: 1, bar: 2 });
1064+
$0if let Ok(MyStruct { foo, bar: 12 }) = bar {
1065+
()
1066+
} else {
1067+
()
1068+
}
1069+
}
1070+
"#,
1071+
r#"
1072+
struct MyStruct {
1073+
foo: i32,
1074+
bar: i32,
1075+
}
1076+
1077+
fn foo(x: Result<MyStruct, ()>) {
1078+
let bar: Result<MyStruct, ()> = Ok(MyStruct { foo: 1, bar: 2 });
1079+
match bar {
1080+
Ok(MyStruct { foo, bar: 12 }) => (),
1081+
_ => (),
1082+
}
1083+
}
1084+
"#,
1085+
);
1086+
}
1087+
7311088
#[test]
7321089
fn test_replace_match_with_if_let_unwraps_simple_expressions() {
7331090
check_assist(

0 commit comments

Comments
 (0)