From a78228a39c4786e67e5a94384388a04aa8d7b172 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sun, 5 May 2019 16:04:31 +0200 Subject: Turn `implements` into a query again --- crates/ra_hir/src/ty/infer.rs | 3 +-- crates/ra_hir/src/ty/method_resolution.rs | 3 +-- crates/ra_hir/src/ty/traits.rs | 6 +++--- 3 files changed, 5 insertions(+), 7 deletions(-) (limited to 'crates/ra_hir/src/ty') diff --git a/crates/ra_hir/src/ty/infer.rs b/crates/ra_hir/src/ty/infer.rs index edce1afe7..1e7d97f51 100644 --- a/crates/ra_hir/src/ty/infer.rs +++ b/crates/ra_hir/src/ty/infer.rs @@ -328,8 +328,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { Obligation::Trait(tr) => { let canonicalized = self.canonicalizer().canonicalize_trait_ref(tr.clone()); ( - super::traits::implements( - self.db, + self.db.implements( self.resolver.krate().unwrap(), canonicalized.value.clone(), ), diff --git a/crates/ra_hir/src/ty/method_resolution.rs b/crates/ra_hir/src/ty/method_resolution.rs index 607e9ba79..d8b8c836c 100644 --- a/crates/ra_hir/src/ty/method_resolution.rs +++ b/crates/ra_hir/src/ty/method_resolution.rs @@ -196,8 +196,7 @@ fn iterate_trait_method_candidates( if name.map_or(true, |name| sig.name() == name) && sig.has_self_param() { if !known_implemented { let trait_ref = canonical_trait_ref(db, t, ty.clone()); - // FIXME cache this implements check (without solution) in a query? - if super::traits::implements(db, krate, trait_ref).is_none() { + if db.implements(krate, trait_ref).is_none() { continue 'traits; } } diff --git a/crates/ra_hir/src/ty/traits.rs b/crates/ra_hir/src/ty/traits.rs index a1ed0c028..f70a32575 100644 --- a/crates/ra_hir/src/ty/traits.rs +++ b/crates/ra_hir/src/ty/traits.rs @@ -125,11 +125,11 @@ fn solution_from_chalk(db: &impl HirDatabase, solution: chalk_solve::Solution) - } #[derive(Clone, Debug, PartialEq, Eq)] -pub(crate) struct SolutionVariables(pub Canonical>); +pub struct SolutionVariables(pub Canonical>); #[derive(Clone, Debug, PartialEq, Eq)] /// A (possible) solution for a proposed goal. -pub(crate) enum Solution { +pub enum Solution { /// The goal indeed holds, and there is a unique value for all existential /// variables. Unique(SolutionVariables), @@ -144,7 +144,7 @@ pub(crate) enum Solution { #[derive(Clone, Debug, PartialEq, Eq)] /// When a goal holds ambiguously (e.g., because there are multiple possible /// solutions), we issue a set of *guidance* back to type inference. -pub(crate) enum Guidance { +pub enum Guidance { /// The existential variables *must* have the given values if the goal is /// ever to hold, but that alone isn't enough to guarantee the goal will /// actually hold. -- cgit v1.2.3