From 065d3987012b138b123f0544de193f8bb560b1b5 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sat, 6 Jul 2019 16:41:04 +0200 Subject: Add trait obligations for where clauses when calling functions/methods E.g. if we call `foo>(x)`, that adds an obligation that `x: Into`, etc. --- crates/ra_hir/src/ty/traits.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir/src/ty/traits.rs') diff --git a/crates/ra_hir/src/ty/traits.rs b/crates/ra_hir/src/ty/traits.rs index cff4de316..23a26a971 100644 --- a/crates/ra_hir/src/ty/traits.rs +++ b/crates/ra_hir/src/ty/traits.rs @@ -7,7 +7,7 @@ use parking_lot::Mutex; use ra_prof::profile; use rustc_hash::FxHashSet; -use super::{Canonical, ProjectionTy, TraitRef, Ty}; +use super::{Canonical, GenericPredicate, ProjectionTy, TraitRef, Ty}; use crate::{db::HirDatabase, Crate, ImplBlock, Trait}; use self::chalk::{from_chalk, ToChalk}; @@ -78,6 +78,15 @@ pub enum Obligation { // Projection(ProjectionPredicate), } +impl Obligation { + pub fn from_predicate(predicate: GenericPredicate) -> Option { + match predicate { + GenericPredicate::Implemented(trait_ref) => Some(Obligation::Trait(trait_ref)), + GenericPredicate::Error => None, + } + } +} + #[derive(Clone, Debug, PartialEq, Eq, Hash)] pub struct ProjectionPredicate { pub projection_ty: ProjectionTy, -- cgit v1.2.3