Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'xtask/src/codegen/grammar/ast_src.rs')
-rw-r--r--xtask/src/codegen/grammar/ast_src.rs273
1 files changed, 273 insertions, 0 deletions
diff --git a/xtask/src/codegen/grammar/ast_src.rs b/xtask/src/codegen/grammar/ast_src.rs
new file mode 100644
index 0000000000..8221c57789
--- /dev/null
+++ b/xtask/src/codegen/grammar/ast_src.rs
@@ -0,0 +1,273 @@
+//! Defines input for code generation process.
+
+pub(crate) struct KindsSrc<'a> {
+ pub(crate) punct: &'a [(&'a str, &'a str)],
+ pub(crate) keywords: &'a [&'a str],
+ pub(crate) contextual_keywords: &'a [&'a str],
+ pub(crate) literals: &'a [&'a str],
+ pub(crate) tokens: &'a [&'a str],
+ pub(crate) nodes: &'a [&'a str],
+}
+
+pub(crate) const KINDS_SRC: KindsSrc<'_> = KindsSrc {
+ punct: &[
+ (";", "SEMICOLON"),
+ (",", "COMMA"),
+ ("(", "L_PAREN"),
+ (")", "R_PAREN"),
+ ("{", "L_CURLY"),
+ ("}", "R_CURLY"),
+ ("[", "L_BRACK"),
+ ("]", "R_BRACK"),
+ ("<", "L_ANGLE"),
+ (">", "R_ANGLE"),
+ ("@", "AT"),
+ ("#", "POUND"),
+ ("~", "TILDE"),
+ ("?", "QUESTION"),
+ ("$", "DOLLAR"),
+ ("&", "AMP"),
+ ("|", "PIPE"),
+ ("+", "PLUS"),
+ ("*", "STAR"),
+ ("/", "SLASH"),
+ ("^", "CARET"),
+ ("%", "PERCENT"),
+ ("_", "UNDERSCORE"),
+ (".", "DOT"),
+ ("..", "DOT2"),
+ ("...", "DOT3"),
+ ("..=", "DOT2EQ"),
+ (":", "COLON"),
+ ("::", "COLON2"),
+ ("=", "EQ"),
+ ("==", "EQ2"),
+ ("=>", "FAT_ARROW"),
+ ("!", "BANG"),
+ ("!=", "NEQ"),
+ ("-", "MINUS"),
+ ("->", "THIN_ARROW"),
+ ("<=", "LTEQ"),
+ (">=", "GTEQ"),
+ ("+=", "PLUSEQ"),
+ ("-=", "MINUSEQ"),
+ ("|=", "PIPEEQ"),
+ ("&=", "AMPEQ"),
+ ("^=", "CARETEQ"),
+ ("/=", "SLASHEQ"),
+ ("*=", "STAREQ"),
+ ("%=", "PERCENTEQ"),
+ ("&&", "AMP2"),
+ ("||", "PIPE2"),
+ ("<<", "SHL"),
+ (">>", "SHR"),
+ ("<<=", "SHLEQ"),
+ (">>=", "SHREQ"),
+ ],
+ keywords: &[
+ "as", "async", "await", "box", "break", "const", "continue", "crate", "do", "dyn", "else",
+ "enum", "extern", "false", "fn", "for", "if", "impl", "in", "let", "loop", "macro",
+ "match", "mod", "move", "mut", "pub", "ref", "return", "become", "self", "Self", "static",
+ "struct", "super", "trait", "true", "try", "type", "unsafe", "use", "where", "while",
+ "yield",
+ ],
+ contextual_keywords: &[
+ "auto",
+ "builtin",
+ "default",
+ "existential",
+ "union",
+ "raw",
+ "macro_rules",
+ "yeet",
+ "offset_of",
+ "asm",
+ "format_args",
+ ],
+ literals: &["INT_NUMBER", "FLOAT_NUMBER", "CHAR", "BYTE", "STRING", "BYTE_STRING", "C_STRING"],
+ tokens: &["ERROR", "IDENT", "WHITESPACE", "LIFETIME_IDENT", "COMMENT", "SHEBANG"],
+ nodes: &[
+ "SOURCE_FILE",
+ "STRUCT",
+ "UNION",
+ "ENUM",
+ "FN",
+ "RET_TYPE",
+ "EXTERN_CRATE",
+ "MODULE",
+ "USE",
+ "STATIC",
+ "CONST",
+ "TRAIT",
+ "TRAIT_ALIAS",
+ "IMPL",
+ "TYPE_ALIAS",
+ "MACRO_CALL",
+ "MACRO_RULES",
+ "MACRO_ARM",
+ "TOKEN_TREE",
+ "MACRO_DEF",
+ "PAREN_TYPE",
+ "TUPLE_TYPE",
+ "MACRO_TYPE",
+ "NEVER_TYPE",
+ "PATH_TYPE",
+ "PTR_TYPE",
+ "ARRAY_TYPE",
+ "SLICE_TYPE",
+ "REF_TYPE",
+ "INFER_TYPE",
+ "FN_PTR_TYPE",
+ "FOR_TYPE",
+ "IMPL_TRAIT_TYPE",
+ "DYN_TRAIT_TYPE",
+ "OR_PAT",
+ "PAREN_PAT",
+ "REF_PAT",
+ "BOX_PAT",
+ "IDENT_PAT",
+ "WILDCARD_PAT",
+ "REST_PAT",
+ "PATH_PAT",
+ "RECORD_PAT",
+ "RECORD_PAT_FIELD_LIST",
+ "RECORD_PAT_FIELD",
+ "TUPLE_STRUCT_PAT",
+ "TUPLE_PAT",
+ "SLICE_PAT",
+ "RANGE_PAT",
+ "LITERAL_PAT",
+ "MACRO_PAT",
+ "CONST_BLOCK_PAT",
+ // atoms
+ "TUPLE_EXPR",
+ "ARRAY_EXPR",
+ "PAREN_EXPR",
+ "PATH_EXPR",
+ "CLOSURE_EXPR",
+ "IF_EXPR",
+ "WHILE_EXPR",
+ "LOOP_EXPR",
+ "FOR_EXPR",
+ "CONTINUE_EXPR",
+ "BREAK_EXPR",
+ "LABEL",
+ "BLOCK_EXPR",
+ "STMT_LIST",
+ "RETURN_EXPR",
+ "BECOME_EXPR",
+ "YIELD_EXPR",
+ "YEET_EXPR",
+ "LET_EXPR",
+ "UNDERSCORE_EXPR",
+ "MACRO_EXPR",
+ "MATCH_EXPR",
+ "MATCH_ARM_LIST",
+ "MATCH_ARM",
+ "MATCH_GUARD",
+ "RECORD_EXPR",
+ "RECORD_EXPR_FIELD_LIST",
+ "RECORD_EXPR_FIELD",
+ "OFFSET_OF_EXPR",
+ "ASM_EXPR",
+ "FORMAT_ARGS_EXPR",
+ "FORMAT_ARGS_ARG",
+ // postfix
+ "CALL_EXPR",
+ "INDEX_EXPR",
+ "METHOD_CALL_EXPR",
+ "FIELD_EXPR",
+ "AWAIT_EXPR",
+ "TRY_EXPR",
+ "CAST_EXPR",
+ // unary
+ "REF_EXPR",
+ "PREFIX_EXPR",
+ "RANGE_EXPR", // just weird
+ "BIN_EXPR",
+ "EXTERN_BLOCK",
+ "EXTERN_ITEM_LIST",
+ "VARIANT",
+ "RECORD_FIELD_LIST",
+ "RECORD_FIELD",
+ "TUPLE_FIELD_LIST",
+ "TUPLE_FIELD",
+ "VARIANT_LIST",
+ "ITEM_LIST",
+ "ASSOC_ITEM_LIST",
+ "ATTR",
+ "META",
+ "USE_TREE",
+ "USE_TREE_LIST",
+ "PATH",
+ "PATH_SEGMENT",
+ "LITERAL",
+ "RENAME",
+ "VISIBILITY",
+ "WHERE_CLAUSE",
+ "WHERE_PRED",
+ "ABI",
+ "NAME",
+ "NAME_REF",
+ "LET_STMT",
+ "LET_ELSE",
+ "EXPR_STMT",
+ "GENERIC_PARAM_LIST",
+ "GENERIC_PARAM",
+ "LIFETIME_PARAM",
+ "TYPE_PARAM",
+ "RETURN_TYPE_ARG",
+ "CONST_PARAM",
+ "GENERIC_ARG_LIST",
+ "LIFETIME",
+ "LIFETIME_ARG",
+ "TYPE_ARG",
+ "ASSOC_TYPE_ARG",
+ "CONST_ARG",
+ "PARAM_LIST",
+ "PARAM",
+ "SELF_PARAM",
+ "ARG_LIST",
+ "TYPE_BOUND",
+ "TYPE_BOUND_LIST",
+ // macro related
+ "MACRO_ITEMS",
+ "MACRO_STMTS",
+ "MACRO_EAGER_INPUT",
+ ],
+};
+
+#[derive(Default, Debug)]
+pub(crate) struct AstSrc {
+ pub(crate) tokens: Vec<String>,
+ pub(crate) nodes: Vec<AstNodeSrc>,
+ pub(crate) enums: Vec<AstEnumSrc>,
+}
+
+#[derive(Debug)]
+pub(crate) struct AstNodeSrc {
+ pub(crate) doc: Vec<String>,
+ pub(crate) name: String,
+ pub(crate) traits: Vec<String>,
+ pub(crate) fields: Vec<Field>,
+}
+
+#[derive(Debug, Eq, PartialEq)]
+pub(crate) enum Field {
+ Token(String),
+ Node { name: String, ty: String, cardinality: Cardinality },
+}
+
+#[derive(Debug, Eq, PartialEq)]
+pub(crate) enum Cardinality {
+ Optional,
+ Many,
+}
+
+#[derive(Debug)]
+pub(crate) struct AstEnumSrc {
+ pub(crate) doc: Vec<String>,
+ pub(crate) name: String,
+ pub(crate) traits: Vec<String>,
+ pub(crate) variants: Vec<String>,
+}