diff options
Diffstat (limited to 'crates/ra_hir/src/ty/traits.rs')
-rw-r--r-- | crates/ra_hir/src/ty/traits.rs | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/crates/ra_hir/src/ty/traits.rs b/crates/ra_hir/src/ty/traits.rs index 25316bc02..6e0271a96 100644 --- a/crates/ra_hir/src/ty/traits.rs +++ b/crates/ra_hir/src/ty/traits.rs | |||
@@ -8,7 +8,7 @@ use ra_db::salsa; | |||
8 | use ra_prof::profile; | 8 | use ra_prof::profile; |
9 | use rustc_hash::FxHashSet; | 9 | use rustc_hash::FxHashSet; |
10 | 10 | ||
11 | use super::{Canonical, GenericPredicate, HirDisplay, ProjectionTy, TraitRef, Ty}; | 11 | use super::{Canonical, GenericPredicate, HirDisplay, ProjectionTy, TraitRef, Ty, TypeWalk}; |
12 | use crate::{db::HirDatabase, Crate, ImplBlock, Trait}; | 12 | use crate::{db::HirDatabase, Crate, ImplBlock, Trait}; |
13 | 13 | ||
14 | use self::chalk::{from_chalk, ToChalk}; | 14 | use self::chalk::{from_chalk, ToChalk}; |
@@ -138,25 +138,13 @@ pub struct ProjectionPredicate { | |||
138 | pub ty: Ty, | 138 | pub ty: Ty, |
139 | } | 139 | } |
140 | 140 | ||
141 | impl ProjectionPredicate { | 141 | impl TypeWalk for ProjectionPredicate { |
142 | pub fn subst(mut self, substs: &super::Substs) -> ProjectionPredicate { | 142 | fn walk(&self, f: &mut impl FnMut(&Ty)) { |
143 | self.walk_mut(&mut |ty| match ty { | ||
144 | Ty::Param { idx, .. } => { | ||
145 | if let Some(t) = substs.get(*idx as usize).cloned() { | ||
146 | *ty = t; | ||
147 | } | ||
148 | } | ||
149 | _ => {} | ||
150 | }); | ||
151 | self | ||
152 | } | ||
153 | |||
154 | pub fn walk(&self, f: &mut impl FnMut(&Ty)) { | ||
155 | self.projection_ty.walk(f); | 143 | self.projection_ty.walk(f); |
156 | self.ty.walk(f); | 144 | self.ty.walk(f); |
157 | } | 145 | } |
158 | 146 | ||
159 | pub fn walk_mut(&mut self, f: &mut impl FnMut(&mut Ty)) { | 147 | fn walk_mut(&mut self, f: &mut impl FnMut(&mut Ty)) { |
160 | self.projection_ty.walk_mut(f); | 148 | self.projection_ty.walk_mut(f); |
161 | self.ty.walk_mut(f); | 149 | self.ty.walk_mut(f); |
162 | } | 150 | } |