format T_
diff --git a/crates/parser/src/syntax_kind/generated.rs b/crates/parser/src/syntax_kind/generated.rs
index 93e02a9..6a38044 100644
--- a/crates/parser/src/syntax_kind/generated.rs
+++ b/crates/parser/src/syntax_kind/generated.rs
@@ -1006,7 +1006,149 @@
}
}
#[macro_export]
-macro_rules ! T_ { [$] => { $ crate :: SyntaxKind :: DOLLAR } ; [;] => { $ crate :: SyntaxKind :: SEMICOLON } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_CURLY } ; ['}'] => { $ crate :: SyntaxKind :: R_CURLY } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; [<] => { $ crate :: SyntaxKind :: L_ANGLE } ; [>] => { $ crate :: SyntaxKind :: R_ANGLE } ; [@] => { $ crate :: SyntaxKind :: AT } ; [#] => { $ crate :: SyntaxKind :: POUND } ; [~] => { $ crate :: SyntaxKind :: TILDE } ; [?] => { $ crate :: SyntaxKind :: QUESTION } ; [&] => { $ crate :: SyntaxKind :: AMP } ; [|] => { $ crate :: SyntaxKind :: PIPE } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [*] => { $ crate :: SyntaxKind :: STAR } ; [/] => { $ crate :: SyntaxKind :: SLASH } ; [^] => { $ crate :: SyntaxKind :: CARET } ; [%] => { $ crate :: SyntaxKind :: PERCENT } ; [_] => { $ crate :: SyntaxKind :: UNDERSCORE } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [..] => { $ crate :: SyntaxKind :: DOT2 } ; [...] => { $ crate :: SyntaxKind :: DOT3 } ; [..=] => { $ crate :: SyntaxKind :: DOT2EQ } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLON2 } ; [=] => { $ crate :: SyntaxKind :: EQ } ; [==] => { $ crate :: SyntaxKind :: EQ2 } ; [=>] => { $ crate :: SyntaxKind :: FAT_ARROW } ; [!] => { $ crate :: SyntaxKind :: BANG } ; [!=] => { $ crate :: SyntaxKind :: NEQ } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [->] => { $ crate :: SyntaxKind :: THIN_ARROW } ; [<=] => { $ crate :: SyntaxKind :: LTEQ } ; [>=] => { $ crate :: SyntaxKind :: GTEQ } ; [+=] => { $ crate :: SyntaxKind :: PLUSEQ } ; [-=] => { $ crate :: SyntaxKind :: MINUSEQ } ; [|=] => { $ crate :: SyntaxKind :: PIPEEQ } ; [&=] => { $ crate :: SyntaxKind :: AMPEQ } ; [^=] => { $ crate :: SyntaxKind :: CARETEQ } ; [/=] => { $ crate :: SyntaxKind :: SLASHEQ } ; [*=] => { $ crate :: SyntaxKind :: STAREQ } ; [%=] => { $ crate :: SyntaxKind :: PERCENTEQ } ; [&&] => { $ crate :: SyntaxKind :: AMP2 } ; [||] => { $ crate :: SyntaxKind :: PIPE2 } ; [<<] => { $ crate :: SyntaxKind :: SHL } ; [>>] => { $ crate :: SyntaxKind :: SHR } ; [<<=] => { $ crate :: SyntaxKind :: SHLEQ } ; [>>=] => { $ crate :: SyntaxKind :: SHREQ } ; [Self] => { $ crate :: SyntaxKind :: SELF_TYPE_KW } ; [abstract] => { $ crate :: SyntaxKind :: ABSTRACT_KW } ; [as] => { $ crate :: SyntaxKind :: AS_KW } ; [become] => { $ crate :: SyntaxKind :: BECOME_KW } ; [box] => { $ crate :: SyntaxKind :: BOX_KW } ; [break] => { $ crate :: SyntaxKind :: BREAK_KW } ; [const] => { $ crate :: SyntaxKind :: CONST_KW } ; [continue] => { $ crate :: SyntaxKind :: CONTINUE_KW } ; [crate] => { $ crate :: SyntaxKind :: CRATE_KW } ; [do] => { $ crate :: SyntaxKind :: DO_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [enum] => { $ crate :: SyntaxKind :: ENUM_KW } ; [extern] => { $ crate :: SyntaxKind :: EXTERN_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [final] => { $ crate :: SyntaxKind :: FINAL_KW } ; [fn] => { $ crate :: SyntaxKind :: FN_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [impl] => { $ crate :: SyntaxKind :: IMPL_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [let] => { $ crate :: SyntaxKind :: LET_KW } ; [loop] => { $ crate :: SyntaxKind :: LOOP_KW } ; [macro] => { $ crate :: SyntaxKind :: MACRO_KW } ; [match] => { $ crate :: SyntaxKind :: MATCH_KW } ; [mod] => { $ crate :: SyntaxKind :: MOD_KW } ; [move] => { $ crate :: SyntaxKind :: MOVE_KW } ; [mut] => { $ crate :: SyntaxKind :: MUT_KW } ; [override] => { $ crate :: SyntaxKind :: OVERRIDE_KW } ; [priv] => { $ crate :: SyntaxKind :: PRIV_KW } ; [pub] => { $ crate :: SyntaxKind :: PUB_KW } ; [ref] => { $ crate :: SyntaxKind :: REF_KW } ; [return] => { $ crate :: SyntaxKind :: RETURN_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [static] => { $ crate :: SyntaxKind :: STATIC_KW } ; [struct] => { $ crate :: SyntaxKind :: STRUCT_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [trait] => { $ crate :: SyntaxKind :: TRAIT_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [type] => { $ crate :: SyntaxKind :: TYPE_KW } ; [typeof] => { $ crate :: SyntaxKind :: TYPEOF_KW } ; [unsafe] => { $ crate :: SyntaxKind :: UNSAFE_KW } ; [unsized] => { $ crate :: SyntaxKind :: UNSIZED_KW } ; [use] => { $ crate :: SyntaxKind :: USE_KW } ; [virtual] => { $ crate :: SyntaxKind :: VIRTUAL_KW } ; [where] => { $ crate :: SyntaxKind :: WHERE_KW } ; [while] => { $ crate :: SyntaxKind :: WHILE_KW } ; [yield] => { $ crate :: SyntaxKind :: YIELD_KW } ; [asm] => { $ crate :: SyntaxKind :: ASM_KW } ; [att_syntax] => { $ crate :: SyntaxKind :: ATT_SYNTAX_KW } ; [auto] => { $ crate :: SyntaxKind :: AUTO_KW } ; [builtin] => { $ crate :: SyntaxKind :: BUILTIN_KW } ; [clobber_abi] => { $ crate :: SyntaxKind :: CLOBBER_ABI_KW } ; [default] => { $ crate :: SyntaxKind :: DEFAULT_KW } ; [dyn] => { $ crate :: SyntaxKind :: DYN_KW } ; [format_args] => { $ crate :: SyntaxKind :: FORMAT_ARGS_KW } ; [global_asm] => { $ crate :: SyntaxKind :: GLOBAL_ASM_KW } ; [inlateout] => { $ crate :: SyntaxKind :: INLATEOUT_KW } ; [inout] => { $ crate :: SyntaxKind :: INOUT_KW } ; [label] => { $ crate :: SyntaxKind :: LABEL_KW } ; [lateout] => { $ crate :: SyntaxKind :: LATEOUT_KW } ; [macro_rules] => { $ crate :: SyntaxKind :: MACRO_RULES_KW } ; [may_unwind] => { $ crate :: SyntaxKind :: MAY_UNWIND_KW } ; [naked_asm] => { $ crate :: SyntaxKind :: NAKED_ASM_KW } ; [nomem] => { $ crate :: SyntaxKind :: NOMEM_KW } ; [noreturn] => { $ crate :: SyntaxKind :: NORETURN_KW } ; [nostack] => { $ crate :: SyntaxKind :: NOSTACK_KW } ; [offset_of] => { $ crate :: SyntaxKind :: OFFSET_OF_KW } ; [options] => { $ crate :: SyntaxKind :: OPTIONS_KW } ; [out] => { $ crate :: SyntaxKind :: OUT_KW } ; [preserves_flags] => { $ crate :: SyntaxKind :: PRESERVES_FLAGS_KW } ; [pure] => { $ crate :: SyntaxKind :: PURE_KW } ; [raw] => { $ crate :: SyntaxKind :: RAW_KW } ; [readonly] => { $ crate :: SyntaxKind :: READONLY_KW } ; [safe] => { $ crate :: SyntaxKind :: SAFE_KW } ; [sym] => { $ crate :: SyntaxKind :: SYM_KW } ; [union] => { $ crate :: SyntaxKind :: UNION_KW } ; [yeet] => { $ crate :: SyntaxKind :: YEET_KW } ; [async] => { $ crate :: SyntaxKind :: ASYNC_KW } ; [await] => { $ crate :: SyntaxKind :: AWAIT_KW } ; [dyn] => { $ crate :: SyntaxKind :: DYN_KW } ; [gen] => { $ crate :: SyntaxKind :: GEN_KW } ; [try] => { $ crate :: SyntaxKind :: TRY_KW } ; [lifetime_ident] => { $ crate :: SyntaxKind :: LIFETIME_IDENT } ; [int_number] => { $ crate :: SyntaxKind :: INT_NUMBER } ; [ident] => { $ crate :: SyntaxKind :: IDENT } ; [string] => { $ crate :: SyntaxKind :: STRING } ; [shebang] => { $ crate :: SyntaxKind :: SHEBANG } ; [frontmatter] => { $ crate :: SyntaxKind :: FRONTMATTER } ; }
+macro_rules ! T_ {
+ [$] => { $ crate :: SyntaxKind :: DOLLAR };
+ [;] => { $ crate :: SyntaxKind :: SEMICOLON };
+ [,] => { $ crate :: SyntaxKind :: COMMA };
+ ['('] => { $ crate :: SyntaxKind :: L_PAREN };
+ [')'] => { $ crate :: SyntaxKind :: R_PAREN };
+ ['{'] => { $ crate :: SyntaxKind :: L_CURLY };
+ ['}'] => { $ crate :: SyntaxKind :: R_CURLY };
+ ['['] => { $ crate :: SyntaxKind :: L_BRACK };
+ [']'] => { $ crate :: SyntaxKind :: R_BRACK };
+ [<] => { $ crate :: SyntaxKind :: L_ANGLE };
+ [>] => { $ crate :: SyntaxKind :: R_ANGLE };
+ [@] => { $ crate :: SyntaxKind :: AT };
+ [#] => { $ crate :: SyntaxKind :: POUND };
+ [~] => { $ crate :: SyntaxKind :: TILDE };
+ [?] => { $ crate :: SyntaxKind :: QUESTION };
+ [&] => { $ crate :: SyntaxKind :: AMP };
+ [|] => { $ crate :: SyntaxKind :: PIPE };
+ [+] => { $ crate :: SyntaxKind :: PLUS };
+ [*] => { $ crate :: SyntaxKind :: STAR };
+ [/] => { $ crate :: SyntaxKind :: SLASH };
+ [^] => { $ crate :: SyntaxKind :: CARET };
+ [%] => { $ crate :: SyntaxKind :: PERCENT };
+ [_] => { $ crate :: SyntaxKind :: UNDERSCORE };
+ [.] => { $ crate :: SyntaxKind :: DOT };
+ [..] => { $ crate :: SyntaxKind :: DOT2 };
+ [...] => { $ crate :: SyntaxKind :: DOT3 };
+ [..=] => { $ crate :: SyntaxKind :: DOT2EQ };
+ [:] => { $ crate :: SyntaxKind :: COLON };
+ [::] => { $ crate :: SyntaxKind :: COLON2 };
+ [=] => { $ crate :: SyntaxKind :: EQ };
+ [==] => { $ crate :: SyntaxKind :: EQ2 };
+ [=>] => { $ crate :: SyntaxKind :: FAT_ARROW };
+ [!] => { $ crate :: SyntaxKind :: BANG };
+ [!=] => { $ crate :: SyntaxKind :: NEQ };
+ [-] => { $ crate :: SyntaxKind :: MINUS };
+ [->] => { $ crate :: SyntaxKind :: THIN_ARROW };
+ [<=] => { $ crate :: SyntaxKind :: LTEQ };
+ [>=] => { $ crate :: SyntaxKind :: GTEQ };
+ [+=] => { $ crate :: SyntaxKind :: PLUSEQ };
+ [-=] => { $ crate :: SyntaxKind :: MINUSEQ };
+ [|=] => { $ crate :: SyntaxKind :: PIPEEQ };
+ [&=] => { $ crate :: SyntaxKind :: AMPEQ };
+ [^=] => { $ crate :: SyntaxKind :: CARETEQ };
+ [/=] => { $ crate :: SyntaxKind :: SLASHEQ };
+ [*=] => { $ crate :: SyntaxKind :: STAREQ };
+ [%=] => { $ crate :: SyntaxKind :: PERCENTEQ };
+ [&&] => { $ crate :: SyntaxKind :: AMP2 };
+ [||] => { $ crate :: SyntaxKind :: PIPE2 };
+ [<<] => { $ crate :: SyntaxKind :: SHL };
+ [>>] => { $ crate :: SyntaxKind :: SHR };
+ [<<=] => { $ crate :: SyntaxKind :: SHLEQ };
+ [>>=] => { $ crate :: SyntaxKind :: SHREQ };
+ [Self] => { $ crate :: SyntaxKind :: SELF_TYPE_KW };
+ [abstract] => { $ crate :: SyntaxKind :: ABSTRACT_KW };
+ [as] => { $ crate :: SyntaxKind :: AS_KW };
+ [become] => { $ crate :: SyntaxKind :: BECOME_KW };
+ [box] => { $ crate :: SyntaxKind :: BOX_KW };
+ [break] => { $ crate :: SyntaxKind :: BREAK_KW };
+ [const] => { $ crate :: SyntaxKind :: CONST_KW };
+ [continue] => { $ crate :: SyntaxKind :: CONTINUE_KW };
+ [crate] => { $ crate :: SyntaxKind :: CRATE_KW };
+ [do] => { $ crate :: SyntaxKind :: DO_KW };
+ [else] => { $ crate :: SyntaxKind :: ELSE_KW };
+ [enum] => { $ crate :: SyntaxKind :: ENUM_KW };
+ [extern] => { $ crate :: SyntaxKind :: EXTERN_KW };
+ [false] => { $ crate :: SyntaxKind :: FALSE_KW };
+ [final] => { $ crate :: SyntaxKind :: FINAL_KW };
+ [fn] => { $ crate :: SyntaxKind :: FN_KW };
+ [for] => { $ crate :: SyntaxKind :: FOR_KW };
+ [if] => { $ crate :: SyntaxKind :: IF_KW };
+ [impl] => { $ crate :: SyntaxKind :: IMPL_KW };
+ [in] => { $ crate :: SyntaxKind :: IN_KW };
+ [let] => { $ crate :: SyntaxKind :: LET_KW };
+ [loop] => { $ crate :: SyntaxKind :: LOOP_KW };
+ [macro] => { $ crate :: SyntaxKind :: MACRO_KW };
+ [match] => { $ crate :: SyntaxKind :: MATCH_KW };
+ [mod] => { $ crate :: SyntaxKind :: MOD_KW };
+ [move] => { $ crate :: SyntaxKind :: MOVE_KW };
+ [mut] => { $ crate :: SyntaxKind :: MUT_KW };
+ [override] => { $ crate :: SyntaxKind :: OVERRIDE_KW };
+ [priv] => { $ crate :: SyntaxKind :: PRIV_KW };
+ [pub] => { $ crate :: SyntaxKind :: PUB_KW };
+ [ref] => { $ crate :: SyntaxKind :: REF_KW };
+ [return] => { $ crate :: SyntaxKind :: RETURN_KW };
+ [self] => { $ crate :: SyntaxKind :: SELF_KW };
+ [static] => { $ crate :: SyntaxKind :: STATIC_KW };
+ [struct] => { $ crate :: SyntaxKind :: STRUCT_KW };
+ [super] => { $ crate :: SyntaxKind :: SUPER_KW };
+ [trait] => { $ crate :: SyntaxKind :: TRAIT_KW };
+ [true] => { $ crate :: SyntaxKind :: TRUE_KW };
+ [type] => { $ crate :: SyntaxKind :: TYPE_KW };
+ [typeof] => { $ crate :: SyntaxKind :: TYPEOF_KW };
+ [unsafe] => { $ crate :: SyntaxKind :: UNSAFE_KW };
+ [unsized] => { $ crate :: SyntaxKind :: UNSIZED_KW };
+ [use] => { $ crate :: SyntaxKind :: USE_KW };
+ [virtual] => { $ crate :: SyntaxKind :: VIRTUAL_KW };
+ [where] => { $ crate :: SyntaxKind :: WHERE_KW };
+ [while] => { $ crate :: SyntaxKind :: WHILE_KW };
+ [yield] => { $ crate :: SyntaxKind :: YIELD_KW };
+ [asm] => { $ crate :: SyntaxKind :: ASM_KW };
+ [att_syntax] => { $ crate :: SyntaxKind :: ATT_SYNTAX_KW };
+ [auto] => { $ crate :: SyntaxKind :: AUTO_KW };
+ [builtin] => { $ crate :: SyntaxKind :: BUILTIN_KW };
+ [clobber_abi] => { $ crate :: SyntaxKind :: CLOBBER_ABI_KW };
+ [default] => { $ crate :: SyntaxKind :: DEFAULT_KW };
+ [dyn] => { $ crate :: SyntaxKind :: DYN_KW };
+ [format_args] => { $ crate :: SyntaxKind :: FORMAT_ARGS_KW };
+ [global_asm] => { $ crate :: SyntaxKind :: GLOBAL_ASM_KW };
+ [inlateout] => { $ crate :: SyntaxKind :: INLATEOUT_KW };
+ [inout] => { $ crate :: SyntaxKind :: INOUT_KW };
+ [label] => { $ crate :: SyntaxKind :: LABEL_KW };
+ [lateout] => { $ crate :: SyntaxKind :: LATEOUT_KW };
+ [macro_rules] => { $ crate :: SyntaxKind :: MACRO_RULES_KW };
+ [may_unwind] => { $ crate :: SyntaxKind :: MAY_UNWIND_KW };
+ [naked_asm] => { $ crate :: SyntaxKind :: NAKED_ASM_KW };
+ [nomem] => { $ crate :: SyntaxKind :: NOMEM_KW };
+ [noreturn] => { $ crate :: SyntaxKind :: NORETURN_KW };
+ [nostack] => { $ crate :: SyntaxKind :: NOSTACK_KW };
+ [offset_of] => { $ crate :: SyntaxKind :: OFFSET_OF_KW };
+ [options] => { $ crate :: SyntaxKind :: OPTIONS_KW };
+ [out] => { $ crate :: SyntaxKind :: OUT_KW };
+ [preserves_flags] => { $ crate :: SyntaxKind :: PRESERVES_FLAGS_KW };
+ [pure] => { $ crate :: SyntaxKind :: PURE_KW };
+ [raw] => { $ crate :: SyntaxKind :: RAW_KW };
+ [readonly] => { $ crate :: SyntaxKind :: READONLY_KW };
+ [safe] => { $ crate :: SyntaxKind :: SAFE_KW };
+ [sym] => { $ crate :: SyntaxKind :: SYM_KW };
+ [union] => { $ crate :: SyntaxKind :: UNION_KW };
+ [yeet] => { $ crate :: SyntaxKind :: YEET_KW };
+ [async] => { $ crate :: SyntaxKind :: ASYNC_KW };
+ [await] => { $ crate :: SyntaxKind :: AWAIT_KW };
+ [dyn] => { $ crate :: SyntaxKind :: DYN_KW };
+ [gen] => { $ crate :: SyntaxKind :: GEN_KW };
+ [try] => { $ crate :: SyntaxKind :: TRY_KW };
+ [lifetime_ident] => { $ crate :: SyntaxKind :: LIFETIME_IDENT };
+ [int_number] => { $ crate :: SyntaxKind :: INT_NUMBER };
+ [ident] => { $ crate :: SyntaxKind :: IDENT };
+ [string] => { $ crate :: SyntaxKind :: STRING };
+ [shebang] => { $ crate :: SyntaxKind :: SHEBANG };
+ [frontmatter] => { $ crate :: SyntaxKind :: FRONTMATTER };
+}
+
impl ::core::marker::Copy for SyntaxKind {}
impl ::core::clone::Clone for SyntaxKind {
#[inline]
diff --git a/xtask/src/codegen/grammar.rs b/xtask/src/codegen/grammar.rs
index 9bd87a7..18f6c1f 100644
--- a/xtask/src/codegen/grammar.rs
+++ b/xtask/src/codegen/grammar.rs
@@ -706,7 +706,23 @@
}
};
- 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 {