#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
#[allow(missing_docs)]
pub enum TokenKind {
LParen,
RParen,
LBracket,
RBracket,
LBrace,
RBrace,
Pipe,
Amp,
Lt,
Gt,
Semicolon,
Comma,
Star,
Question,
Bang,
Eq,
Colon,
Dot,
At,
Hash,
Tilde,
Slash,
Arrow,
Ellipsis,
Null,
Undefined,
Function,
This,
New,
Module,
Event,
Extends,
External,
Typeof,
Keyof,
Readonly,
Import,
Infer,
Is,
In,
Asserts,
Unique,
Symbol,
Identifier,
StringValue,
TemplateLiteral,
Number,
EOF,
}
impl TokenKind {
#[inline]
#[must_use]
pub fn is_keyword(self) -> bool {
matches!(
self,
Self::Null
| Self::Undefined
| Self::Function
| Self::This
| Self::New
| Self::Module
| Self::Event
| Self::Extends
| Self::External
| Self::Typeof
| Self::Keyof
| Self::Readonly
| Self::Import
| Self::Infer
| Self::Is
| Self::In
| Self::Asserts
| Self::Unique
| Self::Symbol
)
}
#[inline]
#[must_use]
pub fn is_base_name_token(self) -> bool {
matches!(
self,
Self::Module
| Self::Keyof
| Self::Event
| Self::External
| Self::Readonly
| Self::Is
| Self::Typeof
| Self::In
| Self::Null
| Self::Undefined
| Self::Function
| Self::Asserts
| Self::Infer
| Self::Extends
| Self::Import
| Self::Unique
| Self::Symbol
)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Token {
pub start: u32,
pub end: u32,
pub kind: TokenKind,
}
impl Token {
#[inline]
#[must_use]
pub fn new(kind: TokenKind, start: u32, end: u32) -> Self {
Self { start, end, kind }
}
#[inline]
#[must_use]
pub fn eof(offset: u32) -> Self {
Self {
start: offset,
end: offset,
kind: TokenKind::EOF,
}
}
}