aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/generics.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/generics.rs')
-rw-r--r--crates/ra_hir/src/generics.rs13
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
10use crate::{ 10use 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 {
42pub enum GenericDef { 42pub 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}
50impl_froms!(GenericDef: Function, Struct, Enum, Trait, TypeAlias, ImplBlock); 51impl_froms!(GenericDef: Function, Struct, Union, Enum, Trait, TypeAlias, ImplBlock);
51 52
52impl GenericParams { 53impl 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 }