diff options
author | Florian Diebold <[email protected]> | 2020-01-24 14:22:00 +0000 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2020-02-07 17:28:10 +0000 |
commit | 7ea4bce1b292d455c313f914b3aa3051293c502b (patch) | |
tree | 9dffb37e0cc74135d0c92e2ee9a714ed2ff4d5be /crates/ra_hir_ty/src/infer | |
parent | 22a65b11b3a69b3dae561b34c6b28cb2107169d1 (diff) |
Add impl trait lowering mode
Diffstat (limited to 'crates/ra_hir_ty/src/infer')
-rw-r--r-- | crates/ra_hir_ty/src/infer/path.rs | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/crates/ra_hir_ty/src/infer/path.rs b/crates/ra_hir_ty/src/infer/path.rs index 132f3d6f2..02fc99288 100644 --- a/crates/ra_hir_ty/src/infer/path.rs +++ b/crates/ra_hir_ty/src/infer/path.rs | |||
@@ -9,7 +9,10 @@ use hir_def::{ | |||
9 | }; | 9 | }; |
10 | use hir_expand::name::Name; | 10 | use hir_expand::name::Name; |
11 | 11 | ||
12 | use crate::{db::HirDatabase, method_resolution, Substs, Ty, TypeWalk, ValueTyDefId}; | 12 | use crate::{ |
13 | db::HirDatabase, lower::ImplTraitLoweringMode, method_resolution, Substs, Ty, TypeWalk, | ||
14 | ValueTyDefId, | ||
15 | }; | ||
13 | 16 | ||
14 | use super::{ExprOrPatId, InferenceContext, TraitRef}; | 17 | use super::{ExprOrPatId, InferenceContext, TraitRef}; |
15 | 18 | ||
@@ -39,7 +42,11 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
39 | } | 42 | } |
40 | let ty = self.make_ty(type_ref); | 43 | let ty = self.make_ty(type_ref); |
41 | let remaining_segments_for_ty = path.segments().take(path.segments().len() - 1); | 44 | let remaining_segments_for_ty = path.segments().take(path.segments().len() - 1); |
42 | let ctx = crate::lower::TyLoweringContext { db: self.db, resolver: &resolver }; | 45 | let ctx = crate::lower::TyLoweringContext { |
46 | db: self.db, | ||
47 | resolver: &resolver, | ||
48 | impl_trait_mode: ImplTraitLoweringMode::Disallowed, | ||
49 | }; | ||
43 | let ty = Ty::from_type_relative_path(&ctx, ty, remaining_segments_for_ty); | 50 | let ty = Ty::from_type_relative_path(&ctx, ty, remaining_segments_for_ty); |
44 | self.resolve_ty_assoc_item( | 51 | self.resolve_ty_assoc_item( |
45 | ty, | 52 | ty, |
@@ -74,7 +81,11 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
74 | if let Some(self_subst) = self_subst { | 81 | if let Some(self_subst) = self_subst { |
75 | ty = ty.subst(&self_subst); | 82 | ty = ty.subst(&self_subst); |
76 | } | 83 | } |
77 | let ctx = crate::lower::TyLoweringContext { db: self.db, resolver: &self.resolver }; | 84 | let ctx = crate::lower::TyLoweringContext { |
85 | db: self.db, | ||
86 | resolver: &self.resolver, | ||
87 | impl_trait_mode: ImplTraitLoweringMode::Disallowed, | ||
88 | }; | ||
78 | let substs = Ty::substs_from_path(&ctx, path, typable); | 89 | let substs = Ty::substs_from_path(&ctx, path, typable); |
79 | let ty = ty.subst(&substs); | 90 | let ty = ty.subst(&substs); |
80 | Some(ty) | 91 | Some(ty) |
@@ -100,7 +111,11 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
100 | (TypeNs::TraitId(trait_), true) => { | 111 | (TypeNs::TraitId(trait_), true) => { |
101 | let segment = | 112 | let segment = |
102 | remaining_segments.last().expect("there should be at least one segment here"); | 113 | remaining_segments.last().expect("there should be at least one segment here"); |
103 | let ctx = crate::lower::TyLoweringContext { db: self.db, resolver: &self.resolver }; | 114 | let ctx = crate::lower::TyLoweringContext { |
115 | db: self.db, | ||
116 | resolver: &self.resolver, | ||
117 | impl_trait_mode: ImplTraitLoweringMode::Disallowed, | ||
118 | }; | ||
104 | let trait_ref = | 119 | let trait_ref = |
105 | TraitRef::from_resolved_path(&ctx, trait_.into(), resolved_segment, None); | 120 | TraitRef::from_resolved_path(&ctx, trait_.into(), resolved_segment, None); |
106 | self.resolve_trait_assoc_item(trait_ref, segment, id) | 121 | self.resolve_trait_assoc_item(trait_ref, segment, id) |
@@ -112,7 +127,11 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
112 | // as Iterator>::Item::default`) | 127 | // as Iterator>::Item::default`) |
113 | let remaining_segments_for_ty = | 128 | let remaining_segments_for_ty = |
114 | remaining_segments.take(remaining_segments.len() - 1); | 129 | remaining_segments.take(remaining_segments.len() - 1); |
115 | let ctx = crate::lower::TyLoweringContext { db: self.db, resolver: &self.resolver }; | 130 | let ctx = crate::lower::TyLoweringContext { |
131 | db: self.db, | ||
132 | resolver: &self.resolver, | ||
133 | impl_trait_mode: ImplTraitLoweringMode::Disallowed, | ||
134 | }; | ||
116 | let ty = Ty::from_partly_resolved_hir_path( | 135 | let ty = Ty::from_partly_resolved_hir_path( |
117 | &ctx, | 136 | &ctx, |
118 | def, | 137 | def, |