Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/prime_caches.rs')
-rw-r--r--crates/ide/src/prime_caches.rs25
1 files changed, 6 insertions, 19 deletions
diff --git a/crates/ide/src/prime_caches.rs b/crates/ide/src/prime_caches.rs
index ac23ed8bd2..88a9240bfa 100644
--- a/crates/ide/src/prime_caches.rs
+++ b/crates/ide/src/prime_caches.rs
@@ -8,17 +8,12 @@ use ide_db::base_db::SourceDatabase;
use crate::RootDatabase;
+/// We started indexing a crate.
#[derive(Debug)]
-pub enum PrimeCachesProgress {
- Started,
- /// We started indexing a crate.
- StartedOnCrate {
- on_crate: String,
- n_done: usize,
- n_total: usize,
- },
- /// We finished indexing all crates.
- Finished,
+pub struct PrimeCachesProgress {
+ pub on_crate: String,
+ pub n_done: usize,
+ pub n_total: usize,
}
pub(crate) fn prime_caches(db: &RootDatabase, cb: &(dyn Fn(PrimeCachesProgress) + Sync)) {
@@ -26,21 +21,13 @@ pub(crate) fn prime_caches(db: &RootDatabase, cb: &(dyn Fn(PrimeCachesProgress)
let graph = db.crate_graph();
let topo = &graph.crates_in_topological_order();
- cb(PrimeCachesProgress::Started);
- // Take care to emit the finish signal even when the computation is canceled.
- let _d = stdx::defer(|| cb(PrimeCachesProgress::Finished));
-
// FIXME: This would be easy to parallelize, since it's in the ideal ordering for that.
// Unfortunately rayon prevents panics from propagation out of a `scope`, which breaks
// cancellation, so we cannot use rayon.
for (i, &crate_id) in topo.iter().enumerate() {
let crate_name = graph[crate_id].display_name.as_deref().unwrap_or_default().to_string();
- cb(PrimeCachesProgress::StartedOnCrate {
- on_crate: crate_name,
- n_done: i,
- n_total: topo.len(),
- });
+ cb(PrimeCachesProgress { on_crate: crate_name, n_done: i, n_total: topo.len() });
db.crate_def_map(crate_id);
db.import_map(crate_id);
}