diff options
Diffstat (limited to 'crates/ra_hir/src/ty/lower.rs')
-rw-r--r-- | crates/ra_hir/src/ty/lower.rs | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/crates/ra_hir/src/ty/lower.rs b/crates/ra_hir/src/ty/lower.rs index dd503d771..4b67c82e7 100644 --- a/crates/ra_hir/src/ty/lower.rs +++ b/crates/ra_hir/src/ty/lower.rs | |||
@@ -239,14 +239,10 @@ impl Ty { | |||
239 | let traits = traits_from_env.flat_map(|t| t.all_super_traits(db)); | 239 | let traits = traits_from_env.flat_map(|t| t.all_super_traits(db)); |
240 | for t in traits { | 240 | for t in traits { |
241 | if let Some(associated_ty) = t.associated_type_by_name(db, &segment.name) { | 241 | if let Some(associated_ty) = t.associated_type_by_name(db, &segment.name) { |
242 | let generics = t.generic_params(db); | 242 | let substs = |
243 | let mut substs = Vec::new(); | 243 | Substs::build_for_def(db, t).push(self_ty.clone()).fill_with_unknown().build(); |
244 | substs.push(self_ty.clone()); | ||
245 | substs.extend( | ||
246 | iter::repeat(Ty::Unknown).take(generics.count_params_including_parent() - 1), | ||
247 | ); | ||
248 | // FIXME handle type parameters on the segment | 244 | // FIXME handle type parameters on the segment |
249 | return Ty::Projection(ProjectionTy { associated_ty, parameters: substs.into() }); | 245 | return Ty::Projection(ProjectionTy { associated_ty, parameters: substs }); |
250 | } | 246 | } |
251 | } | 247 | } |
252 | Ty::Unknown | 248 | Ty::Unknown |
@@ -766,6 +762,16 @@ pub enum CallableDef { | |||
766 | } | 762 | } |
767 | impl_froms!(CallableDef: Function, Struct, EnumVariant); | 763 | impl_froms!(CallableDef: Function, Struct, EnumVariant); |
768 | 764 | ||
765 | impl CallableDef { | ||
766 | pub fn krate(self, db: &impl HirDatabase) -> Option<crate::Crate> { | ||
767 | match self { | ||
768 | CallableDef::Function(f) => f.krate(db), | ||
769 | CallableDef::Struct(s) => s.krate(db), | ||
770 | CallableDef::EnumVariant(e) => e.parent_enum(db).krate(db), | ||
771 | } | ||
772 | } | ||
773 | } | ||
774 | |||
769 | impl From<CallableDef> for GenericDef { | 775 | impl From<CallableDef> for GenericDef { |
770 | fn from(def: CallableDef) -> GenericDef { | 776 | fn from(def: CallableDef) -> GenericDef { |
771 | match def { | 777 | match def { |