use oak_core::{Token, TokenType, UniversalTokenRole};
pub type RustToken = Token<RustTokenType>;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum RustTokenType {
As,
Break,
Const,
Continue,
Crate,
Else,
Enum,
Extern,
False,
Fn,
For,
If,
Impl,
In,
Let,
Loop,
Match,
Mod,
Move,
Mut,
Pub,
Ref,
Return,
SelfLower,
SelfUpper,
Static,
Struct,
Super,
Trait,
True,
Type,
Unsafe,
Use,
Where,
While,
Abstract,
Become,
Box,
Do,
Final,
Macro,
Override,
Priv,
Typeof,
Unsized,
Virtual,
Yield,
Async,
Await,
Dyn,
Try,
Union,
Raw,
IntegerLiteral,
FloatLiteral,
StringLiteral,
CharLiteral,
ByteLiteral,
ByteStringLiteral,
RawStringLiteral,
BoolLiteral,
Identifier,
Lifetime,
LeftParen,
RightParen,
LeftBrace,
RightBrace,
LeftBracket,
RightBracket,
Semicolon,
Comma,
Dot,
DotDot,
DotDotDot,
DotDotEq,
Colon,
DoubleColon,
PathSep,
Question,
At,
Hash,
Dollar,
Plus,
Minus,
Star,
Slash,
Percent,
Caret,
Ampersand,
Pipe,
Tilde,
Bang,
Eq,
Lt,
Gt,
LessThan,
GreaterThan,
EqEq,
Ne,
Le,
Ge,
LessEq,
GreaterEq,
AndAnd,
OrOr,
LeftShift,
RightShift,
Shl,
Shr,
PlusEq,
MinusEq,
StarEq,
SlashEq,
PercentEq,
CaretEq,
AndEq,
OrEq,
ShlEq,
ShrEq,
LeftShiftEq,
RightShiftEq,
Underscore,
Assign,
PlusAssign,
MinusAssign,
StarAssign,
SlashAssign,
PercentAssign,
AmpAssign,
PipeAssign,
CaretAssign,
ShlAssign,
ShrAssign,
Arrow,
FatArrow,
Space,
Newline,
Whitespace,
LineComment,
BlockComment,
DocComment,
PlusPlus,
MinusMinus,
Eof,
Error,
}
impl RustTokenType {
pub fn is_literal(&self) -> bool {
matches!(self, Self::IntegerLiteral | Self::FloatLiteral | Self::StringLiteral | Self::CharLiteral | Self::ByteLiteral | Self::ByteStringLiteral | Self::RawStringLiteral | Self::BoolLiteral | Self::True | Self::False)
}
}
impl TokenType for RustTokenType {
type Role = UniversalTokenRole;
const END_OF_STREAM: Self = Self::Eof;
fn is_ignored(&self) -> bool {
matches!(self, Self::Whitespace | Self::Newline | Self::LineComment | Self::BlockComment)
}
fn role(&self) -> Self::Role {
match self {
Self::Whitespace => UniversalTokenRole::Whitespace,
Self::Newline => UniversalTokenRole::Whitespace,
Self::LineComment => UniversalTokenRole::Comment,
Self::BlockComment => UniversalTokenRole::Comment,
Self::Eof => UniversalTokenRole::Eof,
Self::Error => UniversalTokenRole::Error,
Self::As
| Self::Break
| Self::Const
| Self::Continue
| Self::Crate
| Self::Else
| Self::Enum
| Self::Extern
| Self::False
| Self::Fn
| Self::For
| Self::If
| Self::Impl
| Self::In
| Self::Let
| Self::Loop
| Self::Match
| Self::Mod
| Self::Move
| Self::Mut
| Self::Pub
| Self::Ref
| Self::Return
| Self::SelfLower
| Self::SelfUpper
| Self::Static
| Self::Struct
| Self::Super
| Self::Trait
| Self::True
| Self::Type
| Self::Unsafe
| Self::Use
| Self::Where
| Self::While => UniversalTokenRole::Keyword,
Self::Identifier => UniversalTokenRole::Name,
Self::IntegerLiteral | Self::FloatLiteral | Self::StringLiteral | Self::CharLiteral | Self::ByteLiteral | Self::ByteStringLiteral | Self::RawStringLiteral | Self::BoolLiteral => UniversalTokenRole::Literal,
_ => UniversalTokenRole::None,
}
}
}