None => return ControlFlow::Continue(()),
};
+ if let Some(module_id) = visible_from_module {
+ if let Some(block_id) = module_id.containing_block() {
+ if let Some(impls) = db.inherent_impls_in_block(block_id) {
+ impls_for_self_ty(
+ &impls,
+ self_ty,
+ db,
+ env.clone(),
+ name,
+ receiver_ty,
+ visible_from_module,
+ callback,
+ )?;
+ }
+ }
+ }
+
for krate in def_crates {
let impls = db.inherent_impls_in_crate(krate);
+ impls_for_self_ty(
+ &impls,
+ self_ty,
+ db,
+ env.clone(),
+ name,
+ receiver_ty,
+ visible_from_module,
+ callback,
+ )?;
+ }
+ return ControlFlow::Continue(());
- let impls_for_self_ty = filter_inherent_impls_for_self_ty(&impls, &self_ty.value);
-
+ fn impls_for_self_ty(
+ impls: &InherentImpls,
+ self_ty: &Canonical<Ty>,
+ db: &dyn HirDatabase,
+ env: Arc<TraitEnvironment>,
+ name: Option<&Name>,
+ receiver_ty: Option<&Canonical<Ty>>,
+ visible_from_module: Option<ModuleId>,
+ callback: &mut dyn FnMut(&Canonical<Ty>, AssocItemId) -> ControlFlow<()>,
+ ) -> ControlFlow<()> {
+ let impls_for_self_ty = filter_inherent_impls_for_self_ty(impls, &self_ty.value);
for &impl_def in impls_for_self_ty {
- for &item in db.impl_data(impl_def).items.iter() {
+ for &item in &db.impl_data(impl_def).items {
if !is_valid_candidate(
db,
env.clone(),