add cacellation checks to expensive queries

This commit is contained in:
Aleksey Kladov 2019-05-29 22:13:03 +03:00
parent a9373c4220
commit 6bcc1b8b9e
3 changed files with 3 additions and 0 deletions

View file

@ -222,6 +222,7 @@ fn or(left: ItemOrMacro, right: ItemOrMacro) -> ItemOrMacro {
impl CrateDefMap {
pub(crate) fn crate_def_map_query(db: &impl DefDatabase, krate: Crate) -> Arc<CrateDefMap> {
db.check_canceled();
let _p = profile("crate_def_map_query");
let def_map = {
let edition = krate.edition(db);

View file

@ -112,6 +112,7 @@ where
// main name resolution fixed-point loop.
let mut i = 0;
loop {
self.db.check_canceled();
match (self.resolve_imports(), self.resolve_macros()) {
(ReachedFixedPoint::Yes, ReachedFixedPoint::Yes) => break,
_ => i += 1,

View file

@ -82,6 +82,7 @@ pub(crate) fn implements_query(
krate: Crate,
trait_ref: Canonical<TraitRef>,
) -> Option<Solution> {
db.check_canceled();
let _p = profile("implements_query");
let goal: chalk_ir::Goal = trait_ref.value.to_chalk(db).cast();
debug!("goal: {:?}", goal);