@@ -15,7 +15,6 @@ use crate::{
1515 symbol_index:: { self , FileSymbol } ,
1616 RootDatabase ,
1717} ;
18- use rustc_hash:: FxHashSet ;
1918
2019/// A value to use, when uncertain which limit to pick.
2120pub const DEFAULT_QUERY_SEARCH_LIMIT : usize = 40 ;
@@ -32,13 +31,13 @@ pub enum AssocItemSearch {
3231}
3332
3433/// Searches for importable items with the given name in the crate and its dependencies.
35- pub fn items_with_name (
36- sema : & Semantics < ' _ , RootDatabase > ,
34+ pub fn items_with_name < ' a > (
35+ sema : & ' a Semantics < ' _ , RootDatabase > ,
3736 krate : Crate ,
3837 name : NameToImport ,
3938 assoc_item_search : AssocItemSearch ,
4039 limit : Option < usize > ,
41- ) -> FxHashSet < ItemInNs > {
40+ ) -> impl Iterator < Item = ItemInNs > + ' a {
4241 let _p = profile:: span ( "items_with_name" ) . detail ( || {
4342 format ! (
4443 "Name: {} ({:?}), crate: {:?}, limit: {:?}" ,
@@ -94,13 +93,13 @@ pub fn items_with_name(
9493 find_items ( sema, krate, assoc_item_search, local_query, external_query)
9594}
9695
97- fn find_items (
98- sema : & Semantics < ' _ , RootDatabase > ,
96+ fn find_items < ' a > (
97+ sema : & ' a Semantics < ' _ , RootDatabase > ,
9998 krate : Crate ,
10099 assoc_item_search : AssocItemSearch ,
101100 local_query : symbol_index:: Query ,
102101 external_query : import_map:: Query ,
103- ) -> FxHashSet < ItemInNs > {
102+ ) -> impl Iterator < Item = ItemInNs > + ' a {
104103 let _p = profile:: span ( "find_items" ) ;
105104 let db = sema. db ;
106105
@@ -115,21 +114,18 @@ fn find_items(
115114 // Query the local crate using the symbol index.
116115 let local_results = symbol_index:: crate_symbols ( db, krate. into ( ) , local_query)
117116 . into_iter ( )
118- . filter_map ( |local_candidate| get_name_definition ( sema, & local_candidate) )
117+ . filter_map ( move |local_candidate| get_name_definition ( sema, & local_candidate) )
119118 . filter_map ( |name_definition_to_import| match name_definition_to_import {
120119 Definition :: ModuleDef ( module_def) => Some ( ItemInNs :: from ( module_def) ) ,
121120 Definition :: Macro ( macro_def) => Some ( ItemInNs :: from ( macro_def) ) ,
122121 _ => None ,
123122 } ) ;
124123
125- external_importables
126- . chain ( local_results)
127- . filter ( move |& item| match assoc_item_search {
128- AssocItemSearch :: Include => true ,
129- AssocItemSearch :: Exclude => !is_assoc_item ( item, sema. db ) ,
130- AssocItemSearch :: AssocItemsOnly => is_assoc_item ( item, sema. db ) ,
131- } )
132- . collect ( )
124+ external_importables. chain ( local_results) . filter ( move |& item| match assoc_item_search {
125+ AssocItemSearch :: Include => true ,
126+ AssocItemSearch :: Exclude => !is_assoc_item ( item, sema. db ) ,
127+ AssocItemSearch :: AssocItemsOnly => is_assoc_item ( item, sema. db ) ,
128+ } )
133129}
134130
135131fn get_name_definition (
0 commit comments