Skip to content

Commit d549f61

Browse files
committed
Simplify codegen
1 parent a257fd0 commit d549f61

File tree

2 files changed

+25
-26
lines changed

2 files changed

+25
-26
lines changed

xtask/src/ast_src.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -242,14 +242,13 @@ pub(crate) struct AstNodeSrc {
242242
#[derive(Debug, Eq, PartialEq)]
243243
pub(crate) enum Field {
244244
Token(String),
245-
Node { name: String, src: FieldSrc },
245+
Node { name: String, ty: String, valence: Valence },
246246
}
247247

248248
#[derive(Debug, Eq, PartialEq)]
249-
pub(crate) enum FieldSrc {
250-
Shorthand,
251-
Optional(String),
252-
Many(String),
249+
pub(crate) enum Valence {
250+
Optional,
251+
Many,
253252
}
254253

255254
#[derive(Debug)]

xtask/src/codegen/gen_syntax.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use quote::{format_ident, quote};
1313
use ungrammar::{Grammar, Rule};
1414

1515
use crate::{
16-
ast_src::{AstEnumSrc, AstNodeSrc, AstSrc, Field, FieldSrc, KindsSrc, KINDS_SRC},
16+
ast_src::{AstEnumSrc, AstNodeSrc, AstSrc, Field, KindsSrc, Valence, KINDS_SRC},
1717
codegen::{self, update, Mode},
1818
project_root, Result,
1919
};
@@ -431,7 +431,7 @@ fn pluralize(s: &str) -> String {
431431

432432
impl Field {
433433
fn is_many(&self) -> bool {
434-
matches!(self, Field::Node { src: FieldSrc::Many(_), .. })
434+
matches!(self, Field::Node { valence: Valence::Many, .. })
435435
}
436436
fn token_kind(&self) -> Option<proc_macro2::TokenStream> {
437437
match self {
@@ -476,19 +476,13 @@ impl Field {
476476
};
477477
format_ident!("{}_token", name)
478478
}
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),
483480
}
484481
}
485482
fn ty(&self) -> proc_macro2::Ident {
486483
match self {
487484
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),
492486
}
493487
}
494488
}
@@ -550,7 +544,9 @@ fn lower_rule(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) {
550544

551545
match rule {
552546
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 };
554550
acc.push(field);
555551
}
556552
Rule::Token(token) => {
@@ -565,9 +561,9 @@ fn lower_rule(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) {
565561
}
566562
Rule::Rep(inner) => {
567563
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 };
571567
acc.push(field);
572568
return;
573569
}
@@ -582,11 +578,13 @@ fn lower_rule(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) {
582578
Rule::Node(node) => node,
583579
_ => todo!("{:?}", rule),
584580
};
581+
let ty = grammar[*node].name.clone();
585582
let field = Field::Node {
586583
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,
590588
},
591589
};
592590
acc.push(field);
@@ -620,9 +618,9 @@ fn lower_comma_list(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) -> boo
620618
[comma, Rule::Node(n)] if comma == &**trailing_comma && n == node => (),
621619
_ => return false,
622620
}
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 };
626624
acc.push(field);
627625
true
628626
}
@@ -656,7 +654,9 @@ fn extract_enums(ast: &mut AstSrc) {
656654
}
657655
if to_remove.len() == enm.variants.len() {
658656
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 });
660660
}
661661
}
662662
}

0 commit comments

Comments
 (0)