diff --git a/crates/hir-ty/src/chalk_db.rs b/crates/hir-ty/src/chalk_db.rs index 11c4dc43410..9dd3bddbd41 100644 --- a/crates/hir-ty/src/chalk_db.rs +++ b/crates/hir-ty/src/chalk_db.rs @@ -139,7 +139,7 @@ impl<'a> chalk_solve::RustIrDatabase for ChalkContext<'a> { } }); }) - .filter_map(|block_id| self.db.trait_impls_in_block(block_id)); + .map(|block_id| self.db.trait_impls_in_block(block_id)); let id_to_chalk = |id: hir_def::ImplId| id.to_chalk(self.db); let mut result = vec![]; @@ -152,7 +152,8 @@ impl<'a> chalk_solve::RustIrDatabase for ChalkContext<'a> { impl_maps.into_iter().chain(block_impls).for_each(&mut f); def_blocks .into_iter() - .filter_map(|it| self.db.trait_impls_in_block(it?)) + .flatten() + .map(|it| self.db.trait_impls_in_block(it)) .for_each(f); } fps => { @@ -165,7 +166,8 @@ impl<'a> chalk_solve::RustIrDatabase for ChalkContext<'a> { impl_maps.into_iter().chain(block_impls).for_each(&mut f); def_blocks .into_iter() - .filter_map(|it| self.db.trait_impls_in_block(it?)) + .flatten() + .map(|it| self.db.trait_impls_in_block(it)) .for_each(f); } } diff --git a/crates/hir-ty/src/db.rs b/crates/hir-ty/src/db.rs index 3a8fb665c44..bd2dc0bc13d 100644 --- a/crates/hir-ty/src/db.rs +++ b/crates/hir-ty/src/db.rs @@ -115,7 +115,7 @@ pub trait HirDatabase: DefDatabase + Upcast { fn inherent_impls_in_crate(&self, krate: CrateId) -> Arc; #[salsa::invoke(InherentImpls::inherent_impls_in_block_query)] - fn inherent_impls_in_block(&self, block: BlockId) -> Option>; + fn inherent_impls_in_block(&self, block: BlockId) -> Arc; /// Collects all crates in the dependency graph that have impls for the /// given fingerprint. This is only used for primitive types and types @@ -132,7 +132,7 @@ pub trait HirDatabase: DefDatabase + Upcast { fn trait_impls_in_crate(&self, krate: CrateId) -> Arc; #[salsa::invoke(TraitImpls::trait_impls_in_block_query)] - fn trait_impls_in_block(&self, block: BlockId) -> Option>; + fn trait_impls_in_block(&self, block: BlockId) -> Arc; #[salsa::invoke(TraitImpls::trait_impls_in_deps_query)] fn trait_impls_in_deps(&self, krate: CrateId) -> Arc; diff --git a/crates/hir-ty/src/method_resolution.rs b/crates/hir-ty/src/method_resolution.rs index 9b8839f3576..504dbe77d93 100644 --- a/crates/hir-ty/src/method_resolution.rs +++ b/crates/hir-ty/src/method_resolution.rs @@ -149,10 +149,7 @@ impl TraitImpls { Arc::new(impls) } - pub(crate) fn trait_impls_in_block_query( - db: &dyn HirDatabase, - block: BlockId, - ) -> Option> { + pub(crate) fn trait_impls_in_block_query(db: &dyn HirDatabase, block: BlockId) -> Arc { let _p = profile::span("trait_impls_in_block_query"); let mut impls = Self { map: FxHashMap::default() }; @@ -160,7 +157,7 @@ impl TraitImpls { impls.collect_def_map(db, &block_def_map); impls.shrink_to_fit(); - Some(Arc::new(impls)) + Arc::new(impls) } pub(crate) fn trait_impls_in_deps_query(db: &dyn HirDatabase, krate: CrateId) -> Arc { @@ -283,10 +280,7 @@ impl InherentImpls { Arc::new(impls) } - pub(crate) fn inherent_impls_in_block_query( - db: &dyn HirDatabase, - block: BlockId, - ) -> Option> { + pub(crate) fn inherent_impls_in_block_query(db: &dyn HirDatabase, block: BlockId) -> Arc { let _p = profile::span("inherent_impls_in_block_query"); let mut impls = Self { map: FxHashMap::default(), invalid_impls: Vec::default() }; @@ -294,7 +288,7 @@ impl InherentImpls { impls.collect_def_map(db, &block_def_map); impls.shrink_to_fit(); - Some(Arc::new(impls)) + Arc::new(impls) } fn shrink_to_fit(&mut self) { @@ -1178,18 +1172,17 @@ fn iterate_inherent_methods( }; while let Some(block_id) = block { - if let Some(impls) = db.inherent_impls_in_block(block_id) { - impls_for_self_ty( - &impls, - self_ty, - table, - name, - receiver_ty, - receiver_adjustments.clone(), - module, - callback, - )?; - } + let impls = db.inherent_impls_in_block(block_id); + impls_for_self_ty( + &impls, + self_ty, + table, + name, + receiver_ty, + receiver_adjustments.clone(), + module, + callback, + )?; block = db.block_def_map(block_id).parent().and_then(|module| module.containing_block()); }