@@ -13,7 +13,7 @@ use quote::{format_ident, quote};
13
13
use ungrammar:: { Grammar , Rule } ;
14
14
15
15
use crate :: {
16
- ast_src:: { AstEnumSrc , AstNodeSrc , AstSrc , Field , FieldSrc , KindsSrc , KINDS_SRC } ,
16
+ ast_src:: { AstEnumSrc , AstNodeSrc , AstSrc , Field , KindsSrc , Valence , KINDS_SRC } ,
17
17
codegen:: { self , update, Mode } ,
18
18
project_root, Result ,
19
19
} ;
@@ -431,7 +431,7 @@ fn pluralize(s: &str) -> String {
431
431
432
432
impl Field {
433
433
fn is_many ( & self ) -> bool {
434
- matches ! ( self , Field :: Node { src : FieldSrc :: Many ( _ ) , .. } )
434
+ matches ! ( self , Field :: Node { valence : Valence :: Many , .. } )
435
435
}
436
436
fn token_kind ( & self ) -> Option < proc_macro2:: TokenStream > {
437
437
match self {
@@ -476,19 +476,13 @@ impl Field {
476
476
} ;
477
477
format_ident ! ( "{}_token" , name)
478
478
}
479
- Field :: Node { name, src } => match src {
480
- FieldSrc :: Shorthand => format_ident ! ( "{}" , to_lower_snake_case( name) ) ,
481
- _ => format_ident ! ( "{}" , name) ,
482
- } ,
479
+ Field :: Node { name, .. } => format_ident ! ( "{}" , name) ,
483
480
}
484
481
}
485
482
fn ty ( & self ) -> proc_macro2:: Ident {
486
483
match self {
487
484
Field :: Token ( _) => format_ident ! ( "SyntaxToken" ) ,
488
- Field :: Node { name, src } => match src {
489
- FieldSrc :: Optional ( ty) | FieldSrc :: Many ( ty) => format_ident ! ( "{}" , ty) ,
490
- FieldSrc :: Shorthand => format_ident ! ( "{}" , name) ,
491
- } ,
485
+ Field :: Node { ty, .. } => format_ident ! ( "{}" , ty) ,
492
486
}
493
487
}
494
488
}
@@ -550,7 +544,9 @@ fn lower_rule(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) {
550
544
551
545
match rule {
552
546
Rule :: Node ( node) => {
553
- let field = Field :: Node { name : grammar[ * node] . name . clone ( ) , src : FieldSrc :: Shorthand } ;
547
+ let ty = grammar[ * node] . name . clone ( ) ;
548
+ let name = to_lower_snake_case ( & ty) ;
549
+ let field = Field :: Node { name, ty, valence : Valence :: Optional } ;
554
550
acc. push ( field) ;
555
551
}
556
552
Rule :: Token ( token) => {
@@ -565,9 +561,9 @@ fn lower_rule(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) {
565
561
}
566
562
Rule :: Rep ( inner) => {
567
563
if let Rule :: Node ( node) = & * * inner {
568
- let name = grammar[ * node] . name . clone ( ) ;
569
- let label = pluralize ( & to_lower_snake_case ( & name ) ) ;
570
- let field = Field :: Node { name : label . clone ( ) , src : FieldSrc :: Many ( name ) } ;
564
+ let ty = grammar[ * node] . name . clone ( ) ;
565
+ let name = pluralize ( & to_lower_snake_case ( & ty ) ) ;
566
+ let field = Field :: Node { name, ty , valence : Valence :: Many } ;
571
567
acc. push ( field) ;
572
568
return ;
573
569
}
@@ -582,11 +578,13 @@ fn lower_rule(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) {
582
578
Rule :: Node ( node) => node,
583
579
_ => todo ! ( "{:?}" , rule) ,
584
580
} ;
581
+ let ty = grammar[ * node] . name . clone ( ) ;
585
582
let field = Field :: Node {
586
583
name : label. clone ( ) ,
587
- src : match & * * rule {
588
- Rule :: Rep ( _) => FieldSrc :: Many ( grammar[ * node] . name . clone ( ) ) ,
589
- _ => FieldSrc :: Optional ( grammar[ * node] . name . clone ( ) ) ,
584
+ ty,
585
+ valence : match & * * rule {
586
+ Rule :: Rep ( _) => Valence :: Many ,
587
+ _ => Valence :: Optional ,
590
588
} ,
591
589
} ;
592
590
acc. push ( field) ;
@@ -620,9 +618,9 @@ fn lower_comma_list(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) -> boo
620
618
[ comma, Rule :: Node ( n) ] if comma == & * * trailing_comma && n == node => ( ) ,
621
619
_ => return false ,
622
620
}
623
- let name = grammar[ * node] . name . clone ( ) ;
624
- let label = pluralize ( & to_lower_snake_case ( & name ) ) ;
625
- let field = Field :: Node { name : label . clone ( ) , src : FieldSrc :: Many ( name ) } ;
621
+ let ty = grammar[ * node] . name . clone ( ) ;
622
+ let name = pluralize ( & to_lower_snake_case ( & ty ) ) ;
623
+ let field = Field :: Node { name, ty , valence : Valence :: Many } ;
626
624
acc. push ( field) ;
627
625
true
628
626
}
@@ -656,7 +654,9 @@ fn extract_enums(ast: &mut AstSrc) {
656
654
}
657
655
if to_remove. len ( ) == enm. variants . len ( ) {
658
656
node. remove_field ( to_remove) ;
659
- node. fields . push ( Field :: Node { name : enm. name . clone ( ) , src : FieldSrc :: Shorthand } ) ;
657
+ let ty = enm. name . clone ( ) ;
658
+ let name = to_lower_snake_case ( & ty) ;
659
+ node. fields . push ( Field :: Node { name, ty, valence : Valence :: Optional } ) ;
660
660
}
661
661
}
662
662
}
0 commit comments