262 lines
6.1 KiB
Rust
262 lines
6.1 KiB
Rust
//! 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", "dyn", "else",
|
|
"enum", "extern", "false", "fn", "for", "if", "impl", "in", "let", "loop", "macro",
|
|
"match", "mod", "move", "mut", "pub", "ref", "return", "self", "static", "struct", "super",
|
|
"trait", "true", "try", "type", "unsafe", "use", "where", "while",
|
|
],
|
|
contextual_keywords: &["auto", "default", "existential", "union", "raw"],
|
|
literals: &[
|
|
"INT_NUMBER",
|
|
"FLOAT_NUMBER",
|
|
"CHAR",
|
|
"BYTE",
|
|
"STRING",
|
|
"RAW_STRING",
|
|
"BYTE_STRING",
|
|
"RAW_BYTE_STRING",
|
|
],
|
|
tokens: &[
|
|
"ERROR",
|
|
"IDENT",
|
|
"WHITESPACE",
|
|
"LIFETIME",
|
|
"COMMENT",
|
|
"SHEBANG",
|
|
"L_DOLLAR",
|
|
"R_DOLLAR",
|
|
],
|
|
nodes: &[
|
|
"SOURCE_FILE",
|
|
"STRUCT_DEF",
|
|
"UNION_DEF",
|
|
"ENUM_DEF",
|
|
"FN_DEF",
|
|
"RET_TYPE",
|
|
"EXTERN_CRATE_ITEM",
|
|
"MODULE",
|
|
"USE_ITEM",
|
|
"STATIC_DEF",
|
|
"CONST_DEF",
|
|
"TRAIT_DEF",
|
|
"IMPL_DEF",
|
|
"TYPE_ALIAS_DEF",
|
|
"MACRO_CALL",
|
|
"TOKEN_TREE",
|
|
"MACRO_DEF",
|
|
"PAREN_TYPE",
|
|
"TUPLE_TYPE",
|
|
"NEVER_TYPE",
|
|
"PATH_TYPE",
|
|
"POINTER_TYPE",
|
|
"ARRAY_TYPE",
|
|
"SLICE_TYPE",
|
|
"REFERENCE_TYPE",
|
|
"PLACEHOLDER_TYPE",
|
|
"FN_POINTER_TYPE",
|
|
"FOR_TYPE",
|
|
"IMPL_TRAIT_TYPE",
|
|
"DYN_TRAIT_TYPE",
|
|
"OR_PAT",
|
|
"PAREN_PAT",
|
|
"REF_PAT",
|
|
"BOX_PAT",
|
|
"BIND_PAT",
|
|
"PLACEHOLDER_PAT",
|
|
"DOT_DOT_PAT",
|
|
"PATH_PAT",
|
|
"RECORD_PAT",
|
|
"RECORD_FIELD_PAT_LIST",
|
|
"RECORD_FIELD_PAT",
|
|
"TUPLE_STRUCT_PAT",
|
|
"TUPLE_PAT",
|
|
"SLICE_PAT",
|
|
"RANGE_PAT",
|
|
"LITERAL_PAT",
|
|
"MACRO_PAT",
|
|
// atoms
|
|
"TUPLE_EXPR",
|
|
"ARRAY_EXPR",
|
|
"PAREN_EXPR",
|
|
"PATH_EXPR",
|
|
"LAMBDA_EXPR",
|
|
"IF_EXPR",
|
|
"WHILE_EXPR",
|
|
"CONDITION",
|
|
"LOOP_EXPR",
|
|
"FOR_EXPR",
|
|
"CONTINUE_EXPR",
|
|
"BREAK_EXPR",
|
|
"LABEL",
|
|
"BLOCK_EXPR",
|
|
"RETURN_EXPR",
|
|
"MATCH_EXPR",
|
|
"MATCH_ARM_LIST",
|
|
"MATCH_ARM",
|
|
"MATCH_GUARD",
|
|
"RECORD_LIT",
|
|
"RECORD_FIELD_LIST",
|
|
"RECORD_FIELD",
|
|
"EFFECT_EXPR",
|
|
"BOX_EXPR",
|
|
// 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",
|
|
"ENUM_VARIANT",
|
|
"RECORD_FIELD_DEF_LIST",
|
|
"RECORD_FIELD_DEF",
|
|
"TUPLE_FIELD_DEF_LIST",
|
|
"TUPLE_FIELD_DEF",
|
|
"ENUM_VARIANT_LIST",
|
|
"ITEM_LIST",
|
|
"ASSOC_ITEM_LIST",
|
|
"ATTR",
|
|
"META_ITEM", // not an item actually
|
|
"USE_TREE",
|
|
"USE_TREE_LIST",
|
|
"PATH",
|
|
"PATH_SEGMENT",
|
|
"LITERAL",
|
|
"RENAME",
|
|
"VISIBILITY",
|
|
"WHERE_CLAUSE",
|
|
"WHERE_PRED",
|
|
"ABI",
|
|
"NAME",
|
|
"NAME_REF",
|
|
"LET_STMT",
|
|
"EXPR_STMT",
|
|
"TYPE_PARAM_LIST",
|
|
"LIFETIME_PARAM",
|
|
"TYPE_PARAM",
|
|
"CONST_PARAM",
|
|
"TYPE_ARG_LIST",
|
|
"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",
|
|
],
|
|
};
|
|
|
|
#[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, src: FieldSrc },
|
|
}
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
pub(crate) enum FieldSrc {
|
|
Shorthand,
|
|
Optional(String),
|
|
Many(String),
|
|
}
|
|
|
|
#[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>,
|
|
}
|