Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'xtask/src/codegen/grammar.rs')
-rw-r--r--xtask/src/codegen/grammar.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/xtask/src/codegen/grammar.rs b/xtask/src/codegen/grammar.rs
index 9bd87a7ef5..4e980bb3d9 100644
--- a/xtask/src/codegen/grammar.rs
+++ b/xtask/src/codegen/grammar.rs
@@ -659,6 +659,7 @@ fn generate_syntax_kinds(grammar: KindsSrc) -> String {
}
}
+ /// `T![]`
#[macro_export]
macro_rules! T_ {
#([#punctuation_values] => { $crate::SyntaxKind::#punctuation };)*
@@ -706,7 +707,23 @@ fn generate_syntax_kinds(grammar: KindsSrc) -> String {
}
};
- add_preamble(crate::flags::CodegenType::Grammar, reformat(ast.to_string()))
+ let result = add_preamble(crate::flags::CodegenType::Grammar, reformat(ast.to_string()));
+
+ if let Some(start) = result.find("macro_rules ! T_")
+ && let Some(macro_end) = result[start..].find("\nimpl ::core::marker::Copy")
+ {
+ let macro_section = &result[start..start + macro_end];
+ let formatted_macro = macro_section
+ .replace("T_ { [", "T_ {\n [")
+ .replace(" ; [", ";\n [")
+ .replace(" ; }", ";\n}")
+ .trim_end()
+ .to_owned()
+ + "\n";
+ return result.replace(macro_section, &formatted_macro);
+ }
+
+ result
}
fn to_upper_snake_case(s: &str) -> String {