#![doc = include_str!("../../readme.md")]
use oak_core::language::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum VLangSyntaxKind {
Text,
Whitespace,
Newline,
Error,
Eof,
SourceFile,
LeftParen,
RightParen,
LeftBracket,
RightBracket,
LeftBrace,
RightBrace,
Colon,
Semicolon,
Dot,
Comma,
Question,
Bang,
At,
Hash,
Dollar,
Percent,
Caret,
Ampersand,
Star,
Plus,
Minus,
Eq,
LessThan,
GreaterThan,
Slash,
Backslash,
Pipe,
Tilde,
PlusEq, MinusEq, StarEq, SlashEq, PercentEq, AmpersandEq, PipeEq, CaretEq, LeftShiftEq, RightShiftEq, EqEq, Ne, Le, Ge, LeftShift, RightShift, AndAnd, OrOr, PlusPlus, MinusMinus, Arrow, FatArrow, DotDot, DotDotDot,
ModuleKw,
ImportKw,
PubKw,
FnKw,
StructKw,
InterfaceKw,
EnumKw,
TypeKw,
ConstKw,
MutKw,
SharedKw,
VolatileKw,
UnsafeKw,
IfKw,
ElseKw,
ForKw,
InKw,
MatchKw,
OrKw,
ReturnKw,
BreakKw,
ContinueKw,
GotoKw,
DeferKw,
GoKw,
SelectKw,
LockKw,
RlockKw,
AsKw,
IsKw,
SizeofKw,
TypeofKw,
OffsetofKw,
AssertKw,
PanicKw,
EprintlnKw,
PrintlnKw,
PrintKw,
EprintKw,
BoolKw,
I8Kw,
I16Kw,
I32Kw,
I64Kw,
U8Kw,
U16Kw,
U32Kw,
U64Kw,
IntKw,
UintKw,
F32Kw,
F64Kw,
StringKw,
RuneKw,
ByteKw,
VoidptrKw,
CharKw,
IntegerLiteral,
FloatLiteral,
StringLiteral,
CharLiteral,
BoolLiteral,
Identifier,
Comment,
}
impl TokenType for VLangSyntaxKind {
const END_OF_STREAM: Self = Self::Eof;
type Role = UniversalTokenRole;
fn role(&self) -> Self::Role {
match self {
Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
Self::Comment => UniversalTokenRole::Comment,
Self::Error => UniversalTokenRole::Error,
Self::Eof => UniversalTokenRole::Eof,
Self::Identifier => UniversalTokenRole::Name,
Self::IntegerLiteral | Self::FloatLiteral | Self::StringLiteral | Self::CharLiteral | Self::BoolLiteral => UniversalTokenRole::Literal,
Self::Plus
| Self::Minus
| Self::Star
| Self::Slash
| Self::Percent
| Self::Eq
| Self::EqEq
| Self::Ne
| Self::Le
| Self::Ge
| Self::LessThan
| Self::GreaterThan
| Self::PlusEq
| Self::MinusEq
| Self::StarEq
| Self::SlashEq
| Self::PercentEq
| Self::AndAnd
| Self::OrOr
| Self::Bang
| Self::Ampersand
| Self::Pipe
| Self::Caret
| Self::LeftShift
| Self::RightShift
| Self::PlusPlus
| Self::MinusMinus
| Self::Arrow
| Self::FatArrow => UniversalTokenRole::Operator,
Self::LeftParen
| Self::RightParen
| Self::LeftBracket
| Self::RightBracket
| Self::LeftBrace
| Self::RightBrace
| Self::Colon
| Self::Semicolon
| Self::Dot
| Self::Comma
| Self::DotDot
| Self::DotDotDot
| Self::Question
| Self::At
| Self::Hash
| Self::Dollar
| Self::Backslash
| Self::Tilde => UniversalTokenRole::Punctuation,
k if format!("{:?}", k).ends_with("Kw") => UniversalTokenRole::Keyword,
_ => UniversalTokenRole::None,
}
}
}
impl ElementType for VLangSyntaxKind {
type Role = UniversalElementRole;
fn role(&self) -> Self::Role {
UniversalElementRole::None
}
}