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(); let topo = &graph.crates_in_topological_order();
cb(PrimeCachesProgress::Started); 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. // 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 // 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); db.crate_def_map(*krate);
} }
cb(PrimeCachesProgress::Finished);
} }

View file

@ -179,6 +179,18 @@ where
start..start + len 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)] #[repr(transparent)]
pub struct JodChild(pub std::process::Child); pub struct JodChild(pub std::process::Child);