diff options
Diffstat (limited to 'crates/ide_completion/src/lib.rs')
-rw-r--r-- | crates/ide_completion/src/lib.rs | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/crates/ide_completion/src/lib.rs b/crates/ide_completion/src/lib.rs index 76f31de9e..263554ecf 100644 --- a/crates/ide_completion/src/lib.rs +++ b/crates/ide_completion/src/lib.rs | |||
@@ -13,7 +13,9 @@ mod completions; | |||
13 | 13 | ||
14 | use completions::flyimport::position_for_import; | 14 | use completions::flyimport::position_for_import; |
15 | use ide_db::{ | 15 | use ide_db::{ |
16 | base_db::FilePosition, helpers::insert_use::ImportScope, imports_locator, RootDatabase, | 16 | base_db::FilePosition, |
17 | helpers::{import_assets::LocatedImport, insert_use::ImportScope}, | ||
18 | items_locator, RootDatabase, | ||
17 | }; | 19 | }; |
18 | use text_edit::TextEdit; | 20 | use text_edit::TextEdit; |
19 | 21 | ||
@@ -21,7 +23,7 @@ use crate::{completions::Completions, context::CompletionContext, item::Completi | |||
21 | 23 | ||
22 | pub use crate::{ | 24 | pub use crate::{ |
23 | config::CompletionConfig, | 25 | config::CompletionConfig, |
24 | item::{CompletionItem, CompletionItemKind, CompletionScore, ImportEdit, InsertTextFormat}, | 26 | item::{CompletionItem, CompletionItemKind, CompletionRelevance, ImportEdit, InsertTextFormat}, |
25 | }; | 27 | }; |
26 | 28 | ||
27 | //FIXME: split the following feature into fine-grained features. | 29 | //FIXME: split the following feature into fine-grained features. |
@@ -139,25 +141,27 @@ pub fn resolve_completion_edits( | |||
139 | position: FilePosition, | 141 | position: FilePosition, |
140 | full_import_path: &str, | 142 | full_import_path: &str, |
141 | imported_name: String, | 143 | imported_name: String, |
142 | import_for_trait_assoc_item: bool, | ||
143 | ) -> Option<Vec<TextEdit>> { | 144 | ) -> Option<Vec<TextEdit>> { |
144 | let ctx = CompletionContext::new(db, position, config)?; | 145 | let ctx = CompletionContext::new(db, position, config)?; |
145 | let position_for_import = position_for_import(&ctx, None)?; | 146 | let position_for_import = position_for_import(&ctx, None)?; |
146 | let import_scope = ImportScope::find_insert_use_container(position_for_import, &ctx.sema)?; | 147 | let scope = ImportScope::find_insert_use_container(position_for_import, &ctx.sema)?; |
147 | 148 | ||
148 | let current_module = ctx.sema.scope(position_for_import).module()?; | 149 | let current_module = ctx.sema.scope(position_for_import).module()?; |
149 | let current_crate = current_module.krate(); | 150 | let current_crate = current_module.krate(); |
150 | 151 | ||
151 | let import_path = imports_locator::find_exact_imports(&ctx.sema, current_crate, imported_name) | 152 | let (import_path, item_to_import) = |
152 | .filter_map(|candidate| { | 153 | items_locator::with_exact_name(&ctx.sema, current_crate, imported_name) |
153 | let item: hir::ItemInNs = candidate.either(Into::into, Into::into); | 154 | .into_iter() |
154 | current_module.find_use_path_prefixed(db, item, config.insert_use.prefix_kind) | 155 | .filter_map(|candidate| { |
155 | }) | 156 | current_module |
156 | .find(|mod_path| mod_path.to_string() == full_import_path)?; | 157 | .find_use_path_prefixed(db, candidate, config.insert_use.prefix_kind) |
158 | .zip(Some(candidate)) | ||
159 | }) | ||
160 | .find(|(mod_path, _)| mod_path.to_string() == full_import_path)?; | ||
161 | let import = | ||
162 | LocatedImport::new(import_path.clone(), item_to_import, item_to_import, Some(import_path)); | ||
157 | 163 | ||
158 | ImportEdit { import_path, import_scope, import_for_trait_assoc_item } | 164 | ImportEdit { import, scope }.to_text_edit(config.insert_use).map(|edit| vec![edit]) |
159 | .to_text_edit(config.insert_use.merge) | ||
160 | .map(|edit| vec![edit]) | ||
161 | } | 165 | } |
162 | 166 | ||
163 | #[cfg(test)] | 167 | #[cfg(test)] |