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 ERROR_NO_OPERATOR,167 #[token("null")]168 NULL_KW,169 #[token("true")]170 TRUE_KW,171 #[token("false")]172 FALSE_KW,173 #[token("self")]174 SELF_KW,175 #[token("super")]176 SUPER_KW,177 #[token("for")]178 FOR_KW,179 #[token("assert")]180 ASSERT_KW,181 #[error]182 ERROR,183 SOURCE_FILE,184 EXPR_BINARY,185 LHS_EXPR,186 EXPR_UNARY,187 EXPR_SLICE,188 SLICE_DESC,189 EXPR_INDEX,190 NAME,191 EXPR_INDEX_EXPR,192 EXPR_APPLY,193 ARGS_DESC,194 EXPR_OBJ_EXTEND,195 EXPR_PARENED,196 EXPR_LITERAL,197 EXPR_INTRINSIC_THIS_FILE,198 EXPR_INTRINSIC_ID,199 EXPR_INTRINSIC,200 EXPR_STRING,201 EXPR_NUMBER,202 EXPR_ARRAY,203 EXPR_OBJECT,204 EXPR_ARRAY_COMP,205 EXPR_IMPORT,206 EXPR_VAR,207 EXPR_LOCAL,208 EXPR_IF_THEN_ELSE,209 TRUE_EXPR,210 FALSE_EXPR,211 EXPR_FUNCTION,212 PARAMS_DESC,213 EXPR_ASSERT,214 ASSERTION,215 EXPR_ERROR,216 SLICE_DESC_END,217 SLICE_DESC_STEP,218 ARG,219 OBJ_BODY_COMP,220 OBJ_LOCAL_POST_COMMA,221 OBJ_LOCAL_PRE_COMMA,222 OBJ_BODY_MEMBER_LIST,223 OBJ_LOCAL,224 MEMBER_BIND_STMT,225 MEMBER_ASSERT_STMT,226 MEMBER_FIELD,227 FIELD_NORMAL,228 FIELD_METHOD,229 FIELD_NAME_FIXED,230 FIELD_NAME_DYNAMIC,231 FOR_SPEC,232 IF_SPEC,233 BIND_DESTRUCT,234 BIND_FUNCTION,235 PARAM,236 DESTRUCT_FULL,237 DESTRUCT_SKIP,238 DESTRUCT_ARRAY,239 DESTRUCT_OBJECT,240 DESTRUCT_OBJECT_FIELD,241 DESTRUCT_REST,242 DESTRUCT_ARRAY_ELEMENT,243 EXPR,244 OBJ_BODY,245 COMP_SPEC,246 BIND,247 MEMBER,248 FIELD,249 FIELD_NAME,250 DESTRUCT,251 DESTRUCT_ARRAY_PART,252 BINARY_OPERATOR,253 UNARY_OPERATOR,254 LITERAL,255 TEXT,256 NUMBER,257 IMPORT_KIND,258 VISIBILITY,259 TRIVIA,260 #[doc(hidden)]261 __LAST,262}263use self::SyntaxKind::*;264impl SyntaxKind {265 pub fn is_keyword(self) -> bool {266 match self {267 OR | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE | LHS | RHS268 | PLUS | MINUS | MUL | DIV | MODULO | NOT | BIT_NOT | L_BRACK | R_BRACK | L_PAREN269 | R_PAREN | L_BRACE | R_BRACE | COLON | COLONCOLON | COLONCOLONCOLON | SEMI | DOT270 | DOTDOTDOT | COMMA | DOLLAR | ASSIGN | QUESTION_MARK | INTRINSIC_THIS_FILE271 | INTRINSIC_ID | INTRINSIC | TAILSTRICT_KW | IMPORTSTR_KW | IMPORTBIN_KW272 | IMPORT_KW | LOCAL_KW | IF_KW | THEN_KW | ELSE_KW | FUNCTION_KW | ERROR_KW | IN_KW273 | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | SUPER_KW | FOR_KW | ASSERT_KW => true,274 _ => false,275 }276 }277 pub fn is_enum(self) -> bool {278 match self {279 EXPR | OBJ_BODY | COMP_SPEC | BIND | MEMBER | FIELD | FIELD_NAME | DESTRUCT280 | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL | TEXT | NUMBER281 | IMPORT_KIND | VISIBILITY | TRIVIA => true,282 _ => false,283 }284 }285 pub fn from_raw(r: u16) -> Self {286 assert!(r < Self::__LAST as u16);287 unsafe { std::mem::transmute(r) }288 }289 pub fn into_raw(self) -> u16 {290 self as u16291 }292}293#[macro_export]294macro_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 } }295pub use T;