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.rs | 59 |
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(), }, |