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 | 72 |
1 files changed, 41 insertions, 31 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..972a7d2f21 100644 --- a/crates/ide-completion/src/completions/item_list/trait_impl.rs +++ b/crates/ide-completion/src/completions/item_list/trait_impl.rs @@ -43,11 +43,8 @@ use syntax::{ use text_edit::TextEdit; use crate::{ - context::{ - ItemListKind, NameContext, NameKind, NameRefContext, NameRefKind, PathCompletionCtx, - PathKind, - }, - CompletionContext, CompletionItem, CompletionItemKind, CompletionRelevance, Completions, + context::PathCompletionCtx, CompletionContext, CompletionItem, CompletionItemKind, + CompletionRelevance, Completions, }; #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -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(), @@ -86,34 +102,28 @@ pub(crate) fn complete_trait_impl_name( Some(()) } -pub(crate) fn complete_trait_impl_name_ref( +pub(crate) fn complete_trait_impl_item_by_name( acc: &mut Completions, ctx: &CompletionContext, - name_ref_ctx: &NameRefContext, -) -> Option<()> { - match name_ref_ctx { - NameRefContext { - nameref, - kind: - NameRefKind::Path( - path_ctx @ PathCompletionCtx { - kind: PathKind::Item { kind: ItemListKind::TraitImpl(Some(impl_)) }, - .. - }, - ), - } if path_ctx.is_trivial_path() => complete_trait_impl( + path_ctx: &PathCompletionCtx, + name_ref: &Option<ast::NameRef>, + impl_: &Option<ast::Impl>, +) { + if !path_ctx.is_trivial_path() { + return; + } + if let Some(impl_) = impl_ { + complete_trait_impl( acc, ctx, ImplCompletionKind::All, - match nameref { + match name_ref { Some(name) => name.syntax().text_range(), None => ctx.source_range(), }, impl_, - ), - _ => (), + ); } - Some(()) } fn complete_trait_impl( |