diff options
Diffstat (limited to 'crates/ra_hir/src/generics.rs')
-rw-r--r-- | crates/ra_hir/src/generics.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/crates/ra_hir/src/generics.rs b/crates/ra_hir/src/generics.rs index 79a7fa23a..8effbbe35 100644 --- a/crates/ra_hir/src/generics.rs +++ b/crates/ra_hir/src/generics.rs | |||
@@ -9,7 +9,7 @@ use ra_syntax::ast::{self, NameOwner, TypeParamsOwner, TypeBoundsOwner, DefaultT | |||
9 | 9 | ||
10 | use crate::{ | 10 | use crate::{ |
11 | db::{ HirDatabase, DefDatabase}, | 11 | db::{ HirDatabase, DefDatabase}, |
12 | Name, AsName, Function, Struct, Enum, Trait, TypeAlias, ImplBlock, Container, path::Path, type_ref::TypeRef, AdtDef | 12 | Name, AsName, Function, Struct, Union, Enum, Trait, TypeAlias, ImplBlock, Container, path::Path, type_ref::TypeRef, AdtDef |
13 | }; | 13 | }; |
14 | 14 | ||
15 | /// Data about a generic parameter (to a function, struct, impl, ...). | 15 | /// Data about a generic parameter (to a function, struct, impl, ...). |
@@ -42,12 +42,13 @@ pub struct WherePredicate { | |||
42 | pub enum GenericDef { | 42 | pub enum GenericDef { |
43 | Function(Function), | 43 | Function(Function), |
44 | Struct(Struct), | 44 | Struct(Struct), |
45 | Union(Union), | ||
45 | Enum(Enum), | 46 | Enum(Enum), |
46 | Trait(Trait), | 47 | Trait(Trait), |
47 | TypeAlias(TypeAlias), | 48 | TypeAlias(TypeAlias), |
48 | ImplBlock(ImplBlock), | 49 | ImplBlock(ImplBlock), |
49 | } | 50 | } |
50 | impl_froms!(GenericDef: Function, Struct, Enum, Trait, TypeAlias, ImplBlock); | 51 | impl_froms!(GenericDef: Function, Struct, Union, Enum, Trait, TypeAlias, ImplBlock); |
51 | 52 | ||
52 | impl GenericParams { | 53 | impl GenericParams { |
53 | pub(crate) fn generic_params_query( | 54 | pub(crate) fn generic_params_query( |
@@ -58,7 +59,10 @@ impl GenericParams { | |||
58 | let parent = match def { | 59 | let parent = match def { |
59 | GenericDef::Function(it) => it.container(db).map(GenericDef::from), | 60 | GenericDef::Function(it) => it.container(db).map(GenericDef::from), |
60 | GenericDef::TypeAlias(it) => it.container(db).map(GenericDef::from), | 61 | GenericDef::TypeAlias(it) => it.container(db).map(GenericDef::from), |
61 | GenericDef::Struct(_) | GenericDef::Enum(_) | GenericDef::Trait(_) => None, | 62 | GenericDef::Struct(_) |
63 | | GenericDef::Union(_) | ||
64 | | GenericDef::Enum(_) | ||
65 | | GenericDef::Trait(_) => None, | ||
62 | GenericDef::ImplBlock(_) => None, | 66 | GenericDef::ImplBlock(_) => None, |
63 | }; | 67 | }; |
64 | generics.parent_params = parent.map(|p| db.generic_params(p)); | 68 | generics.parent_params = parent.map(|p| db.generic_params(p)); |
@@ -66,6 +70,7 @@ impl GenericParams { | |||
66 | match def { | 70 | match def { |
67 | GenericDef::Function(it) => generics.fill(&*it.source(db).1, start), | 71 | GenericDef::Function(it) => generics.fill(&*it.source(db).1, start), |
68 | GenericDef::Struct(it) => generics.fill(&*it.source(db).1, start), | 72 | GenericDef::Struct(it) => generics.fill(&*it.source(db).1, start), |
73 | GenericDef::Union(it) => generics.fill(&*it.source(db).1, start), | ||
69 | GenericDef::Enum(it) => generics.fill(&*it.source(db).1, start), | 74 | GenericDef::Enum(it) => generics.fill(&*it.source(db).1, start), |
70 | GenericDef::Trait(it) => { | 75 | GenericDef::Trait(it) => { |
71 | // traits get the Self type as an implicit first type parameter | 76 | // traits get the Self type as an implicit first type parameter |
@@ -171,6 +176,7 @@ impl GenericDef { | |||
171 | match self { | 176 | match self { |
172 | GenericDef::Function(inner) => inner.resolver(db), | 177 | GenericDef::Function(inner) => inner.resolver(db), |
173 | GenericDef::Struct(inner) => inner.resolver(db), | 178 | GenericDef::Struct(inner) => inner.resolver(db), |
179 | GenericDef::Union(inner) => inner.resolver(db), | ||
174 | GenericDef::Enum(inner) => inner.resolver(db), | 180 | GenericDef::Enum(inner) => inner.resolver(db), |
175 | GenericDef::Trait(inner) => inner.resolver(db), | 181 | GenericDef::Trait(inner) => inner.resolver(db), |
176 | GenericDef::TypeAlias(inner) => inner.resolver(db), | 182 | GenericDef::TypeAlias(inner) => inner.resolver(db), |
@@ -192,6 +198,7 @@ impl From<crate::adt::AdtDef> for GenericDef { | |||
192 | fn from(adt: crate::adt::AdtDef) -> Self { | 198 | fn from(adt: crate::adt::AdtDef) -> Self { |
193 | match adt { | 199 | match adt { |
194 | AdtDef::Struct(s) => s.into(), | 200 | AdtDef::Struct(s) => s.into(), |
201 | AdtDef::Union(u) => u.into(), | ||
195 | AdtDef::Enum(e) => e.into(), | 202 | AdtDef::Enum(e) => e.into(), |
196 | } | 203 | } |
197 | } | 204 | } |