1234#![allow(5 bad_style,6 missing_docs,7 unreachable_pub,8 clippy::manual_non_exhaustive,9 clippy::match_like_matches_macro10)]11use logos::Logos;12#[doc = r" The kind of syntax node, e.g. `IDENT`, `USE_KW`, or `STRUCT`."]13#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Logos)]14#[repr(u16)]15pub enum SyntaxKind {16 #[doc(hidden)]17 TOMBSTONE,18 #[doc(hidden)]19 EOF,20 #[token("||")]21 OR,22 #[token("&&")]23 AND,24 #[token("|")]25 BIT_OR,26 #[token("^")]27 BIT_XOR,28 #[token("&")]29 BIT_AND,30 #[token("==")]31 EQ,32 #[token("!=")]33 NE,34 #[token("<")]35 LT,36 #[token(">")]37 GT,38 #[token("<=")]39 LE,40 #[token(">=")]41 GE,42 #[token("<<")]43 LHS,44 #[token(">>")]45 RHS,46 #[token("+")]47 PLUS,48 #[token("-")]49 MINUS,50 #[token("*")]51 MUL,52 #[token("/")]53 DIV,54 #[token("%")]55 MODULO,56 #[token("!")]57 NOT,58 #[token("~")]59 BIT_NOT,60 #[token("[")]61 L_BRACK,62 #[token("]")]63 R_BRACK,64 #[token("(")]65 L_PAREN,66 #[token(")")]67 R_PAREN,68 #[token("{")]69 L_BRACE,70 #[token("}")]71 R_BRACE,72 #[token(":")]73 COLON,74 #[token("::")]75 COLONCOLON,76 #[token(":::")]77 COLONCOLONCOLON,78 #[token(";")]79 SEMI,80 #[token(".")]81 DOT,82 #[token("...")]83 DOTDOTDOT,84 #[token(",")]85 COMMA,86 #[token("$")]87 DOLLAR,88 #[token("=")]89 ASSIGN,90 #[token("?")]91 QUESTION_MARK,92 #[token("$intrinsicThisFile")]93 INTRINSIC_THIS_FILE,94 #[token("$intrinsicId")]95 INTRINSIC_ID,96 #[token("$intrinsic")]97 INTRINSIC,98 #[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?")]99 FLOAT,100 #[regex("(?:0|[1-9][0-9]*)\\.[^0-9]")]101 ERROR_FLOAT_JUNK_AFTER_POINT,102 #[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?[eE][^+\\-0-9]")]103 ERROR_FLOAT_JUNK_AFTER_EXPONENT,104 #[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?[eE][+-][^0-9]")]105 ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN,106 #[regex("\"(?s:[^\"\\\\]|\\\\.)*\"")]107 STRING_DOUBLE,108 #[regex("\"(?s:[^\"\\\\]|\\\\.)*")]109 ERROR_STRING_DOUBLE_UNTERMINATED,110 #[regex("'(?s:[^'\\\\]|\\\\.)*'")]111 STRING_SINGLE,112 #[regex("'(?s:[^'\\\\]|\\\\.)*")]113 ERROR_STRING_SINGLE_UNTERMINATED,114 #[regex("@\"(?:[^\"]|\"\")*\"")]115 STRING_DOUBLE_VERBATIM,116 #[regex("@\"(?:[^\"]|\"\")*")]117 ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED,118 #[regex("@'(?:[^']|'')*'")]119 STRING_SINGLE_VERBATIM,120 #[regex("@'(?:[^']|'')*")]121 ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED,122 #[regex("@[^\"'\\s]\\S+")]123 ERROR_STRING_VERBATIM_MISSING_QUOTES,124 #[regex("\\|\\|\\|", crate::string_block::lex_str_block_test)]125 STRING_BLOCK,126 ERROR_STRING_BLOCK_UNEXPECTED_END,127 ERROR_STRING_BLOCK_MISSING_NEW_LINE,128 ERROR_STRING_BLOCK_MISSING_TERMINATION,129 ERROR_STRING_BLOCK_MISSING_INDENT,130 #[regex("[_a-zA-Z][_a-zA-Z0-9]*")]131 IDENT,132 #[regex("[ \\t\\n\\r]+")]133 WHITESPACE,134 #[regex("//[^\\r\\n]*(\\r\\n|\\n)?")]135 SINGLE_LINE_SLASH_COMMENT,136 #[regex("#[^\\r\\n]*(\\r\\n|\\n)?")]137 SINGLE_LINE_HASH_COMMENT,138 #[regex("/\\*([^*]|\\*[^/])*\\*/")]139 MULTI_LINE_COMMENT,140 #[regex("/\\*/")]141 ERROR_COMMENT_TOO_SHORT,142 #[regex("/\\*([^*]|\\*[^/])+")]143 ERROR_COMMENT_UNTERMINATED,144 #[token("tailstrict")]145 TAILSTRICT_KW,146 #[token("importstr")]147 IMPORTSTR_KW,148 #[token("importbin")]149 IMPORTBIN_KW,150 #[token("import")]151 IMPORT_KW,152 #[token("local")]153 LOCAL_KW,154 #[token("if")]155 IF_KW,156 #[token("then")]157 THEN_KW,158 #[token("else")]159 ELSE_KW,160 #[token("function")]161 FUNCTION_KW,162 #[token("error")]163 ERROR_KW,164 #[token("in")]165 IN_KW,166 META_OBJECT_APPLY,167 ERROR_NO_OPERATOR,168 #[token("null")]169 NULL_KW,170 #[token("true")]171 TRUE_KW,172 #[token("false")]173 FALSE_KW,174 #[token("self")]175 SELF_KW,176 #[token("super")]177 SUPER_KW,178 #[token("for")]179 FOR_KW,180 #[token("assert")]181 ASSERT_KW,182 ERROR_MISSING_TOKEN,183 ERROR_UNEXPECTED_TOKEN,184 #[doc = r" Also acts as __LAST_TOKEN"]185 #[error]186 LEXING_ERROR,187 SOURCE_FILE,188 EXPR_BINARY,189 LHS_EXPR,190 EXPR_UNARY,191 EXPR_SLICE,192 SLICE_DESC,193 EXPR_INDEX,194 NAME,195 EXPR_INDEX_EXPR,196 EXPR_APPLY,197 ARGS_DESC,198 EXPR_OBJ_EXTEND,199 EXPR_PARENED,200 EXPR_LITERAL,201 EXPR_INTRINSIC_THIS_FILE,202 EXPR_INTRINSIC_ID,203 EXPR_INTRINSIC,204 EXPR_STRING,205 EXPR_NUMBER,206 EXPR_ARRAY,207 EXPR_OBJECT,208 EXPR_ARRAY_COMP,209 EXPR_IMPORT,210 EXPR_VAR,211 EXPR_LOCAL,212 EXPR_IF_THEN_ELSE,213 TRUE_EXPR,214 FALSE_EXPR,215 EXPR_FUNCTION,216 PARAMS_DESC,217 EXPR_ASSERT,218 ASSERTION,219 EXPR_ERROR,220 SLICE_DESC_END,221 SLICE_DESC_STEP,222 ARG,223 OBJ_BODY_COMP,224 OBJ_LOCAL_POST_COMMA,225 OBJ_LOCAL_PRE_COMMA,226 OBJ_BODY_MEMBER_LIST,227 OBJ_LOCAL,228 MEMBER_BIND_STMT,229 MEMBER_ASSERT_STMT,230 MEMBER_FIELD,231 FIELD_NORMAL,232 FIELD_METHOD,233 FIELD_NAME_FIXED,234 FIELD_NAME_DYNAMIC,235 FOR_SPEC,236 IF_SPEC,237 BIND_DESTRUCT,238 BIND_FUNCTION,239 PARAM,240 DESTRUCT_FULL,241 DESTRUCT_SKIP,242 DESTRUCT_ARRAY,243 DESTRUCT_OBJECT,244 DESTRUCT_OBJECT_FIELD,245 DESTRUCT_REST,246 DESTRUCT_ARRAY_ELEMENT,247 EXPR,248 OBJ_BODY,249 COMP_SPEC,250 BIND,251 MEMBER,252 FIELD,253 FIELD_NAME,254 DESTRUCT,255 DESTRUCT_ARRAY_PART,256 BINARY_OPERATOR,257 UNARY_OPERATOR,258 LITERAL,259 TEXT,260 NUMBER,261 IMPORT_KIND,262 VISIBILITY,263 TRIVIA,264 PARSING_ERROR,265 #[doc(hidden)]266 __LAST,267}268use self::SyntaxKind::*;269impl SyntaxKind {270 pub fn is_keyword(self) -> bool {271 match self {272 OR | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE | LHS | RHS273 | PLUS | MINUS | MUL | DIV | MODULO | NOT | BIT_NOT | L_BRACK | R_BRACK | L_PAREN274 | R_PAREN | L_BRACE | R_BRACE | COLON | COLONCOLON | COLONCOLONCOLON | SEMI | DOT275 | DOTDOTDOT | COMMA | DOLLAR | ASSIGN | QUESTION_MARK | INTRINSIC_THIS_FILE276 | INTRINSIC_ID | INTRINSIC | TAILSTRICT_KW | IMPORTSTR_KW | IMPORTBIN_KW277 | IMPORT_KW | LOCAL_KW | IF_KW | THEN_KW | ELSE_KW | FUNCTION_KW | ERROR_KW | IN_KW278 | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | SUPER_KW | FOR_KW | ASSERT_KW => true,279 _ => false,280 }281 }282 pub fn is_enum(self) -> bool {283 match self {284 EXPR | OBJ_BODY | COMP_SPEC | BIND | MEMBER | FIELD | FIELD_NAME | DESTRUCT285 | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL | TEXT | NUMBER286 | IMPORT_KIND | VISIBILITY | TRIVIA | PARSING_ERROR => true,287 _ => false,288 }289 }290 pub fn from_raw(r: u16) -> Self {291 assert!(r < Self::__LAST as u16);292 unsafe { std::mem::transmute(r) }293 }294 pub fn into_raw(self) -> u16 {295 self as u16296 }297}298#[macro_export]299macro_rules ! T { [||] => { $ crate :: SyntaxKind :: OR } ; [&&] => { $ crate :: SyntaxKind :: AND } ; [|] => { $ crate :: SyntaxKind :: BIT_OR } ; [^] => { $ crate :: SyntaxKind :: BIT_XOR } ; [&] => { $ crate :: SyntaxKind :: BIT_AND } ; [==] => { $ crate :: SyntaxKind :: EQ } ; [!=] => { $ crate :: SyntaxKind :: NE } ; [<] => { $ crate :: SyntaxKind :: LT } ; [>] => { $ crate :: SyntaxKind :: GT } ; [<=] => { $ crate :: SyntaxKind :: LE } ; [>=] => { $ crate :: SyntaxKind :: GE } ; [<<] => { $ crate :: SyntaxKind :: LHS } ; [>>] => { $ crate :: SyntaxKind :: RHS } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [*] => { $ crate :: SyntaxKind :: MUL } ; [/] => { $ crate :: SyntaxKind :: DIV } ; [%] => { $ crate :: SyntaxKind :: MODULO } ; [!] => { $ crate :: SyntaxKind :: NOT } ; [~] => { $ crate :: SyntaxKind :: BIT_NOT } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_BRACE } ; ['}'] => { $ crate :: SyntaxKind :: R_BRACE } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLONCOLON } ; [:::] => { $ crate :: SyntaxKind :: COLONCOLONCOLON } ; [;] => { $ crate :: SyntaxKind :: SEMI } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [...] => { $ crate :: SyntaxKind :: DOTDOTDOT } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['$'] => { $ crate :: SyntaxKind :: DOLLAR } ; [=] => { $ crate :: SyntaxKind :: ASSIGN } ; [?] => { $ crate :: SyntaxKind :: QUESTION_MARK } ; ["$intrinsicThisFile"] => { $ crate :: SyntaxKind :: INTRINSIC_THIS_FILE } ; ["$intrinsicId"] => { $ crate :: SyntaxKind :: INTRINSIC_ID } ; ["$intrinsic"] => { $ crate :: SyntaxKind :: INTRINSIC } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_KW } ; [local] => { $ crate :: SyntaxKind :: LOCAL_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [then] => { $ crate :: SyntaxKind :: THEN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [function] => { $ crate :: SyntaxKind :: FUNCTION_KW } ; [error] => { $ crate :: SyntaxKind :: ERROR_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [null] => { $ crate :: SyntaxKind :: NULL_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [assert] => { $ crate :: SyntaxKind :: ASSERT_KW } }300pub use T;