Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/trait_impl.rs')
| -rw-r--r-- | crates/ide-completion/src/completions/trait_impl.rs | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/crates/ide-completion/src/completions/trait_impl.rs b/crates/ide-completion/src/completions/trait_impl.rs index d5272be882..e3c15038d0 100644 --- a/crates/ide-completion/src/completions/trait_impl.rs +++ b/crates/ide-completion/src/completions/trait_impl.rs @@ -56,19 +56,17 @@ pub(crate) fn complete_trait_impl(acc: &mut Completions, ctx: &CompletionContext if let Some((kind, replacement_range, impl_def)) = completion_match(ctx) { if let Some(hir_impl) = ctx.sema.to_def(&impl_def) { get_missing_assoc_items(&ctx.sema, &impl_def).into_iter().for_each(|item| { + use self::ImplCompletionKind::*; match (item, kind) { - ( - hir::AssocItem::Function(fn_item), - ImplCompletionKind::All | ImplCompletionKind::Fn, - ) => add_function_impl(acc, ctx, replacement_range, fn_item, hir_impl), - ( - hir::AssocItem::TypeAlias(type_item), - ImplCompletionKind::All | ImplCompletionKind::TypeAlias, - ) => add_type_alias_impl(acc, ctx, replacement_range, type_item), - ( - hir::AssocItem::Const(const_item), - ImplCompletionKind::All | ImplCompletionKind::Const, - ) => add_const_impl(acc, ctx, replacement_range, const_item, hir_impl), + (hir::AssocItem::Function(func), All | Fn) => { + add_function_impl(acc, ctx, replacement_range, func, hir_impl) + } + (hir::AssocItem::TypeAlias(type_alias), All | TypeAlias) => { + add_type_alias_impl(acc, ctx, replacement_range, type_alias) + } + (hir::AssocItem::Const(const_), All | Const) => { + add_const_impl(acc, ctx, replacement_range, const_, hir_impl) + } _ => {} } }); @@ -76,6 +74,7 @@ pub(crate) fn complete_trait_impl(acc: &mut Completions, ctx: &CompletionContext } } +// FIXME: This should be lifted out so that we can do proper smart item keyword completions fn completion_match(ctx: &CompletionContext) -> Option<(ImplCompletionKind, TextRange, ast::Impl)> { let token = ctx.token.clone(); @@ -152,15 +151,15 @@ fn add_function_impl( func: hir::Function, impl_def: hir::Impl, ) { - let fn_name = func.name(ctx.db).to_smol_str(); + let fn_name = func.name(ctx.db); - let label = if func.assoc_fn_params(ctx.db).is_empty() { - format!("fn {}()", fn_name) - } else { - format!("fn {}(..)", fn_name) - }; + let label = format!( + "fn {}({})", + fn_name, + if func.assoc_fn_params(ctx.db).is_empty() { "" } else { ".." } + ); - let completion_kind = if func.self_param(ctx.db).is_some() { + let completion_kind = if func.has_self_param(ctx.db) { CompletionItemKind::Method } else { CompletionItemKind::SymbolKind(SymbolKind::Function) |