From 22caf982b99c54058e2e9200aeea0e61cada284a Mon Sep 17 00:00:00 2001 From: Kevin DeLorey <2295721+kdelorey@users.noreply.github.com> Date: Sat, 8 Feb 2020 15:41:25 -0600 Subject: Added associated type completion. --- crates/ra_ide/src/completion/complete_trait_impl.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/crates/ra_ide/src/completion/complete_trait_impl.rs b/crates/ra_ide/src/completion/complete_trait_impl.rs index d147bd11d..528655fbc 100644 --- a/crates/ra_ide/src/completion/complete_trait_impl.rs +++ b/crates/ra_ide/src/completion/complete_trait_impl.rs @@ -97,7 +97,8 @@ pub(crate) fn complete_trait_impl(acc: &mut Completions, ctx: &CompletionContext for item in missing_items { match item { hir::AssocItem::Function(f) => add_function_impl(acc, ctx, f), - _ => {} + hir::AssocItem::TypeAlias(t) => add_type_alias_impl(acc, ctx, t), + _ => {}, } } } @@ -121,7 +122,7 @@ fn resolve_target_trait( } } -pub(crate) fn add_function_impl(acc: &mut Completions, ctx: &CompletionContext, func: &hir::Function) { +fn add_function_impl(acc: &mut Completions, ctx: &CompletionContext, func: &hir::Function) { use crate::display::FunctionSignature; let display = FunctionSignature::from_hir(ctx.db, func.clone()); @@ -135,7 +136,8 @@ pub(crate) fn add_function_impl(acc: &mut Completions, ctx: &CompletionContext, }; let builder = CompletionItem::new(CompletionKind::Magic, ctx.source_range(), label.clone()) - .lookup_by(label); + .lookup_by(label) + .set_documentation(func.docs(ctx.db)); let completion_kind = if func.has_self_param(ctx.db) { CompletionItemKind::Method @@ -155,6 +157,16 @@ pub(crate) fn add_function_impl(acc: &mut Completions, ctx: &CompletionContext, .add_to(acc); } +fn add_type_alias_impl(acc: &mut Completions, ctx: &CompletionContext, type_alias: &hir::TypeAlias) { + let snippet = format!("type {} = ", type_alias.name(ctx.db).to_string()); + + CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()) + .insert_text(snippet) + .kind(CompletionItemKind::TypeAlias) + .set_documentation(type_alias.docs(ctx.db)) + .add_to(acc); +} + #[cfg(test)] mod tests { use crate::completion::{do_completion, CompletionItem, CompletionKind}; -- cgit v1.2.3