From 7c439355ce5337002fe83d940329596f75400696 Mon Sep 17 00:00:00 2001 From: Steffen Lyngbaek Date: Sun, 8 Mar 2020 03:24:34 -0700 Subject: Don't allow nested completions --- .../ra_ide/src/completion/complete_trait_impl.rs | 31 +++++++++++++--------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'crates') diff --git a/crates/ra_ide/src/completion/complete_trait_impl.rs b/crates/ra_ide/src/completion/complete_trait_impl.rs index 8cb0c72bb..a4e1045fc 100644 --- a/crates/ra_ide/src/completion/complete_trait_impl.rs +++ b/crates/ra_ide/src/completion/complete_trait_impl.rs @@ -48,23 +48,28 @@ use crate::{ pub(crate) fn complete_trait_impl(acc: &mut Completions, ctx: &CompletionContext) { let mut tokens = ctx.token.ancestors(); - let trigger = tokens.find(|p| match p.kind() { - SyntaxKind::FN_DEF - | SyntaxKind::TYPE_ALIAS_DEF - | SyntaxKind::CONST_DEF - | SyntaxKind::NAME_REF - | SyntaxKind::BLOCK_EXPR => true, - _ => false, - }); - - let impl_def = tokens + let completion_match = tokens .find(|p| match p.kind() { - SyntaxKind::IMPL_DEF => true, + SyntaxKind::FN_DEF + | SyntaxKind::TYPE_ALIAS_DEF + | SyntaxKind::CONST_DEF + | SyntaxKind::NAME_REF + | SyntaxKind::BLOCK_EXPR => true, _ => false, }) - .and_then(|n| ast::ImplDef::cast(n)); + .and_then(|trigger| { + for p in tokens { + match p.kind() { + // No nested completions + SyntaxKind::FN_DEF | SyntaxKind::BLOCK => return None, + SyntaxKind::IMPL_DEF => return ast::ImplDef::cast(p).map(|p| (trigger, p)), + _ => {} + } + } + None + }); - if let (Some(trigger), Some(impl_def)) = (trigger, impl_def) { + if let Some((trigger, impl_def)) = completion_match { match trigger.kind() { SyntaxKind::NAME_REF => { get_missing_impl_items(&ctx.sema, &impl_def).iter().for_each(|item| match item { -- cgit v1.2.3