Auto merge of #14355 - Veykril:completion-ref-strip, r=Veykril

fix: Fix reference completions being emitted in places other than argument lists

Fixes https://github.com/rust-lang/rust-analyzer/issues/14331
This commit is contained in:
bors 2023-03-15 09:47:20 +00:00
commit e611fbe6ab
2 changed files with 16 additions and 5 deletions

View File

@ -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(

View File

@ -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: ?"],
);
}