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, _ => ty,
}; };
loop { let (ty, name) = loop {
break match_ast! { break match_ast! {
match node { match node {
ast::LetStmt(it) => { ast::LetStmt(it) => {
@ -385,9 +385,7 @@ fn expected_type_and_name(
token.clone(), token.clone(),
).map(|ap| { ).map(|ap| {
let name = ap.ident().map(NameOrNameRef::Name); let name = ap.ident().map(NameOrNameRef::Name);
(Some(ap.ty), name)
let ty = strip_refs(ap.ty);
(Some(ty), name)
}) })
.unwrap_or((None, None)) .unwrap_or((None, None))
}, },
@ -489,7 +487,8 @@ fn expected_type_and_name(
}, },
} }
}; };
} };
(ty.map(strip_refs), name)
} }
fn classify_lifetime( fn classify_lifetime(

View File

@ -411,3 +411,15 @@ fn main() {
expect!["ty: i32, name: ?"], 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: ?"],
);
}