diff options
Diffstat (limited to 'crates/hir/src/semantics.rs')
-rw-r--r-- | crates/hir/src/semantics.rs | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs index 1198e3f0b..7955bf0b5 100644 --- a/crates/hir/src/semantics.rs +++ b/crates/hir/src/semantics.rs | |||
@@ -76,9 +76,11 @@ impl PathResolution { | |||
76 | pub fn assoc_type_shorthand_candidates<R>( | 76 | pub fn assoc_type_shorthand_candidates<R>( |
77 | &self, | 77 | &self, |
78 | db: &dyn HirDatabase, | 78 | db: &dyn HirDatabase, |
79 | mut cb: impl FnMut(TypeAlias) -> Option<R>, | 79 | mut cb: impl FnMut(&Name, TypeAlias) -> Option<R>, |
80 | ) -> Option<R> { | 80 | ) -> Option<R> { |
81 | associated_type_shorthand_candidates(db, self.in_type_ns()?, |_, _, id| cb(id.into())) | 81 | associated_type_shorthand_candidates(db, self.in_type_ns()?, |name, _, id| { |
82 | cb(name, id.into()) | ||
83 | }) | ||
82 | } | 84 | } |
83 | } | 85 | } |
84 | 86 | ||
@@ -445,7 +447,7 @@ impl<'db> SemanticsImpl<'db> { | |||
445 | } | 447 | } |
446 | }; | 448 | }; |
447 | gpl.lifetime_params() | 449 | gpl.lifetime_params() |
448 | .find(|tp| tp.lifetime().as_ref().map(|lt| lt.text()) == Some(text)) | 450 | .find(|tp| tp.lifetime().as_ref().map(|lt| lt.text()).as_ref() == Some(&text)) |
449 | })?; | 451 | })?; |
450 | let src = self.find_file(lifetime_param.syntax().clone()).with_value(lifetime_param); | 452 | let src = self.find_file(lifetime_param.syntax().clone()).with_value(lifetime_param); |
451 | ToDef::to_def(self, src) | 453 | ToDef::to_def(self, src) |
@@ -492,9 +494,9 @@ impl<'db> SemanticsImpl<'db> { | |||
492 | fn resolve_method_call_as_callable(&self, call: &ast::MethodCallExpr) -> Option<Callable> { | 494 | fn resolve_method_call_as_callable(&self, call: &ast::MethodCallExpr) -> Option<Callable> { |
493 | // FIXME: this erases Substs | 495 | // FIXME: this erases Substs |
494 | let func = self.resolve_method_call(call)?; | 496 | let func = self.resolve_method_call(call)?; |
495 | let ty = self.db.value_ty(func.into()); | 497 | let (ty, _) = self.db.value_ty(func.into()).into_value_and_skipped_binders(); |
496 | let resolver = self.analyze(call.syntax()).resolver; | 498 | let resolver = self.analyze(call.syntax()).resolver; |
497 | let ty = Type::new_with_resolver(self.db, &resolver, ty.value)?; | 499 | let ty = Type::new_with_resolver(self.db, &resolver, ty)?; |
498 | let mut res = ty.as_callable(self.db)?; | 500 | let mut res = ty.as_callable(self.db)?; |
499 | res.is_bound_method = true; | 501 | res.is_bound_method = true; |
500 | Some(res) | 502 | Some(res) |
@@ -768,7 +770,7 @@ to_def_impls![ | |||
768 | (crate::TypeParam, ast::TypeParam, type_param_to_def), | 770 | (crate::TypeParam, ast::TypeParam, type_param_to_def), |
769 | (crate::LifetimeParam, ast::LifetimeParam, lifetime_param_to_def), | 771 | (crate::LifetimeParam, ast::LifetimeParam, lifetime_param_to_def), |
770 | (crate::ConstParam, ast::ConstParam, const_param_to_def), | 772 | (crate::ConstParam, ast::ConstParam, const_param_to_def), |
771 | (crate::MacroDef, ast::MacroRules, macro_rules_to_def), | 773 | (crate::MacroDef, ast::Macro, macro_to_def), |
772 | (crate::Local, ast::IdentPat, bind_pat_to_def), | 774 | (crate::Local, ast::IdentPat, bind_pat_to_def), |
773 | (crate::Local, ast::SelfParam, self_param_to_def), | 775 | (crate::Local, ast::SelfParam, self_param_to_def), |
774 | (crate::Label, ast::Label, label_to_def), | 776 | (crate::Label, ast::Label, label_to_def), |