Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-completion/src/context/analysis.rs9
-rw-r--r--crates/ide-completion/src/context/tests.rs12
2 files changed, 16 insertions, 5 deletions
diff --git a/crates/ide-completion/src/context/analysis.rs b/crates/ide-completion/src/context/analysis.rs
index db0045aef6..fff9678e5e 100644
--- a/crates/ide-completion/src/context/analysis.rs
+++ b/crates/ide-completion/src/context/analysis.rs
@@ -353,7 +353,7 @@ fn expected_type_and_name(
_ => ty,
};
- loop {
+ let (ty, name) = loop {
break match_ast! {
match node {
ast::LetStmt(it) => {
@@ -385,9 +385,7 @@ fn expected_type_and_name(
token.clone(),
).map(|ap| {
let name = ap.ident().map(NameOrNameRef::Name);
-
- let ty = strip_refs(ap.ty);
- (Some(ty), name)
+ (Some(ap.ty), name)
})
.unwrap_or((None, None))
},
@@ -489,7 +487,8 @@ fn expected_type_and_name(
},
}
};
- }
+ };
+ (ty.map(strip_refs), name)
}
fn classify_lifetime(
diff --git a/crates/ide-completion/src/context/tests.rs b/crates/ide-completion/src/context/tests.rs
index a654a5db57..82a1c10c53 100644
--- a/crates/ide-completion/src/context/tests.rs
+++ b/crates/ide-completion/src/context/tests.rs
@@ -411,3 +411,15 @@ fn main() {
expect!["ty: i32, name: ?"],
);
}
+
+#[test]
+fn expected_type_ref_return_pos() {
+ check_expected_type_and_name(
+ r#"
+fn f(thing: u32) -> &u32 {
+ &thin$0
+}
+"#,
+ expect!["ty: u32, name: ?"],
+ );
+}