@@ -623,7 +623,7 @@ fn lower_enum(grammar: &Grammar, rule: &Rule) -> Option<Vec<String>> {
623
623
}
624
624
625
625
fn lower_rule ( acc : & mut Vec < Field > , grammar : & Grammar , label : Option < & String > , rule : & Rule ) {
626
- if lower_comma_list ( acc, grammar, label, rule) {
626
+ if lower_seperated_list ( acc, grammar, label, rule) {
627
627
return ;
628
628
}
629
629
@@ -689,7 +689,7 @@ fn lower_rule(acc: &mut Vec<Field>, grammar: &Grammar, label: Option<&String>, r
689
689
}
690
690
691
691
// (T (',' T)* ','?)
692
- fn lower_comma_list (
692
+ fn lower_seperated_list (
693
693
acc : & mut Vec < Field > ,
694
694
grammar : & Grammar ,
695
695
label : Option < & String > ,
@@ -699,19 +699,23 @@ fn lower_comma_list(
699
699
Rule :: Seq ( it) => it,
700
700
_ => return false ,
701
701
} ;
702
- let ( node, repeat, trailing_comma ) = match rule. as_slice ( ) {
703
- [ Rule :: Node ( node) , Rule :: Rep ( repeat) , Rule :: Opt ( trailing_comma ) ] => {
704
- ( node, repeat, trailing_comma )
702
+ let ( node, repeat, trailing_sep ) = match rule. as_slice ( ) {
703
+ [ Rule :: Node ( node) , Rule :: Rep ( repeat) , Rule :: Opt ( trailing_sep ) ] => {
704
+ ( node, repeat, Some ( trailing_sep ) )
705
705
}
706
+ [ Rule :: Node ( node) , Rule :: Rep ( repeat) ] => ( node, repeat, None ) ,
706
707
_ => return false ,
707
708
} ;
708
709
let repeat = match & * * repeat {
709
710
Rule :: Seq ( it) => it,
710
711
_ => return false ,
711
712
} ;
712
- match repeat. as_slice ( ) {
713
- [ comma, Rule :: Node ( n) ] if comma == & * * trailing_comma && n == node => ( ) ,
714
- _ => return false ,
713
+ if !matches ! (
714
+ repeat. as_slice( ) ,
715
+ [ comma, Rule :: Node ( n) ]
716
+ if trailing_sep. map_or( true , |it| comma == & * * it) && n == node
717
+ ) {
718
+ return false ;
715
719
}
716
720
let ty = grammar[ * node] . name . clone ( ) ;
717
721
let name = label. cloned ( ) . unwrap_or_else ( || pluralize ( & to_lower_snake_case ( & ty) ) ) ;
0 commit comments