diff options
author | Florian Diebold <[email protected]> | 2019-07-08 20:43:52 +0100 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2019-07-08 20:47:37 +0100 |
commit | 9afbf2dff43dee3227358f10162d4c77d192ce7a (patch) | |
tree | 82d38315b9be21dec920f59389ea89cdb3ae0a41 /crates/ra_hir/src/ty/method_resolution.rs | |
parent | 15862fc04183c7f9b3f3af666336a594a6a52cd9 (diff) |
Unify `normalize` and `implements` to simplify code
Diffstat (limited to 'crates/ra_hir/src/ty/method_resolution.rs')
-rw-r--r-- | crates/ra_hir/src/ty/method_resolution.rs | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/crates/ra_hir/src/ty/method_resolution.rs b/crates/ra_hir/src/ty/method_resolution.rs index 40f5eabf0..e214bf1af 100644 --- a/crates/ra_hir/src/ty/method_resolution.rs +++ b/crates/ra_hir/src/ty/method_resolution.rs | |||
@@ -211,8 +211,8 @@ fn iterate_trait_method_candidates<T>( | |||
211 | let data = m.data(db); | 211 | let data = m.data(db); |
212 | if name.map_or(true, |name| data.name() == name) && data.has_self_param() { | 212 | if name.map_or(true, |name| data.name() == name) && data.has_self_param() { |
213 | if !known_implemented { | 213 | if !known_implemented { |
214 | let trait_ref = canonical_trait_ref(db, env.clone(), t, ty.clone()); | 214 | let goal = generic_implements_goal(db, env.clone(), t, ty.clone()); |
215 | if db.implements(krate, trait_ref).is_none() { | 215 | if db.solve(krate, goal).is_none() { |
216 | continue 'traits; | 216 | continue 'traits; |
217 | } | 217 | } |
218 | } | 218 | } |
@@ -279,12 +279,12 @@ impl Ty { | |||
279 | 279 | ||
280 | /// This creates Substs for a trait with the given Self type and type variables | 280 | /// This creates Substs for a trait with the given Self type and type variables |
281 | /// for all other parameters, to query Chalk with it. | 281 | /// for all other parameters, to query Chalk with it. |
282 | fn canonical_trait_ref( | 282 | fn generic_implements_goal( |
283 | db: &impl HirDatabase, | 283 | db: &impl HirDatabase, |
284 | env: Arc<Environment>, | 284 | env: Arc<Environment>, |
285 | trait_: Trait, | 285 | trait_: Trait, |
286 | self_ty: Canonical<Ty>, | 286 | self_ty: Canonical<Ty>, |
287 | ) -> Canonical<InEnvironment<TraitRef>> { | 287 | ) -> Canonical<InEnvironment<super::Obligation>> { |
288 | let mut substs = Vec::new(); | 288 | let mut substs = Vec::new(); |
289 | let generics = trait_.generic_params(db); | 289 | let generics = trait_.generic_params(db); |
290 | let num_vars = self_ty.num_vars; | 290 | let num_vars = self_ty.num_vars; |
@@ -297,8 +297,8 @@ fn canonical_trait_ref( | |||
297 | .enumerate() | 297 | .enumerate() |
298 | .map(|(i, _p)| Ty::Bound((i + num_vars) as u32)), | 298 | .map(|(i, _p)| Ty::Bound((i + num_vars) as u32)), |
299 | ); | 299 | ); |
300 | Canonical { | 300 | let num_vars = substs.len() - 1 + self_ty.num_vars; |
301 | num_vars: substs.len() - 1 + self_ty.num_vars, | 301 | let trait_ref = TraitRef { trait_, substs: substs.into() }; |
302 | value: InEnvironment::new(env, TraitRef { trait_, substs: substs.into() }), | 302 | let obligation = super::Obligation::Trait(trait_ref); |
303 | } | 303 | Canonical { num_vars, value: InEnvironment::new(env, obligation) } |
304 | } | 304 | } |