@@ -30,13 +30,13 @@ use std::{
30
30
31
31
use base_db:: {
32
32
salsa:: { self , ParallelDatabase } ,
33
- CrateId , SourceDatabaseExt , SourceRootId , Upcast ,
33
+ SourceDatabaseExt , SourceRootId , Upcast ,
34
34
} ;
35
35
use fst:: { self , Streamer } ;
36
36
use hir:: {
37
- db:: { DefDatabase , HirDatabase } ,
37
+ db:: HirDatabase ,
38
38
symbols:: { FileSymbol , SymbolCollector } ,
39
- ModuleId ,
39
+ Crate , Module ,
40
40
} ;
41
41
use rayon:: prelude:: * ;
42
42
use rustc_hash:: FxHashSet ;
@@ -93,7 +93,7 @@ impl Query {
93
93
pub trait SymbolsDatabase : HirDatabase + SourceDatabaseExt + Upcast < dyn HirDatabase > {
94
94
/// The symbol index for a given module. These modules should only be in source roots that
95
95
/// are inside local_roots.
96
- fn module_symbols ( & self , module_id : ModuleId ) -> Arc < SymbolIndex > ;
96
+ fn module_symbols ( & self , module : Module ) -> Arc < SymbolIndex > ;
97
97
98
98
/// The symbol index for a given source root within library_roots.
99
99
fn library_symbols ( & self , source_root_id : SourceRootId ) -> Arc < SymbolIndex > ;
@@ -116,20 +116,20 @@ fn library_symbols(db: &dyn SymbolsDatabase, source_root_id: SourceRootId) -> Ar
116
116
let symbols = db
117
117
. source_root_crates ( source_root_id)
118
118
. iter ( )
119
- . flat_map ( |& krate| module_ids_for_crate ( db. upcast ( ) , krate ) )
119
+ . flat_map ( |& krate| Crate :: from ( krate ) . modules ( db. upcast ( ) ) )
120
120
// we specifically avoid calling SymbolsDatabase::module_symbols here, even they do the same thing,
121
121
// as the index for a library is not going to really ever change, and we do not want to store each
122
122
// module's index in salsa.
123
- . map ( |module_id | SymbolCollector :: collect ( db. upcast ( ) , module_id ) )
123
+ . map ( |module | SymbolCollector :: collect ( db. upcast ( ) , module ) )
124
124
. flatten ( )
125
125
. collect ( ) ;
126
126
127
127
Arc :: new ( SymbolIndex :: new ( symbols) )
128
128
}
129
129
130
- fn module_symbols ( db : & dyn SymbolsDatabase , module_id : ModuleId ) -> Arc < SymbolIndex > {
130
+ fn module_symbols ( db : & dyn SymbolsDatabase , module : Module ) -> Arc < SymbolIndex > {
131
131
let _p = profile:: span ( "module_symbols" ) ;
132
- let symbols = SymbolCollector :: collect ( db. upcast ( ) , module_id ) ;
132
+ let symbols = SymbolCollector :: collect ( db. upcast ( ) , module ) ;
133
133
Arc :: new ( SymbolIndex :: new ( symbols) )
134
134
}
135
135
@@ -188,41 +188,36 @@ pub fn world_symbols(db: &RootDatabase, query: Query) -> Vec<FileSymbol> {
188
188
. map_with ( Snap :: new ( db) , |snap, & root| snap. library_symbols ( root) )
189
189
. collect ( )
190
190
} else {
191
- let mut module_ids = Vec :: new ( ) ;
191
+ let mut modules = Vec :: new ( ) ;
192
192
193
193
for & root in db. local_roots ( ) . iter ( ) {
194
194
let crates = db. source_root_crates ( root) ;
195
195
for & krate in crates. iter ( ) {
196
- module_ids . extend ( module_ids_for_crate ( db , krate) ) ;
196
+ modules . extend ( Crate :: from ( krate) . modules ( db ) ) ;
197
197
}
198
198
}
199
199
200
- module_ids
200
+ modules
201
201
. par_iter ( )
202
- . map_with ( Snap :: new ( db) , |snap, & module_id | snap. module_symbols ( module_id ) )
202
+ . map_with ( Snap :: new ( db) , |snap, & module | snap. module_symbols ( module ) )
203
203
. collect ( )
204
204
} ;
205
205
206
206
query. search ( & indices)
207
207
}
208
208
209
- pub fn crate_symbols ( db : & RootDatabase , krate : CrateId , query : Query ) -> Vec < FileSymbol > {
209
+ pub fn crate_symbols ( db : & RootDatabase , krate : Crate , query : Query ) -> Vec < FileSymbol > {
210
210
let _p = profile:: span ( "crate_symbols" ) . detail ( || format ! ( "{:?}" , query) ) ;
211
211
212
- let module_ids = module_ids_for_crate ( db, krate ) ;
213
- let indices: Vec < _ > = module_ids
212
+ let modules = krate . modules ( db) ;
213
+ let indices: Vec < _ > = modules
214
214
. par_iter ( )
215
- . map_with ( Snap :: new ( db) , |snap, & module_id | snap. module_symbols ( module_id ) )
215
+ . map_with ( Snap :: new ( db) , |snap, & module | snap. module_symbols ( module ) )
216
216
. collect ( ) ;
217
217
218
218
query. search ( & indices)
219
219
}
220
220
221
- fn module_ids_for_crate ( db : & dyn DefDatabase , krate : CrateId ) -> Vec < ModuleId > {
222
- let def_map = db. crate_def_map ( krate) ;
223
- def_map. modules ( ) . map ( |( id, _) | def_map. module_id ( id) ) . collect ( )
224
- }
225
-
226
221
pub fn index_resolve ( db : & RootDatabase , name : & str ) -> Vec < FileSymbol > {
227
222
let mut query = Query :: new ( name. to_string ( ) ) ;
228
223
query. exact ( ) ;
@@ -427,7 +422,8 @@ struct StructInModB;
427
422
"# ,
428
423
) ;
429
424
430
- let symbols: Vec < _ > = module_ids_for_crate ( db. upcast ( ) , db. test_crate ( ) )
425
+ let symbols: Vec < _ > = Crate :: from ( db. test_crate ( ) )
426
+ . modules ( & db)
431
427
. into_iter ( )
432
428
. map ( |module_id| ( module_id, SymbolCollector :: collect ( & db, module_id) ) )
433
429
. collect ( ) ;
0 commit comments