diff options
Diffstat (limited to 'crates/ra_hir/src/ty/method_resolution.rs')
-rw-r--r-- | crates/ra_hir/src/ty/method_resolution.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/crates/ra_hir/src/ty/method_resolution.rs b/crates/ra_hir/src/ty/method_resolution.rs index 9873a0440..cf787bdaa 100644 --- a/crates/ra_hir/src/ty/method_resolution.rs +++ b/crates/ra_hir/src/ty/method_resolution.rs | |||
@@ -212,7 +212,13 @@ fn iterate_trait_method_candidates<T>( | |||
212 | // FIXME: maybe put the trait_env behind a query (need to figure out good input parameters for that) | 212 | // FIXME: maybe put the trait_env behind a query (need to figure out good input parameters for that) |
213 | let env = lower::trait_env(db, resolver); | 213 | let env = lower::trait_env(db, resolver); |
214 | // if ty is `impl Trait` or `dyn Trait`, the trait doesn't need to be in scope | 214 | // if ty is `impl Trait` or `dyn Trait`, the trait doesn't need to be in scope |
215 | let traits = ty.value.inherent_trait().into_iter().chain(resolver.traits_in_scope(db)); | 215 | let inherent_trait = ty.value.inherent_trait().into_iter(); |
216 | // if we have `T: Trait` in the param env, the trait doesn't need to be in scope | ||
217 | let traits_from_env = env | ||
218 | .trait_predicates_for_self_ty(&ty.value) | ||
219 | .map(|tr| tr.trait_) | ||
220 | .flat_map(|t| t.all_super_traits(db)); | ||
221 | let traits = inherent_trait.chain(traits_from_env).chain(resolver.traits_in_scope(db)); | ||
216 | 'traits: for t in traits { | 222 | 'traits: for t in traits { |
217 | let data = t.trait_data(db); | 223 | let data = t.trait_data(db); |
218 | 224 | ||