Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/context/tests.rs')
-rw-r--r--crates/ide-completion/src/context/tests.rs161
1 files changed, 161 insertions, 0 deletions
diff --git a/crates/ide-completion/src/context/tests.rs b/crates/ide-completion/src/context/tests.rs
index 51d28bd4ff..e97d9720e3 100644
--- a/crates/ide-completion/src/context/tests.rs
+++ b/crates/ide-completion/src/context/tests.rs
@@ -90,6 +90,20 @@ fn bar(x: u32) {}
"#,
expect![[r#"ty: u32, name: x"#]],
);
+ check_expected_type_and_name(
+ r#"
+fn foo() { bar(, $0); }
+fn bar(x: u32, y: i32) {}
+"#,
+ expect![[r#"ty: i32, name: y"#]],
+ );
+ check_expected_type_and_name(
+ r#"
+fn foo() { bar(, c$0); }
+fn bar(x: u32, y: i32) {}
+"#,
+ expect![[r#"ty: i32, name: y"#]],
+ );
}
#[test]
@@ -133,6 +147,18 @@ fn bar(x: &u32) {}
}
#[test]
+fn expected_type_fn_param_deref() {
+ cov_mark::check!(expected_type_fn_param_deref);
+ check_expected_type_and_name(
+ r#"
+fn foo() { bar(*$0); }
+fn bar(x: &u32) {}
+"#,
+ expect!["ty: &'_ &'_ u32, name: x"],
+ );
+}
+
+#[test]
fn expected_type_struct_field_without_leading_char() {
cov_mark::check!(expected_type_struct_field_without_leading_char);
check_expected_type_and_name(
@@ -231,6 +257,22 @@ fn foo() -> Foo {
}
#[test]
+fn expected_type_match_arm_block_body_without_leading_char() {
+ cov_mark::check!(expected_type_match_arm_body_without_leading_char);
+ cov_mark::check!(expected_type_match_arm_body_with_leading_char);
+ check_expected_type_and_name(
+ r#"
+struct Foo;
+enum E { X }
+fn foo() -> Foo {
+ match E::X { Foo::X => { $0 } }
+}
+"#,
+ expect![[r#"ty: Foo, name: ?"#]],
+ );
+}
+
+#[test]
fn expected_type_match_body_arm_with_leading_char() {
cov_mark::check!(expected_type_match_arm_body_with_leading_char);
check_expected_type_and_name(
@@ -594,6 +636,125 @@ fn foo() {
}
#[test]
+fn expected_type_break_expr_in_loop() {
+ check_expected_type_and_name(
+ r#"
+enum State { Stop }
+fn foo() {
+ let _x: State = loop {
+ {
+ break State::Stop;
+ break $0;
+ }
+ };
+}
+"#,
+ expect![[r#"ty: State, name: ?"#]],
+ );
+
+ check_expected_type_and_name(
+ r#"
+enum State { Stop }
+fn foo() {
+ let _x: State = 'a: loop {
+ {
+ break State::Stop;
+ break $0;
+ }
+ };
+}
+"#,
+ expect![[r#"ty: State, name: ?"#]],
+ );
+
+ check_expected_type_and_name(
+ r#"
+enum State { Stop }
+fn foo() {
+ let _x: State = 'a: loop {
+ while true {
+ break $0;
+ }
+ };
+}
+"#,
+ expect![[r#"ty: (), name: ?"#]],
+ );
+}
+
+#[test]
+fn expected_type_break_expr_in_labeled_loop() {
+ check_expected_type_and_name(
+ r#"
+enum State { Stop }
+fn foo() {
+ let _x: State = 'a: loop {
+ let _y: i32 = loop {
+ {
+ break 'a State::Stop;
+ break 'a $0;
+ }
+ };
+ };
+}
+"#,
+ expect![[r#"ty: State, name: ?"#]],
+ );
+
+ check_expected_type_and_name(
+ r#"
+enum State { Stop }
+fn foo() {
+ let _x: State = 'a: loop {
+ let _y: i32 = loop {
+ while true {
+ break 'a State::Stop;
+ break 'a $0;
+ }
+ };
+ };
+}
+"#,
+ expect![[r#"ty: State, name: ?"#]],
+ );
+
+ check_expected_type_and_name(
+ r#"
+enum State { Stop }
+fn foo() {
+ 'a: while true {
+ let _x: State = loop {
+ break State::Stop;
+ break 'a $0;
+ };
+ }
+}
+"#,
+ expect![[r#"ty: (), name: ?"#]],
+ );
+}
+
+#[test]
+fn expected_type_break_expr_in_labeled_block() {
+ check_expected_type_and_name(
+ r#"
+enum State { Stop }
+fn foo() {
+ let _x: State = 'a: {
+ let _y: i32 = 'b: {
+ {
+ break 'a State::Stop;
+ break 'a $0;
+ };
+ };
+ };
+}
+"#,
+ expect![[r#"ty: State, name: ?"#]],
+ );
+}
+
+#[test]
fn expected_type_logic_op() {
check_expected_type_and_name(
r#"