@@ -14,7 +14,7 @@ use ide_db::{
14
14
} ;
15
15
use rustc_hash:: FxHashSet ;
16
16
17
- use crate :: RootDatabase ;
17
+ use crate :: { prime_caches , RootDatabase } ;
18
18
19
19
/// We're indexing many crates.
20
20
#[ derive( Debug ) ]
@@ -54,34 +54,37 @@ pub(crate) fn parallel_prime_caches(
54
54
builder. build ( )
55
55
} ;
56
56
57
- let ( work_sender, work_receiver) = crossbeam_channel:: unbounded ( ) ;
58
- let ( progress_sender, progress_receiver) = crossbeam_channel:: unbounded ( ) ;
59
-
60
57
enum ParallelPrimeCacheWorkerProgress {
61
58
BeginCrate { crate_id : CrateId , crate_name : String } ,
62
59
EndCrate { crate_id : CrateId } ,
63
60
}
64
61
65
- let prime_caches_worker = move |db : Snapshot < RootDatabase > | {
66
- while let Ok ( ( crate_id, crate_name) ) = work_receiver. recv ( ) {
67
- progress_sender
68
- . send ( ParallelPrimeCacheWorkerProgress :: BeginCrate { crate_id, crate_name } ) ?;
62
+ let ( work_sender, progress_receiver) = {
63
+ let ( progress_sender, progress_receiver) = crossbeam_channel:: unbounded ( ) ;
64
+ let ( work_sender, work_receiver) = crossbeam_channel:: unbounded ( ) ;
65
+ let prime_caches_worker = move |db : Snapshot < RootDatabase > | {
66
+ while let Ok ( ( crate_id, crate_name) ) = work_receiver. recv ( ) {
67
+ progress_sender
68
+ . send ( ParallelPrimeCacheWorkerProgress :: BeginCrate { crate_id, crate_name } ) ?;
69
+
70
+ // This also computes the DefMap
71
+ db. import_map ( crate_id) ;
69
72
70
- // This also computes the DefMap
71
- db . import_map ( crate_id ) ;
73
+ progress_sender . send ( ParallelPrimeCacheWorkerProgress :: EndCrate { crate_id } ) ? ;
74
+ }
72
75
73
- progress_sender. send ( ParallelPrimeCacheWorkerProgress :: EndCrate { crate_id } ) ?;
76
+ Ok :: < _ , crossbeam_channel:: SendError < _ > > ( ( ) )
77
+ } ;
78
+
79
+ for _ in 0 ..num_worker_threads {
80
+ let worker = prime_caches_worker. clone ( ) ;
81
+ let db = db. snapshot ( ) ;
82
+ std:: thread:: spawn ( move || Cancelled :: catch ( || worker ( db) ) ) ;
74
83
}
75
84
76
- Ok :: < _ , crossbeam_channel :: SendError < _ > > ( ( ) )
85
+ ( work_sender , progress_receiver )
77
86
} ;
78
87
79
- for _ in 0 ..num_worker_threads {
80
- let worker = prime_caches_worker. clone ( ) ;
81
- let db = db. snapshot ( ) ;
82
- std:: thread:: spawn ( move || Cancelled :: catch ( || worker ( db) ) ) ;
83
- }
84
-
85
88
let crates_total = crates_to_prime. pending ( ) ;
86
89
let mut crates_done = 0 ;
87
90
0 commit comments