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