From 74c3bbacc9b352057f2fc7ab69bd13e53022beb0 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Thu, 3 Dec 2020 15:58:18 +0200 Subject: Make completion resolve async --- crates/completion/src/item.rs | 29 +++++++++++++++++++++++++++-- crates/completion/src/lib.rs | 5 ++++- 2 files changed, 31 insertions(+), 3 deletions(-) (limited to 'crates/completion') diff --git a/crates/completion/src/item.rs b/crates/completion/src/item.rs index 4e56f28f3..dd25ca75c 100644 --- a/crates/completion/src/item.rs +++ b/crates/completion/src/item.rs @@ -4,10 +4,10 @@ use std::fmt; use hir::{Documentation, ModPath, Mutability}; use ide_db::helpers::{ - insert_use::{self, ImportScope, MergeBehaviour}, + insert_use::{self, ImportScope, ImportScopePtr, MergeBehaviour}, mod_path_to_ast, }; -use syntax::{algo, TextRange}; +use syntax::{algo, SyntaxNode, TextRange}; use text_edit::TextEdit; use crate::config::SnippetCap; @@ -275,7 +275,32 @@ pub struct ImportEdit { pub merge_behaviour: Option, } +#[derive(Debug, Clone)] +pub struct ImportEditPtr { + pub import_path: ModPath, + pub import_scope: ImportScopePtr, + pub merge_behaviour: Option, +} + +impl ImportEditPtr { + pub fn into_import_edit(self, root: &SyntaxNode) -> Option { + Some(ImportEdit { + import_path: self.import_path, + import_scope: self.import_scope.into_scope(root)?, + merge_behaviour: self.merge_behaviour, + }) + } +} + impl ImportEdit { + pub fn get_edit_ptr(&self) -> ImportEditPtr { + ImportEditPtr { + import_path: self.import_path.clone(), + import_scope: self.import_scope.get_ptr(), + merge_behaviour: self.merge_behaviour, + } + } + /// Attempts to insert the import to the given scope, producing a text edit. /// May return no edit in edge cases, such as scope already containing the import. pub fn to_text_edit(&self) -> Option { diff --git a/crates/completion/src/lib.rs b/crates/completion/src/lib.rs index c57203c80..c277cd466 100644 --- a/crates/completion/src/lib.rs +++ b/crates/completion/src/lib.rs @@ -18,7 +18,10 @@ use crate::{completions::Completions, context::CompletionContext, item::Completi pub use crate::{ config::{CompletionConfig, CompletionResolveCapability}, - item::{CompletionItem, CompletionItemKind, CompletionScore, ImportEdit, InsertTextFormat}, + item::{ + CompletionItem, CompletionItemKind, CompletionScore, ImportEdit, ImportEditPtr, + InsertTextFormat, + }, }; //FIXME: split the following feature into fine-grained features. -- cgit v1.2.3