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/ide_db/src/helpers/insert_use.rs | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'crates/ide_db/src') diff --git a/crates/ide_db/src/helpers/insert_use.rs b/crates/ide_db/src/helpers/insert_use.rs index 040843990..0dae9a541 100644 --- a/crates/ide_db/src/helpers/insert_use.rs +++ b/crates/ide_db/src/helpers/insert_use.rs @@ -11,7 +11,7 @@ use syntax::{ edit::{AstNodeEdit, IndentLevel}, make, AstNode, PathSegmentKind, VisibilityOwner, }, - AstToken, InsertPosition, NodeOrToken, SyntaxElement, SyntaxNode, SyntaxToken, + AstToken, InsertPosition, NodeOrToken, SyntaxElement, SyntaxNode, SyntaxNodePtr, SyntaxToken, }; use test_utils::mark; @@ -21,6 +21,36 @@ pub enum ImportScope { Module(ast::ItemList), } +impl ImportScope { + pub fn get_ptr(&self) -> ImportScopePtr { + match self { + ImportScope::File(file) => ImportScopePtr::File(SyntaxNodePtr::new(file.syntax())), + ImportScope::Module(module) => { + ImportScopePtr::Module(SyntaxNodePtr::new(module.syntax())) + } + } + } +} + +#[derive(Debug, Clone)] +pub enum ImportScopePtr { + File(SyntaxNodePtr), + Module(SyntaxNodePtr), +} + +impl ImportScopePtr { + pub fn into_scope(self, root: &SyntaxNode) -> Option { + Some(match self { + ImportScopePtr::File(file_ptr) => { + ImportScope::File(ast::SourceFile::cast(file_ptr.to_node(root))?) + } + ImportScopePtr::Module(module_ptr) => { + ImportScope::File(ast::SourceFile::cast(module_ptr.to_node(root))?) + } + }) + } +} + impl ImportScope { pub fn from(syntax: SyntaxNode) -> Option { if let Some(module) = ast::Module::cast(syntax.clone()) { -- cgit v1.2.3 From 93bc009a5968c964693299263689b50b2efe9abc Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 4 Dec 2020 10:02:22 +0200 Subject: Remove the state --- crates/ide_db/src/helpers/insert_use.rs | 32 +------------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) (limited to 'crates/ide_db/src') diff --git a/crates/ide_db/src/helpers/insert_use.rs b/crates/ide_db/src/helpers/insert_use.rs index 0dae9a541..040843990 100644 --- a/crates/ide_db/src/helpers/insert_use.rs +++ b/crates/ide_db/src/helpers/insert_use.rs @@ -11,7 +11,7 @@ use syntax::{ edit::{AstNodeEdit, IndentLevel}, make, AstNode, PathSegmentKind, VisibilityOwner, }, - AstToken, InsertPosition, NodeOrToken, SyntaxElement, SyntaxNode, SyntaxNodePtr, SyntaxToken, + AstToken, InsertPosition, NodeOrToken, SyntaxElement, SyntaxNode, SyntaxToken, }; use test_utils::mark; @@ -21,36 +21,6 @@ pub enum ImportScope { Module(ast::ItemList), } -impl ImportScope { - pub fn get_ptr(&self) -> ImportScopePtr { - match self { - ImportScope::File(file) => ImportScopePtr::File(SyntaxNodePtr::new(file.syntax())), - ImportScope::Module(module) => { - ImportScopePtr::Module(SyntaxNodePtr::new(module.syntax())) - } - } - } -} - -#[derive(Debug, Clone)] -pub enum ImportScopePtr { - File(SyntaxNodePtr), - Module(SyntaxNodePtr), -} - -impl ImportScopePtr { - pub fn into_scope(self, root: &SyntaxNode) -> Option { - Some(match self { - ImportScopePtr::File(file_ptr) => { - ImportScope::File(ast::SourceFile::cast(file_ptr.to_node(root))?) - } - ImportScopePtr::Module(module_ptr) => { - ImportScope::File(ast::SourceFile::cast(module_ptr.to_node(root))?) - } - }) - } -} - impl ImportScope { pub fn from(syntax: SyntaxNode) -> Option { if let Some(module) = ast::Module::cast(syntax.clone()) { -- cgit v1.2.3 From 3183ff3a7b1fbcf3cb5379cf162a3d769a21be7a Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Tue, 8 Dec 2020 00:46:56 +0200 Subject: Disable the completion for no corresponding client resolve capabilities --- crates/ide_db/src/imports_locator.rs | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) (limited to 'crates/ide_db/src') diff --git a/crates/ide_db/src/imports_locator.rs b/crates/ide_db/src/imports_locator.rs index 09046d3c3..31151ce24 100644 --- a/crates/ide_db/src/imports_locator.rs +++ b/crates/ide_db/src/imports_locator.rs @@ -35,26 +35,16 @@ pub fn find_similar_imports<'a>( sema: &Semantics<'a, RootDatabase>, krate: Crate, name_to_import: &str, - limit: usize, ignore_modules: bool, ) -> impl Iterator> { let _p = profile::span("find_similar_imports"); - let mut external_query = import_map::Query::new(name_to_import).limit(limit); + let mut external_query = import_map::Query::new(name_to_import); if ignore_modules { external_query = external_query.exclude_import_kind(import_map::ImportKind::Module); } - find_imports( - sema, - krate, - { - let mut local_query = symbol_index::Query::new(name_to_import.to_string()); - local_query.limit(limit); - local_query - }, - external_query, - ) + find_imports(sema, krate, symbol_index::Query::new(name_to_import.to_string()), external_query) } fn find_imports<'a>( -- cgit v1.2.3 From bf24cb3e8db94a84fb4a24c407797ab6ff5ee109 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Tue, 8 Dec 2020 14:38:43 +0200 Subject: Tweak the search query params for better lookup speed --- crates/ide_db/src/imports_locator.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'crates/ide_db/src') diff --git a/crates/ide_db/src/imports_locator.rs b/crates/ide_db/src/imports_locator.rs index 31151ce24..b2980a5d6 100644 --- a/crates/ide_db/src/imports_locator.rs +++ b/crates/ide_db/src/imports_locator.rs @@ -34,6 +34,7 @@ pub fn find_exact_imports<'a>( pub fn find_similar_imports<'a>( sema: &Semantics<'a, RootDatabase>, krate: Crate, + limit: Option, name_to_import: &str, ignore_modules: bool, ) -> impl Iterator> { @@ -44,7 +45,14 @@ pub fn find_similar_imports<'a>( external_query = external_query.exclude_import_kind(import_map::ImportKind::Module); } - find_imports(sema, krate, symbol_index::Query::new(name_to_import.to_string()), external_query) + let mut local_query = symbol_index::Query::new(name_to_import.to_string()); + + if let Some(limit) = limit { + local_query.limit(limit); + external_query = external_query.limit(limit); + } + + find_imports(sema, krate, local_query, external_query) } fn find_imports<'a>( -- cgit v1.2.3