@@ -11,8 +11,8 @@ use crate::{
1111 db:: { AstDatabase , DefDatabase , HirDatabase } ,
1212 path:: Path ,
1313 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 ,
1616} ;
1717
1818/// Data about a generic parameter (to a function, struct, impl, ...).
@@ -50,8 +50,11 @@ pub enum GenericDef {
5050 Trait ( Trait ) ,
5151 TypeAlias ( TypeAlias ) ,
5252 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 ) ,
5356}
54- impl_froms ! ( GenericDef : Function , Struct , Union , Enum , Trait , TypeAlias , ImplBlock ) ;
57+ impl_froms ! ( GenericDef : Function , Struct , Union , Enum , Trait , TypeAlias , ImplBlock , EnumVariant ) ;
5558
5659impl GenericParams {
5760 pub ( crate ) fn generic_params_query (
@@ -62,6 +65,7 @@ impl GenericParams {
6265 let parent = match def {
6366 GenericDef :: Function ( it) => it. container ( db) . map ( GenericDef :: from) ,
6467 GenericDef :: TypeAlias ( it) => it. container ( db) . map ( GenericDef :: from) ,
68+ GenericDef :: EnumVariant ( it) => Some ( it. parent_enum ( db) . into ( ) ) ,
6569 GenericDef :: Struct ( _)
6670 | GenericDef :: Union ( _)
6771 | GenericDef :: Enum ( _)
@@ -86,6 +90,7 @@ impl GenericParams {
8690 }
8791 GenericDef :: TypeAlias ( it) => generics. fill ( & * it. source ( db) . ast , start) ,
8892 GenericDef :: ImplBlock ( it) => generics. fill ( & * it. source ( db) . ast , start) ,
93+ GenericDef :: EnumVariant ( _) => { }
8994 }
9095
9196 Arc :: new ( generics)
@@ -184,6 +189,7 @@ impl GenericDef {
184189 GenericDef :: Trait ( inner) => inner. resolver ( db) ,
185190 GenericDef :: TypeAlias ( inner) => inner. resolver ( db) ,
186191 GenericDef :: ImplBlock ( inner) => inner. resolver ( db) ,
192+ GenericDef :: EnumVariant ( inner) => inner. parent_enum ( db) . resolver ( db) ,
187193 }
188194 }
189195}
0 commit comments