Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/item_list.rs')
-rw-r--r--crates/ide-completion/src/completions/item_list.rs37
1 files changed, 20 insertions, 17 deletions
diff --git a/crates/ide-completion/src/completions/item_list.rs b/crates/ide-completion/src/completions/item_list.rs
index 7c6d72a031..d44bf0a6ab 100644
--- a/crates/ide-completion/src/completions/item_list.rs
+++ b/crates/ide-completion/src/completions/item_list.rs
@@ -16,19 +16,23 @@ pub(crate) fn complete_item_list(acc: &mut Completions, ctx: &CompletionContext)
return;
}
- let (&is_absolute_path, path_qualifier, kind) = match ctx.path_context() {
- Some(PathCompletionCtx {
- kind: PathKind::Item { kind },
- is_absolute_path,
- qualifier,
- ..
- }) => (is_absolute_path, qualifier, Some(kind)),
- Some(PathCompletionCtx {
- kind: PathKind::Expr { in_block_expr: true, .. },
- is_absolute_path,
- qualifier,
- ..
- }) => (is_absolute_path, qualifier, None),
+ let (&is_absolute_path, path_qualifier, kind, is_trivial_path) = match ctx.path_context() {
+ Some(
+ ctx @ PathCompletionCtx {
+ kind: PathKind::Item { kind },
+ is_absolute_path,
+ qualifier,
+ ..
+ },
+ ) => (is_absolute_path, qualifier, Some(kind), ctx.is_trivial_path()),
+ Some(
+ ctx @ PathCompletionCtx {
+ kind: PathKind::Expr { in_block_expr: true, .. },
+ is_absolute_path,
+ qualifier,
+ ..
+ },
+ ) => (is_absolute_path, qualifier, None, ctx.is_trivial_path()),
_ => return,
};
@@ -36,7 +40,9 @@ pub(crate) fn complete_item_list(acc: &mut Completions, ctx: &CompletionContext)
trait_impl::complete_trait_impl(acc, ctx);
}
- add_keywords(acc, ctx, kind);
+ if is_trivial_path {
+ add_keywords(acc, ctx, kind);
+ }
if kind.is_none() {
// this is already handled by expression
@@ -71,9 +77,6 @@ pub(crate) fn complete_item_list(acc: &mut Completions, ctx: &CompletionContext)
}
fn add_keywords(acc: &mut Completions, ctx: &CompletionContext, kind: Option<&ItemListKind>) {
- if ctx.is_non_trivial_path() {
- return;
- }
let mut add_keyword = |kw, snippet| acc.add_keyword_snippet(ctx, kw, snippet);
let in_item_list = matches!(kind, Some(ItemListKind::SourceFile | ItemListKind::Module) | None);