@@ -11,8 +11,8 @@ use crate::{
11
11
db:: { AstDatabase , DefDatabase , HirDatabase } ,
12
12
path:: Path ,
13
13
type_ref:: TypeRef ,
14
- AdtDef , AsName , Container , Enum , Function , HasSource , ImplBlock , Name , Struct , Trait ,
15
- TypeAlias , Union ,
14
+ AdtDef , AsName , Container , Enum , EnumVariant , Function , HasSource , ImplBlock , Name , Struct ,
15
+ Trait , TypeAlias , Union ,
16
16
} ;
17
17
18
18
/// Data about a generic parameter (to a function, struct, impl, ...).
@@ -50,8 +50,11 @@ pub enum GenericDef {
50
50
Trait ( Trait ) ,
51
51
TypeAlias ( TypeAlias ) ,
52
52
ImplBlock ( ImplBlock ) ,
53
+ // enum variants cannot have generics themselves, but their parent enums
54
+ // can, and this makes some code easier to write
55
+ EnumVariant ( EnumVariant ) ,
53
56
}
54
- impl_froms ! ( GenericDef : Function , Struct , Union , Enum , Trait , TypeAlias , ImplBlock ) ;
57
+ impl_froms ! ( GenericDef : Function , Struct , Union , Enum , Trait , TypeAlias , ImplBlock , EnumVariant ) ;
55
58
56
59
impl GenericParams {
57
60
pub ( crate ) fn generic_params_query (
@@ -62,6 +65,7 @@ impl GenericParams {
62
65
let parent = match def {
63
66
GenericDef :: Function ( it) => it. container ( db) . map ( GenericDef :: from) ,
64
67
GenericDef :: TypeAlias ( it) => it. container ( db) . map ( GenericDef :: from) ,
68
+ GenericDef :: EnumVariant ( it) => Some ( it. parent_enum ( db) . into ( ) ) ,
65
69
GenericDef :: Struct ( _)
66
70
| GenericDef :: Union ( _)
67
71
| GenericDef :: Enum ( _)
@@ -86,6 +90,7 @@ impl GenericParams {
86
90
}
87
91
GenericDef :: TypeAlias ( it) => generics. fill ( & * it. source ( db) . ast , start) ,
88
92
GenericDef :: ImplBlock ( it) => generics. fill ( & * it. source ( db) . ast , start) ,
93
+ GenericDef :: EnumVariant ( _) => { }
89
94
}
90
95
91
96
Arc :: new ( generics)
@@ -184,6 +189,7 @@ impl GenericDef {
184
189
GenericDef :: Trait ( inner) => inner. resolver ( db) ,
185
190
GenericDef :: TypeAlias ( inner) => inner. resolver ( db) ,
186
191
GenericDef :: ImplBlock ( inner) => inner. resolver ( db) ,
192
+ GenericDef :: EnumVariant ( inner) => inner. parent_enum ( db) . resolver ( db) ,
187
193
}
188
194
}
189
195
}
0 commit comments