diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2023-03-15 10:41:17 +0100 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2023-03-15 10:41:17 +0100 |
| commit | 82ed68c95edbc145b9318b147ec5bcb70869a513 (patch) | |
| tree | 674c3429d712ff8b2519417d9ba021b28c2527da | |
| parent | ad91622d115a9501277c6902ecbdfd70d882bfef (diff) | |
| download | rust-82ed68c95edbc145b9318b147ec5bcb70869a513.tar.gz rust-82ed68c95edbc145b9318b147ec5bcb70869a513.zip | |
fix: Fix reference completions being emitted in places other than argument lists
| -rw-r--r-- | crates/ide-completion/src/context/analysis.rs | 9 | ||||
| -rw-r--r-- | crates/ide-completion/src/context/tests.rs | 12 |
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 db0045aef6e..fff9678e5e9 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 a654a5db574..82a1c10c531 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: ?"], + ); +} |
