Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/fn_param.rs')
-rw-r--r--crates/ide-completion/src/completions/fn_param.rs15
1 files changed, 8 insertions, 7 deletions
diff --git a/crates/ide-completion/src/completions/fn_param.rs b/crates/ide-completion/src/completions/fn_param.rs
index fb78386976..34d25c9c67 100644
--- a/crates/ide-completion/src/completions/fn_param.rs
+++ b/crates/ide-completion/src/completions/fn_param.rs
@@ -2,6 +2,7 @@
use hir::HirDisplay;
use ide_db::FxHashMap;
+use itertools::Either;
use syntax::{
AstNode, Direction, SyntaxKind, TextRange, TextSize, algo,
ast::{self, HasModuleItem},
@@ -24,8 +25,8 @@ pub(crate) fn complete_fn_param(
ctx: &CompletionContext<'_>,
pattern_ctx: &PatternContext,
) -> Option<()> {
- let (ParamContext { param_list, kind, .. }, impl_) = match pattern_ctx {
- PatternContext { param_ctx: Some(kind), impl_, .. } => (kind, impl_),
+ let (ParamContext { param_list, kind, .. }, impl_or_trait) = match pattern_ctx {
+ PatternContext { param_ctx: Some(kind), impl_or_trait, .. } => (kind, impl_or_trait),
_ => return None,
};
@@ -45,7 +46,7 @@ pub(crate) fn complete_fn_param(
match kind {
ParamKind::Function(function) => {
- fill_fn_params(ctx, function, param_list, impl_, add_new_item_to_acc);
+ fill_fn_params(ctx, function, param_list, impl_or_trait, add_new_item_to_acc);
}
ParamKind::Closure(closure) => {
let stmt_list = closure.syntax().ancestors().find_map(ast::StmtList::cast)?;
@@ -62,7 +63,7 @@ fn fill_fn_params(
ctx: &CompletionContext<'_>,
function: &ast::Fn,
param_list: &ast::ParamList,
- impl_: &Option<ast::Impl>,
+ impl_or_trait: &Option<Either<ast::Impl, ast::Trait>>,
mut add_new_item_to_acc: impl FnMut(&str),
) {
let mut file_params = FxHashMap::default();
@@ -107,7 +108,7 @@ fn fill_fn_params(
}
remove_duplicated(&mut file_params, param_list.params());
let self_completion_items = ["self", "&self", "mut self", "&mut self"];
- if should_add_self_completions(ctx.token.text_range().start(), param_list, impl_) {
+ if should_add_self_completions(ctx.token.text_range().start(), param_list, impl_or_trait) {
self_completion_items.into_iter().for_each(&mut add_new_item_to_acc);
}
@@ -161,9 +162,9 @@ fn remove_duplicated(
fn should_add_self_completions(
cursor: TextSize,
param_list: &ast::ParamList,
- impl_: &Option<ast::Impl>,
+ impl_or_trait: &Option<Either<ast::Impl, ast::Trait>>,
) -> bool {
- if impl_.is_none() || param_list.self_param().is_some() {
+ if impl_or_trait.is_none() || param_list.self_param().is_some() {
return false;
}
match param_list.params().next() {