Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-db/src/items_locator.rs')
| -rw-r--r-- | crates/ide-db/src/items_locator.rs | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/crates/ide-db/src/items_locator.rs b/crates/ide-db/src/items_locator.rs index 7a543d64e2..e938525325 100644 --- a/crates/ide-db/src/items_locator.rs +++ b/crates/ide-db/src/items_locator.rs @@ -5,7 +5,7 @@ use std::ops::ControlFlow; use either::Either; -use hir::{Crate, ItemInNs, Module, import_map}; +use hir::{Complete, Crate, ItemInNs, Module, import_map}; use crate::{ RootDatabase, @@ -25,7 +25,7 @@ pub fn items_with_name( krate: Crate, name: NameToImport, assoc_item_search: AssocSearchMode, -) -> impl Iterator<Item = ItemInNs> { +) -> impl Iterator<Item = (ItemInNs, Complete)> { let _p = tracing::info_span!("items_with_name", name = name.text(), assoc_item_search = ?assoc_item_search, crate = ?krate.display_name(db).map(|name| name.to_string())) .entered(); @@ -123,26 +123,29 @@ fn find_items( krate: Crate, local_query: symbol_index::Query, external_query: import_map::Query, -) -> impl Iterator<Item = ItemInNs> { +) -> impl Iterator<Item = (ItemInNs, Complete)> { let _p = tracing::info_span!("find_items").entered(); // NOTE: `external_query` includes `assoc_item_search`, so we don't need to // filter on our own. - let external_importables = - krate.query_external_importables(db, external_query).map(|external_importable| { - match external_importable { + let external_importables = krate.query_external_importables(db, external_query).map( + |(external_importable, do_not_complete)| { + let external_importable = match external_importable { Either::Left(module_def) => ItemInNs::from(module_def), Either::Right(macro_def) => ItemInNs::from(macro_def), - } - }); + }; + (external_importable, do_not_complete) + }, + ); // Query the local crate using the symbol index. let mut local_results = Vec::new(); local_query.search(&symbol_index::crate_symbols(db, krate), |local_candidate| { - local_results.push(match local_candidate.def { + let def = match local_candidate.def { hir::ModuleDef::Macro(macro_def) => ItemInNs::Macros(macro_def), def => ItemInNs::from(def), - }); + }; + local_results.push((def, local_candidate.do_not_complete)); ControlFlow::<()>::Continue(()) }); local_results.into_iter().chain(external_importables) |