diff options
Diffstat (limited to 'crates/hir_ty')
-rw-r--r-- | crates/hir_ty/src/infer.rs | 2 | ||||
-rw-r--r-- | crates/hir_ty/src/tests/traits.rs | 30 |
2 files changed, 32 insertions, 0 deletions
diff --git a/crates/hir_ty/src/infer.rs b/crates/hir_ty/src/infer.rs index edb65622f..164e85050 100644 --- a/crates/hir_ty/src/infer.rs +++ b/crates/hir_ty/src/infer.rs | |||
@@ -578,10 +578,12 @@ impl<'a> InferenceContext<'a> { | |||
578 | } | 578 | } |
579 | 579 | ||
580 | fn resolve_ops_try_ok(&self) -> Option<TypeAliasId> { | 580 | fn resolve_ops_try_ok(&self) -> Option<TypeAliasId> { |
581 | // FIXME resolve via lang_item once try v2 is stable | ||
581 | let path = path![core::ops::Try]; | 582 | let path = path![core::ops::Try]; |
582 | let trait_ = self.resolver.resolve_known_trait(self.db.upcast(), &path)?; | 583 | let trait_ = self.resolver.resolve_known_trait(self.db.upcast(), &path)?; |
583 | let trait_data = self.db.trait_data(trait_); | 584 | let trait_data = self.db.trait_data(trait_); |
584 | trait_data | 585 | trait_data |
586 | // FIXME remove once try v2 is stable | ||
585 | .associated_type_by_name(&name![Ok]) | 587 | .associated_type_by_name(&name![Ok]) |
586 | .or_else(|| trait_data.associated_type_by_name(&name![Output])) | 588 | .or_else(|| trait_data.associated_type_by_name(&name![Output])) |
587 | } | 589 | } |
diff --git a/crates/hir_ty/src/tests/traits.rs b/crates/hir_ty/src/tests/traits.rs index 6cd8786ea..6ad96bfe3 100644 --- a/crates/hir_ty/src/tests/traits.rs +++ b/crates/hir_ty/src/tests/traits.rs | |||
@@ -3630,3 +3630,33 @@ fn test<F: FnOnce()>(f: F) { | |||
3630 | "#]], | 3630 | "#]], |
3631 | ); | 3631 | ); |
3632 | } | 3632 | } |
3633 | |||
3634 | #[test] | ||
3635 | fn trait_in_scope_of_trait_impl() { | ||
3636 | check_infer( | ||
3637 | r#" | ||
3638 | mod foo { | ||
3639 | pub trait Foo { | ||
3640 | fn foo(self); | ||
3641 | fn bar(self) -> usize { 0 } | ||
3642 | } | ||
3643 | } | ||
3644 | impl foo::Foo for u32 { | ||
3645 | fn foo(self) { | ||
3646 | let _x = self.bar(); | ||
3647 | } | ||
3648 | } | ||
3649 | "#, | ||
3650 | expect![[r#" | ||
3651 | 45..49 'self': Self | ||
3652 | 67..71 'self': Self | ||
3653 | 82..87 '{ 0 }': usize | ||
3654 | 84..85 '0': usize | ||
3655 | 131..135 'self': u32 | ||
3656 | 137..173 '{ ... }': () | ||
3657 | 151..153 '_x': usize | ||
3658 | 156..160 'self': u32 | ||
3659 | 156..166 'self.bar()': usize | ||
3660 | "#]], | ||
3661 | ); | ||
3662 | } | ||