diff options
Diffstat (limited to 'crates/ra_hir/src/ty')
-rw-r--r-- | crates/ra_hir/src/ty/infer.rs | 1 | ||||
-rw-r--r-- | crates/ra_hir/src/ty/lower.rs | 1 | ||||
-rw-r--r-- | crates/ra_hir/src/ty/tests.rs | 19 |
3 files changed, 21 insertions, 0 deletions
diff --git a/crates/ra_hir/src/ty/infer.rs b/crates/ra_hir/src/ty/infer.rs index ca9aefc42..a69f04ff1 100644 --- a/crates/ra_hir/src/ty/infer.rs +++ b/crates/ra_hir/src/ty/infer.rs | |||
@@ -559,6 +559,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
559 | match resolver.resolve_path_in_type_ns_fully(self.db, &path) { | 559 | match resolver.resolve_path_in_type_ns_fully(self.db, &path) { |
560 | Some(TypeNs::Adt(Adt::Struct(it))) => it.into(), | 560 | Some(TypeNs::Adt(Adt::Struct(it))) => it.into(), |
561 | Some(TypeNs::Adt(Adt::Union(it))) => it.into(), | 561 | Some(TypeNs::Adt(Adt::Union(it))) => it.into(), |
562 | Some(TypeNs::AdtSelfType(adt)) => adt.into(), | ||
562 | Some(TypeNs::EnumVariant(it)) => it.into(), | 563 | Some(TypeNs::EnumVariant(it)) => it.into(), |
563 | Some(TypeNs::TypeAlias(it)) => it.into(), | 564 | Some(TypeNs::TypeAlias(it)) => it.into(), |
564 | 565 | ||
diff --git a/crates/ra_hir/src/ty/lower.rs b/crates/ra_hir/src/ty/lower.rs index 4b67c82e7..a604c02e2 100644 --- a/crates/ra_hir/src/ty/lower.rs +++ b/crates/ra_hir/src/ty/lower.rs | |||
@@ -175,6 +175,7 @@ impl Ty { | |||
175 | Ty::Param { idx, name } | 175 | Ty::Param { idx, name } |
176 | } | 176 | } |
177 | TypeNs::SelfType(impl_block) => impl_block.target_ty(db), | 177 | TypeNs::SelfType(impl_block) => impl_block.target_ty(db), |
178 | TypeNs::AdtSelfType(adt) => adt.ty(db), | ||
178 | 179 | ||
179 | TypeNs::Adt(it) => Ty::from_hir_path_inner(db, resolver, resolved_segment, it.into()), | 180 | TypeNs::Adt(it) => Ty::from_hir_path_inner(db, resolver, resolved_segment, it.into()), |
180 | TypeNs::BuiltinType(it) => { | 181 | TypeNs::BuiltinType(it) => { |
diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 25dad81eb..03b30adcd 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs | |||
@@ -135,6 +135,25 @@ mod boxed { | |||
135 | } | 135 | } |
136 | 136 | ||
137 | #[test] | 137 | #[test] |
138 | fn infer_adt_self() { | ||
139 | let (db, pos) = MockDatabase::with_position( | ||
140 | r#" | ||
141 | //- /main.rs | ||
142 | enum Nat { Succ(Self), Demo(Nat), Zero } | ||
143 | |||
144 | fn test() { | ||
145 | let foo: Nat = Nat::Zero; | ||
146 | if let Nat::Succ(x) = foo { | ||
147 | x<|> | ||
148 | } | ||
149 | } | ||
150 | |||
151 | "#, | ||
152 | ); | ||
153 | assert_eq!("Nat", type_at_pos(&db, pos)); | ||
154 | } | ||
155 | |||
156 | #[test] | ||
138 | fn infer_try() { | 157 | fn infer_try() { |
139 | let (mut db, pos) = MockDatabase::with_position( | 158 | let (mut db, pos) = MockDatabase::with_position( |
140 | r#" | 159 | r#" |