diff options
author | Florian Diebold <[email protected]> | 2019-06-29 18:14:52 +0100 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2019-07-08 20:20:17 +0100 |
commit | b1b12072eddaf989fb08ed7a2e39ec2dbbb83dde (patch) | |
tree | 63bb052a39df80dcd0771a18a7a475df3e6a5fe1 /crates/ra_hir/src/ty/lower.rs | |
parent | 638100dc8bea69cc4093d15f1641ed39a8d27a43 (diff) |
Start handling environment in trait resolution
I.e. if we are inside a function with some where clauses, we assume these where
clauses hold.
Diffstat (limited to 'crates/ra_hir/src/ty/lower.rs')
-rw-r--r-- | crates/ra_hir/src/ty/lower.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/crates/ra_hir/src/ty/lower.rs b/crates/ra_hir/src/ty/lower.rs index b48ada760..ca47d6e96 100644 --- a/crates/ra_hir/src/ty/lower.rs +++ b/crates/ra_hir/src/ty/lower.rs | |||
@@ -317,6 +317,18 @@ pub(crate) fn type_for_field(db: &impl HirDatabase, field: StructField) -> Ty { | |||
317 | Ty::from_hir(db, &resolver, type_ref) | 317 | Ty::from_hir(db, &resolver, type_ref) |
318 | } | 318 | } |
319 | 319 | ||
320 | pub(crate) fn trait_env(db: &impl HirDatabase, resolver: &Resolver) -> Arc<super::Environment> { | ||
321 | let predicates = resolver | ||
322 | .where_predicates_in_scope() | ||
323 | .map(|pred| { | ||
324 | TraitRef::for_where_predicate(db, &resolver, pred) | ||
325 | .map_or(GenericPredicate::Error, GenericPredicate::Implemented) | ||
326 | }) | ||
327 | .collect::<Vec<_>>(); | ||
328 | |||
329 | Arc::new(super::Environment { predicates }) | ||
330 | } | ||
331 | |||
320 | /// Resolve the where clause(s) of an item with generics. | 332 | /// Resolve the where clause(s) of an item with generics. |
321 | pub(crate) fn generic_predicates_query( | 333 | pub(crate) fn generic_predicates_query( |
322 | db: &impl HirDatabase, | 334 | db: &impl HirDatabase, |