File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -87,24 +87,27 @@ pub(crate) fn variant_list(p: &mut Parser<'_>) {
8787 attributes:: outer_attrs ( p) ;
8888 if p. at ( IDENT ) {
8989 name ( p) ;
90- match p. current ( ) {
91- T ! [ '{' ] => record_field_list ( p) ,
92- T ! [ '(' ] => tuple_field_list ( p) ,
93- _ => ( ) ,
94- }
95-
96- // test variant_discriminant
97- // enum E { X(i32) = 10 }
98- if p. eat ( T ! [ =] ) {
99- let m = p. start ( ) ;
100- expressions:: expr ( p) ;
101- m. complete ( p, CONST_ARG ) ;
102- }
103- m. complete ( p, VARIANT ) ;
90+ } else if p. at ( T ! [ _] ) {
91+ p. bump ( T ! [ _] ) ;
10492 } else {
10593 m. abandon ( p) ;
10694 p. err_and_bump ( "expected enum variant" ) ;
95+ return ;
96+ }
97+ match p. current ( ) {
98+ T ! [ '{' ] => record_field_list ( p) ,
99+ T ! [ '(' ] => tuple_field_list ( p) ,
100+ _ => ( ) ,
101+ }
102+
103+ // test variant_discriminant
104+ // enum E { X(i32) = 10 }
105+ if p. eat ( T ! [ =] ) {
106+ let m = p. start ( ) ;
107+ expressions:: expr ( p) ;
108+ m. complete ( p, CONST_ARG ) ;
107109 }
110+ m. complete ( p, VARIANT ) ;
108111 }
109112}
110113
Original file line number Diff line number Diff line change @@ -151,6 +151,16 @@ SOURCE_FILE
151151 L_PAREN "("
152152 R_PAREN ")"
153153 COMMA ","
154+ WHITESPACE "\n "
155+ VARIANT
156+ UNDERSCORE "_"
157+ WHITESPACE " "
158+ EQ "="
159+ WHITESPACE " "
160+ CONST_ARG
161+ RANGE_EXPR
162+ DOT2 ".."
163+ COMMA ","
154164 WHITESPACE "\n"
155165 R_CURLY "}"
156166 WHITESPACE "\n"
Original file line number Diff line number Diff line change @@ -22,4 +22,5 @@ enum E5 {
2222 F { } ,
2323 D ( u32 , ) ,
2424 E ( ) ,
25+ _ = ..,
2526}
Original file line number Diff line number Diff line change @@ -305,7 +305,7 @@ VariantList =
305305
306306Variant =
307307 Attr* Visibility?
308- Name FieldList? ('=' ConstArg)?
308+ ( Name | '_') FieldList? ('=' ConstArg)?
309309
310310Union =
311311 Attr* Visibility?
Original file line number Diff line number Diff line change @@ -2072,6 +2072,8 @@ impl Variant {
20722072 pub fn field_list ( & self ) -> Option < FieldList > { support:: child ( & self . syntax ) }
20732073 #[ inline]
20742074 pub fn eq_token ( & self ) -> Option < SyntaxToken > { support:: token ( & self . syntax , T ! [ =] ) }
2075+ #[ inline]
2076+ pub fn underscore_token ( & self ) -> Option < SyntaxToken > { support:: token ( & self . syntax , T ! [ _] ) }
20752077}
20762078pub struct VariantList {
20772079 pub ( crate ) syntax : SyntaxNode ,
You can’t perform that action at this time.
0 commit comments