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.rs39
1 files changed, 13 insertions, 26 deletions
diff --git a/crates/ide-db/src/items_locator.rs b/crates/ide-db/src/items_locator.rs
index 4a5d234f73..432f1d745d 100644
--- a/crates/ide-db/src/items_locator.rs
+++ b/crates/ide-db/src/items_locator.rs
@@ -19,26 +19,24 @@ pub fn items_with_name<'a>(
krate: Crate,
name: NameToImport,
assoc_item_search: AssocSearchMode,
- limit: Option<usize>,
) -> impl Iterator<Item = ItemInNs> + 'a {
let _p = profile::span("items_with_name").detail(|| {
format!(
- "Name: {}, crate: {:?}, assoc items: {:?}, limit: {:?}",
+ "Name: {}, crate: {:?}, assoc items: {:?}",
name.text(),
assoc_item_search,
krate.display_name(sema.db).map(|name| name.to_string()),
- limit,
)
});
let prefix = matches!(name, NameToImport::Prefix(..));
- let (mut local_query, mut external_query) = match name {
+ let (local_query, external_query) = match name {
NameToImport::Prefix(exact_name, case_sensitive)
| NameToImport::Exact(exact_name, case_sensitive) => {
let mut local_query = symbol_index::Query::new(exact_name.clone());
+ local_query.assoc_search_mode(assoc_item_search);
let mut external_query =
- // import_map::Query::new(exact_name).assoc_search_mode(assoc_item_search);
- import_map::Query::new(exact_name);
+ import_map::Query::new(exact_name).assoc_search_mode(assoc_item_search);
if prefix {
local_query.prefix();
external_query = external_query.prefix();
@@ -55,8 +53,9 @@ pub fn items_with_name<'a>(
NameToImport::Fuzzy(fuzzy_search_string, case_sensitive) => {
let mut local_query = symbol_index::Query::new(fuzzy_search_string.clone());
local_query.fuzzy();
+ local_query.assoc_search_mode(assoc_item_search);
- let mut external_query = import_map::Query::new(fuzzy_search_string.clone())
+ let mut external_query = import_map::Query::new(fuzzy_search_string)
.fuzzy()
.assoc_search_mode(assoc_item_search);
@@ -69,18 +68,12 @@ pub fn items_with_name<'a>(
}
};
- if let Some(limit) = limit {
- external_query = external_query.limit(limit);
- local_query.limit(limit);
- }
-
- find_items(sema, krate, assoc_item_search, local_query, external_query)
+ find_items(sema, krate, local_query, external_query)
}
fn find_items<'a>(
sema: &'a Semantics<'_, RootDatabase>,
krate: Crate,
- assoc_item_search: AssocSearchMode,
local_query: symbol_index::Query,
external_query: import_map::Query,
) -> impl Iterator<Item = ItemInNs> + 'a {
@@ -98,18 +91,12 @@ fn find_items<'a>(
});
// Query the local crate using the symbol index.
- let local_results = local_query
- .search(&symbol_index::crate_symbols(db, krate))
- .into_iter()
- .filter(move |candidate| match assoc_item_search {
- AssocSearchMode::Include => true,
- AssocSearchMode::Exclude => !candidate.is_assoc,
- AssocSearchMode::AssocItemsOnly => candidate.is_assoc,
- })
- .map(|local_candidate| match local_candidate.def {
+ let mut local_results = Vec::new();
+ local_query.search(&symbol_index::crate_symbols(db, krate), |local_candidate| {
+ local_results.push(match local_candidate.def {
hir::ModuleDef::Macro(macro_def) => ItemInNs::Macros(macro_def),
def => ItemInNs::from(def),
- });
-
- external_importables.chain(local_results)
+ })
+ });
+ local_results.into_iter().chain(external_importables)
}