Unnamed repository; edit this file 'description' to name the repository.
fix: no complete where kw after qualified path
Example
---
```rust
mod foo { pub struct Bar; }
fn x() foo::b$0
```
**Before this PR**
```text
st Bar (adds ->) Bar
kw where
```
**After this PR**
```text
st Bar (adds ->) Bar
```
| -rw-r--r-- | crates/ide-completion/src/completions.rs | 4 | ||||
| -rw-r--r-- | crates/ide-completion/src/tests/type_pos.rs | 20 |
2 files changed, 23 insertions, 1 deletions
diff --git a/crates/ide-completion/src/completions.rs b/crates/ide-completion/src/completions.rs index 2ed582598b..ed972a1e2a 100644 --- a/crates/ide-completion/src/completions.rs +++ b/crates/ide-completion/src/completions.rs @@ -34,7 +34,8 @@ use crate::{ CompletionContext, CompletionItem, CompletionItemKind, context::{ DotAccess, ItemListKind, NameContext, NameKind, NameRefContext, NameRefKind, - PathCompletionCtx, PathKind, PatternContext, TypeAscriptionTarget, TypeLocation, Visible, + PathCompletionCtx, PathKind, PatternContext, Qualified, TypeAscriptionTarget, TypeLocation, + Visible, }, item::Builder, render::{ @@ -752,6 +753,7 @@ pub(super) fn complete_name_ref( if let TypeAscriptionTarget::RetType { item: Some(item), .. } = ascription && path_ctx.required_thin_arrow().is_some() + && matches!(path_ctx.qualified, Qualified::No) { keyword::complete_for_and_where(acc, ctx, &item.clone().into()); } diff --git a/crates/ide-completion/src/tests/type_pos.rs b/crates/ide-completion/src/tests/type_pos.rs index 7d4a7fe6b8..1a4c255fc0 100644 --- a/crates/ide-completion/src/tests/type_pos.rs +++ b/crates/ide-completion/src/tests/type_pos.rs @@ -142,6 +142,26 @@ fn x() $0 kw where "#]], ); + + check_with_base_items( + r#" +mod foo { pub struct Bar; } +fn x() foo::$0 +"#, + expect![[r#" + st Bar (adds ->) Bar + "#]], + ); + + check_with_base_items( + r#" +mod foo { pub struct Bar; } +fn x() foo::b$0 +"#, + expect![[r#" + st Bar (adds ->) Bar + "#]], + ); } #[test] |