#![allow(unsafe_code)]
use cstree::Syntax;
use skullbrain_lexer::grammar::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u32)]
pub enum SyntaxKind {
Unknown,
Literal,
Trivia,
Comment,
Ident,
Error,
Comma,
Colon,
Arrow,
DelimitedRange,
OpenParen,
CloseParen,
OpenBrace,
CloseBrace,
Type,
Parameter,
Modifiers,
VariableDeclaration,
ImmutableVariableKeyword,
MutableVariableKeyword,
Assignment,
WhileLoop,
Condition,
Body,
ForLoop,
ForIterOpen,
ForIterClose,
Import,
ImportSource,
ImportAlias,
ImportItem,
ThrowError,
TryCatch,
Try,
Catch,
IfElse,
If,
Else,
Operator,
OpEq,
OpNotEq,
OpLt,
OpGt,
OpLtEq,
OpGtEq,
OpMinus,
OpAnd,
OpOr,
OpNot,
OpPlus,
OpMul,
OpDivide,
OpMod,
OpMethodChaining,
Lhs,
Rhs,
LoopBreak,
LoopContinue,
Return,
Keyword,
TypeAlias,
Function,
FunctionSignature,
Trait,
TraitImpl,
SemiColon,
Class,
Enum,
EnumVariant,
Match,
MatchCondition,
MatchConditionDefault,
CallExpr,
__LAST,
}
impl Syntax for SyntaxKind {
fn from_raw(raw: cstree::RawSyntaxKind) -> Self {
assert!(
raw.0 < SyntaxKind::__LAST as u32,
"Invalid raw syntax kind: {}",
raw.0
);
unsafe { ::std::mem::transmute::<u32, Self>(raw.0) }
}
fn into_raw(self) -> cstree::RawSyntaxKind {
cstree::RawSyntaxKind(self as u32)
}
fn static_text(self) -> Option<&'static str> {
let res = match self {
SyntaxKind::Comma => COMMA_KEYWORD,
SyntaxKind::Colon => COLON_KEYWORD,
SyntaxKind::Arrow => ARROW_MATCH_ARM_FOWARD_OR_FUNC_RETURN_SIGNATURE_KEYWORD,
SyntaxKind::OpenParen => OPEN_PAREN_KEYWORD,
SyntaxKind::CloseParen => CLOSE_PAREN_KEYWORD,
SyntaxKind::OpenBrace => OPEN_BRACE_KEYWORD,
SyntaxKind::CloseBrace => CLOSE_BRACE_KEYWORD,
SyntaxKind::ImmutableVariableKeyword => IMMUTABLE_VARIABLE_DELIMTER,
SyntaxKind::MutableVariableKeyword => MUTBALE_VARIABLE_DELIMITER,
SyntaxKind::ForIterOpen => FOR_LOOP_KEYWORD,
SyntaxKind::ForIterClose => FOR_LOOP_ITER,
SyntaxKind::ImportAlias => ALIAS_KEYWORD,
SyntaxKind::OpEq => EQUALS_KEYWORD,
SyntaxKind::OpNotEq => NOT_EQUALS_KEYWORD,
SyntaxKind::OpLt => LESS_KEYWORD,
SyntaxKind::OpGt => GREATER_KEYWORD,
SyntaxKind::OpLtEq => LESS_EQUAL_KEYWORD,
SyntaxKind::OpGtEq => GREATER_EQUAL_KEYWORD,
SyntaxKind::OpMinus => MINUS_KEYWORD,
SyntaxKind::OpAnd => AND_KEYWORD,
SyntaxKind::OpOr => OR_KEYWORD,
SyntaxKind::OpNot => NOT_KEYWORD,
SyntaxKind::OpPlus => PLUS_KEYWORD,
SyntaxKind::OpMul => MULTIPLY_KEYWORD,
SyntaxKind::OpDivide => DIVIDE_KEYWORD,
SyntaxKind::OpMod => MODULO_KEYWORD,
SyntaxKind::OpMethodChaining => METHOD_CHAINING,
SyntaxKind::SemiColon => LINE_END_DELIMITER,
_ => return None,
};
Some(res)
}
}