diff options
author | Kirill Bulatov <[email protected]> | 2020-12-03 13:58:18 +0000 |
---|---|---|
committer | Kirill Bulatov <[email protected]> | 2020-12-07 21:41:08 +0000 |
commit | 74c3bbacc9b352057f2fc7ab69bd13e53022beb0 (patch) | |
tree | 32f3407cfb6851539e7ebf6b1c4d77a78c364efa /crates/completion | |
parent | f6d2540df09bc0dcd8a748ec0ed7cb33ac76d9f2 (diff) |
Make completion resolve async
Diffstat (limited to 'crates/completion')
-rw-r--r-- | crates/completion/src/item.rs | 29 | ||||
-rw-r--r-- | crates/completion/src/lib.rs | 5 |
2 files changed, 31 insertions, 3 deletions
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; | |||
4 | 4 | ||
5 | use hir::{Documentation, ModPath, Mutability}; | 5 | use hir::{Documentation, ModPath, Mutability}; |
6 | use ide_db::helpers::{ | 6 | use ide_db::helpers::{ |
7 | insert_use::{self, ImportScope, MergeBehaviour}, | 7 | insert_use::{self, ImportScope, ImportScopePtr, MergeBehaviour}, |
8 | mod_path_to_ast, | 8 | mod_path_to_ast, |
9 | }; | 9 | }; |
10 | use syntax::{algo, TextRange}; | 10 | use syntax::{algo, SyntaxNode, TextRange}; |
11 | use text_edit::TextEdit; | 11 | use text_edit::TextEdit; |
12 | 12 | ||
13 | use crate::config::SnippetCap; | 13 | use crate::config::SnippetCap; |
@@ -275,7 +275,32 @@ pub struct ImportEdit { | |||
275 | pub merge_behaviour: Option<MergeBehaviour>, | 275 | pub merge_behaviour: Option<MergeBehaviour>, |
276 | } | 276 | } |
277 | 277 | ||
278 | #[derive(Debug, Clone)] | ||
279 | pub struct ImportEditPtr { | ||
280 | pub import_path: ModPath, | ||
281 | pub import_scope: ImportScopePtr, | ||
282 | pub merge_behaviour: Option<MergeBehaviour>, | ||
283 | } | ||
284 | |||
285 | impl ImportEditPtr { | ||
286 | pub fn into_import_edit(self, root: &SyntaxNode) -> Option<ImportEdit> { | ||
287 | Some(ImportEdit { | ||
288 | import_path: self.import_path, | ||
289 | import_scope: self.import_scope.into_scope(root)?, | ||
290 | merge_behaviour: self.merge_behaviour, | ||
291 | }) | ||
292 | } | ||
293 | } | ||
294 | |||
278 | impl ImportEdit { | 295 | impl ImportEdit { |
296 | pub fn get_edit_ptr(&self) -> ImportEditPtr { | ||
297 | ImportEditPtr { | ||
298 | import_path: self.import_path.clone(), | ||
299 | import_scope: self.import_scope.get_ptr(), | ||
300 | merge_behaviour: self.merge_behaviour, | ||
301 | } | ||
302 | } | ||
303 | |||
279 | /// Attempts to insert the import to the given scope, producing a text edit. | 304 | /// Attempts to insert the import to the given scope, producing a text edit. |
280 | /// May return no edit in edge cases, such as scope already containing the import. | 305 | /// May return no edit in edge cases, such as scope already containing the import. |
281 | pub fn to_text_edit(&self) -> Option<TextEdit> { | 306 | pub fn to_text_edit(&self) -> Option<TextEdit> { |
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 | |||
18 | 18 | ||
19 | pub use crate::{ | 19 | pub use crate::{ |
20 | config::{CompletionConfig, CompletionResolveCapability}, | 20 | config::{CompletionConfig, CompletionResolveCapability}, |
21 | item::{CompletionItem, CompletionItemKind, CompletionScore, ImportEdit, InsertTextFormat}, | 21 | item::{ |
22 | CompletionItem, CompletionItemKind, CompletionScore, ImportEdit, ImportEditPtr, | ||
23 | InsertTextFormat, | ||
24 | }, | ||
22 | }; | 25 | }; |
23 | 26 | ||
24 | //FIXME: split the following feature into fine-grained features. | 27 | //FIXME: split the following feature into fine-grained features. |