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.rs23
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)