Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/lib.rs')
| -rw-r--r-- | crates/hir/src/lib.rs | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 62c634b549..b028e76c17 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -31,7 +31,7 @@ pub mod db; mod display; -use std::{iter, sync::Arc}; +use std::{iter, ops::ControlFlow, sync::Arc}; use arrayvec::ArrayVec; use base_db::{CrateDisplayName, CrateId, Edition, FileId}; @@ -2573,12 +2573,14 @@ impl Type { krate, traits_in_scope, name, - &mut |ty, assoc_item_id| match assoc_item_id { - AssocItemId::FunctionId(it) => { - slot = callback(self.derived(ty.clone()), it.into()); - slot.is_some() + &mut |ty, assoc_item_id| { + if let AssocItemId::FunctionId(func) = assoc_item_id { + if let Some(res) = callback(self.derived(ty.clone()), func.into()) { + slot = Some(res); + return ControlFlow::Break(()); + } } - AssocItemId::ConstId(_) | AssocItemId::TypeAliasId(_) => false, + ControlFlow::Continue(()) }, ); slot @@ -2590,7 +2592,7 @@ impl Type { krate: Crate, traits_in_scope: &FxHashSet<TraitId>, name: Option<&Name>, - callback: &mut dyn FnMut(&Ty, AssocItemId) -> bool, + callback: &mut dyn FnMut(&Ty, AssocItemId) -> ControlFlow<()>, ) { // There should be no inference vars in types passed here // FIXME check that? @@ -2630,8 +2632,11 @@ impl Type { traits_in_scope, name, &mut |ty, assoc_item_id| { - slot = callback(self.derived(ty.clone()), assoc_item_id.into()); - slot.is_some() + if let Some(res) = callback(self.derived(ty.clone()), assoc_item_id.into()) { + slot = Some(res); + return ControlFlow::Break(()); + } + ControlFlow::Continue(()) }, ); slot @@ -2643,7 +2648,7 @@ impl Type { krate: Crate, traits_in_scope: &FxHashSet<TraitId>, name: Option<&Name>, - callback: &mut dyn FnMut(&Ty, AssocItemId) -> bool, + callback: &mut dyn FnMut(&Ty, AssocItemId) -> ControlFlow<()>, ) { let canonical = hir_ty::replace_errors_with_variables(&self.ty); |