fix: no more Registering progress handler for token rustAnalyzer/Indexing failed.

This commit is contained in:
Aleksey Kladov 2021-04-20 22:54:05 +03:00
parent ad131049c4
commit cdfe5a8be0
2 changed files with 13 additions and 2 deletions

View File

@ -27,6 +27,7 @@ pub(crate) fn prime_caches(db: &RootDatabase, cb: &(dyn Fn(PrimeCachesProgress)
let topo = &graph.crates_in_topological_order();
cb(PrimeCachesProgress::Started);
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
@ -41,6 +42,4 @@ pub(crate) fn prime_caches(db: &RootDatabase, cb: &(dyn Fn(PrimeCachesProgress)
});
db.crate_def_map(*krate);
}
cb(PrimeCachesProgress::Finished);
}

View File

@ -179,6 +179,18 @@ pub fn equal_range_by<T, F>(slice: &[T], mut key: F) -> ops::Range<usize>
start..start + len
}
pub fn defer<F: FnOnce()>(f: F) -> impl Drop {
struct D<F: FnOnce()>(Option<F>);
impl<F: FnOnce()> Drop for D<F> {
fn drop(&mut self) {
if let Some(f) = self.0.take() {
f()
}
}
}
D(Some(f))
}
#[repr(transparent)]
pub struct JodChild(pub std::process::Child);