@@ -14,7 +14,7 @@ use ide_db::{
1414} ;
1515use rustc_hash:: FxHashSet ;
1616
17- use crate :: RootDatabase ;
17+ use crate :: { prime_caches , RootDatabase } ;
1818
1919/// We're indexing many crates.
2020#[ derive( Debug ) ]
@@ -54,34 +54,37 @@ pub(crate) fn parallel_prime_caches(
5454 builder. build ( )
5555 } ;
5656
57- let ( work_sender, work_receiver) = crossbeam_channel:: unbounded ( ) ;
58- let ( progress_sender, progress_receiver) = crossbeam_channel:: unbounded ( ) ;
59-
6057 enum ParallelPrimeCacheWorkerProgress {
6158 BeginCrate { crate_id : CrateId , crate_name : String } ,
6259 EndCrate { crate_id : CrateId } ,
6360 }
6461
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) ;
6972
70- // This also computes the DefMap
71- db . import_map ( crate_id ) ;
73+ progress_sender . send ( ParallelPrimeCacheWorkerProgress :: EndCrate { crate_id } ) ? ;
74+ }
7275
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) ) ) ;
7483 }
7584
76- Ok :: < _ , crossbeam_channel :: SendError < _ > > ( ( ) )
85+ ( work_sender , progress_receiver )
7786 } ;
7887
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-
8588 let crates_total = crates_to_prime. pending ( ) ;
8689 let mut crates_done = 0 ;
8790
0 commit comments