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 #[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?")]93 FLOAT,94 #[regex("(?:0|[1-9][0-9]*)\\.[^0-9]")]95 ERROR_FLOAT_JUNK_AFTER_POINT,96 #[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?[eE][^+\\-0-9]")]97 ERROR_FLOAT_JUNK_AFTER_EXPONENT,98 #[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?[eE][+-][^0-9]")]99 ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN,100 #[regex("\"(?s:[^\"\\\\]|\\\\.)*\"")]101 STRING_DOUBLE,102 #[regex("\"(?s:[^\"\\\\]|\\\\.)*")]103 ERROR_STRING_DOUBLE_UNTERMINATED,104 #[regex("'(?s:[^'\\\\]|\\\\.)*'")]105 STRING_SINGLE,106 #[regex("'(?s:[^'\\\\]|\\\\.)*")]107 ERROR_STRING_SINGLE_UNTERMINATED,108 #[regex("@\"(?:[^\"]|\"\")*\"")]109 STRING_DOUBLE_VERBATIM,110 #[regex("@\"(?:[^\"]|\"\")*")]111 ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED,112 #[regex("@'(?:[^']|'')*'")]113 STRING_SINGLE_VERBATIM,114 #[regex("@'(?:[^']|'')*")]115 ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED,116 #[regex("@[^\"'\\s]\\S+")]117 ERROR_STRING_VERBATIM_MISSING_QUOTES,118 #[regex("\\|\\|\\|", crate::string_block::lex_str_block_test)]119 STRING_BLOCK,120 ERROR_STRING_BLOCK_UNEXPECTED_END,121 ERROR_STRING_BLOCK_MISSING_NEW_LINE,122 ERROR_STRING_BLOCK_MISSING_TERMINATION,123 ERROR_STRING_BLOCK_MISSING_INDENT,124 #[regex("[_a-zA-Z][_a-zA-Z0-9]*")]125 IDENT,126 #[regex("[ \\t\\n\\r]+")]127 WHITESPACE,128 #[regex("//[^\\r\\n]*(\\r\\n|\\n)?")]129 SINGLE_LINE_SLASH_COMMENT,130 #[regex("#[^\\r\\n]*(\\r\\n|\\n)?")]131 SINGLE_LINE_HASH_COMMENT,132 #[regex("/\\*([^*]|\\*[^/])*\\*/")]133 MULTI_LINE_COMMENT,134 #[regex("/\\*/")]135 ERROR_COMMENT_TOO_SHORT,136 #[regex("/\\*([^*]|\\*[^/])+")]137 ERROR_COMMENT_UNTERMINATED,138 #[token("tailstrict")]139 TAILSTRICT_KW,140 #[token("importstr")]141 IMPORTSTR_KW,142 #[token("importbin")]143 IMPORTBIN_KW,144 #[token("import")]145 IMPORT_KW,146 #[token("if")]147 IF_KW,148 #[token("then")]149 THEN_KW,150 #[token("else")]151 ELSE_KW,152 #[token("function")]153 FUNCTION_KW,154 #[token("error")]155 ERROR_KW,156 #[token("local")]157 LOCAL_KW,158 #[token("in")]159 IN_KW,160 META_OBJECT_APPLY,161 ERROR_NO_OPERATOR,162 #[token("null")]163 NULL_KW,164 #[token("true")]165 TRUE_KW,166 #[token("false")]167 FALSE_KW,168 #[token("self")]169 SELF_KW,170 #[token("super")]171 SUPER_KW,172 #[token("for")]173 FOR_KW,174 #[token("assert")]175 ASSERT_KW,176 ERROR_MISSING_TOKEN,177 ERROR_UNEXPECTED_TOKEN,178 ERROR_CUSTOM,179 #[doc = r" Also acts as __LAST_TOKEN"]180 #[error]181 LEXING_ERROR,182 SOURCE_FILE,183 EXPR,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_STRING,198 EXPR_NUMBER,199 EXPR_ARRAY,200 EXPR_OBJECT,201 EXPR_ARRAY_COMP,202 EXPR_IMPORT,203 EXPR_VAR,204 EXPR_IF_THEN_ELSE,205 TRUE_EXPR,206 FALSE_EXPR,207 EXPR_FUNCTION,208 PARAMS_DESC,209 EXPR_ASSERT,210 ASSERTION,211 EXPR_ERROR,212 STMT_LOCAL,213 SLICE_DESC_END,214 SLICE_DESC_STEP,215 ARG,216 OBJ_BODY_COMP,217 OBJ_BODY_MEMBER_LIST,218 MEMBER_BIND_STMT,219 OBJ_LOCAL,220 MEMBER_ASSERT_STMT,221 MEMBER_FIELD_NORMAL,222 MEMBER_FIELD_METHOD,223 FIELD_NAME_FIXED,224 FIELD_NAME_DYNAMIC,225 FOR_SPEC,226 IF_SPEC,227 BIND_DESTRUCT,228 BIND_FUNCTION,229 PARAM,230 DESTRUCT_FULL,231 DESTRUCT_SKIP,232 DESTRUCT_ARRAY,233 DESTRUCT_OBJECT,234 DESTRUCT_OBJECT_FIELD,235 DESTRUCT_REST,236 DESTRUCT_ARRAY_ELEMENT,237 OBJ_BODY,238 COMP_SPEC,239 BIND,240 EXPR_BASE,241 MEMBER_COMP,242 MEMBER,243 FIELD_NAME,244 DESTRUCT,245 DESTRUCT_ARRAY_PART,246 BINARY_OPERATOR,247 UNARY_OPERATOR,248 LITERAL,249 TEXT,250 NUMBER,251 IMPORT_KIND,252 VISIBILITY,253 TRIVIA,254 CUSTOM_ERROR,255 #[doc(hidden)]256 __LAST,257}258use self::SyntaxKind::*;259impl SyntaxKind {260 pub fn is_keyword(self) -> bool {261 match self {262 OR | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE | LHS | RHS263 | PLUS | MINUS | MUL | DIV | MODULO | NOT | BIT_NOT | L_BRACK | R_BRACK | L_PAREN264 | R_PAREN | L_BRACE | R_BRACE | COLON | COLONCOLON | COLONCOLONCOLON | SEMI | DOT265 | DOTDOTDOT | COMMA | DOLLAR | ASSIGN | QUESTION_MARK | TAILSTRICT_KW266 | IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW | IF_KW | THEN_KW | ELSE_KW | FUNCTION_KW267 | ERROR_KW | LOCAL_KW | IN_KW | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | SUPER_KW268 | FOR_KW | ASSERT_KW => true,269 _ => false,270 }271 }272 pub fn is_enum(self) -> bool {273 match self {274 OBJ_BODY | COMP_SPEC | BIND | EXPR_BASE | MEMBER_COMP | MEMBER | FIELD_NAME275 | DESTRUCT | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR | LITERAL276 | TEXT | NUMBER | IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true,277 _ => false,278 }279 }280 pub fn from_raw(r: u16) -> Self {281 assert!(r < Self::__LAST as u16);282 unsafe { std::mem::transmute(r) }283 }284 pub fn into_raw(self) -> u16 {285 self as u16286 }287}288#[macro_export]289macro_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 } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_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 } ; [local] => { $ crate :: SyntaxKind :: LOCAL_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 } }290pub use T;