Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/item_list/trait_impl.rs')
-rw-r--r--crates/ide-completion/src/completions/item_list/trait_impl.rs59
1 files changed, 35 insertions, 24 deletions
diff --git a/crates/ide-completion/src/completions/item_list/trait_impl.rs b/crates/ide-completion/src/completions/item_list/trait_impl.rs
index 58b894bdd4..83d78e1093 100644
--- a/crates/ide-completion/src/completions/item_list/trait_impl.rs
+++ b/crates/ide-completion/src/completions/item_list/trait_impl.rs
@@ -43,10 +43,7 @@ use syntax::{
use text_edit::TextEdit;
use crate::{
- context::{
- ItemListKind, NameContext, NameKind, NameRefContext, NameRefKind, PathCompletionCtx,
- PathKind,
- },
+ context::{ItemListKind, PathCompletionCtx, PathKind},
CompletionContext, CompletionItem, CompletionItemKind, CompletionRelevance, Completions,
};
@@ -58,17 +55,36 @@ enum ImplCompletionKind {
Const,
}
-pub(crate) fn complete_trait_impl_name(
+pub(crate) fn complete_trait_impl_const(
acc: &mut Completions,
ctx: &CompletionContext,
- NameContext { name, kind, .. }: &NameContext,
+ name: &Option<ast::Name>,
+) -> Option<()> {
+ complete_trait_impl_name(acc, ctx, name, ImplCompletionKind::Const)
+}
+
+pub(crate) fn complete_trait_impl_type_alias(
+ acc: &mut Completions,
+ ctx: &CompletionContext,
+ name: &Option<ast::Name>,
+) -> Option<()> {
+ complete_trait_impl_name(acc, ctx, name, ImplCompletionKind::TypeAlias)
+}
+
+pub(crate) fn complete_trait_impl_fn(
+ acc: &mut Completions,
+ ctx: &CompletionContext,
+ name: &Option<ast::Name>,
+) -> Option<()> {
+ complete_trait_impl_name(acc, ctx, name, ImplCompletionKind::Fn)
+}
+
+fn complete_trait_impl_name(
+ acc: &mut Completions,
+ ctx: &CompletionContext,
+ name: &Option<ast::Name>,
+ kind: ImplCompletionKind,
) -> Option<()> {
- let kind = match kind {
- NameKind::Const => ImplCompletionKind::Const,
- NameKind::Function => ImplCompletionKind::Fn,
- NameKind::TypeAlias => ImplCompletionKind::TypeAlias,
- _ => return None,
- };
let token = ctx.token.clone();
let item = match name {
Some(name) => name.syntax().parent(),
@@ -89,23 +105,18 @@ pub(crate) fn complete_trait_impl_name(
pub(crate) fn complete_trait_impl_name_ref(
acc: &mut Completions,
ctx: &CompletionContext,
- name_ref_ctx: &NameRefContext,
+ path_ctx: &PathCompletionCtx,
+ name_ref: &Option<ast::NameRef>,
) -> Option<()> {
- match name_ref_ctx {
- NameRefContext {
- nameref,
- kind:
- NameRefKind::Path(
- path_ctx @ PathCompletionCtx {
- kind: PathKind::Item { kind: ItemListKind::TraitImpl(Some(impl_)) },
- ..
- },
- ),
+ match path_ctx {
+ PathCompletionCtx {
+ kind: PathKind::Item { kind: ItemListKind::TraitImpl(Some(impl_)) },
+ ..
} if path_ctx.is_trivial_path() => complete_trait_impl(
acc,
ctx,
ImplCompletionKind::All,
- match nameref {
+ match name_ref {
Some(name) => name.syntax().text_range(),
None => ctx.source_range(),
},