#[derive(Debug, Clone, PartialEq)]
pub enum Token {
Let,
Mut,
Const,
Fn,
Return,
If,
Else,
While,
For,
In,
Break,
Continue,
Match,
Type,
Record,
Trait,
Impl,
Import,
Module,
Pub,
Async,
Await,
Extern,
Unsafe,
True,
False,
As,
Is,
Where,
With,
SelfLower,
SelfUpper,
LParen,
RParen,
LBracket,
RBracket,
LBrace,
RBrace,
Comma,
Semicolon,
Colon,
ColonColon,
Arrow,
FatArrow,
Dot,
DotDot,
DotDotEq,
At,
Question,
Eq,
EqEq,
BangEq,
Lt,
LtEq,
Gt,
GtEq,
AmpAmp,
PipePipe,
Bang,
Plus,
Minus,
Star,
Slash,
Percent,
PlusEq,
MinusEq,
StarEq,
SlashEq,
PercentEq,
Amp,
Pipe,
Caret,
Tilde,
LtLt,
GtGt,
AmpEq,
PipeEq,
CaretEq,
LtLtEq,
GtGtEq,
Int(i64),
Float(f64),
Char(char),
StrStart,
StrPart(String),
StrEnd,
InterpOpen,
InterpClose,
RawStr(String),
Ident(String),
DocComment(String),
Eof,
}
impl Token {
pub fn description(&self) -> &str {
match self {
Token::Let => "`let`",
Token::Mut => "`mut`",
Token::Const => "`const`",
Token::Fn => "`fn`",
Token::Return => "`return`",
Token::If => "`if`",
Token::Else => "`else`",
Token::While => "`while`",
Token::For => "`for`",
Token::In => "`in`",
Token::Break => "`break`",
Token::Continue => "`continue`",
Token::Match => "`match`",
Token::Type => "`type`",
Token::Record => "`record`",
Token::Trait => "`trait`",
Token::Impl => "`impl`",
Token::Import => "`import`",
Token::Module => "`module`",
Token::Pub => "`pub`",
Token::Async => "`async`",
Token::Await => "`await`",
Token::Extern => "`extern`",
Token::Unsafe => "`unsafe`",
Token::True => "`true`",
Token::False => "`false`",
Token::As => "`as`",
Token::Is => "`is`",
Token::Where => "`where`",
Token::With => "`with`",
Token::SelfLower => "`self`",
Token::SelfUpper => "`Self`",
Token::LParen => "`(`",
Token::RParen => "`)`",
Token::LBracket => "`[`",
Token::RBracket => "`]`",
Token::LBrace => "`{`",
Token::RBrace => "`}`",
Token::Comma => "`,`",
Token::Semicolon => "`;`",
Token::Colon => "`:`",
Token::ColonColon => "`::`",
Token::Arrow => "`->`",
Token::FatArrow => "`=>`",
Token::Dot => "`.`",
Token::DotDot => "`..`",
Token::DotDotEq => "`..=`",
Token::At => "`@`",
Token::Question => "`?`",
Token::Eq => "`=`",
Token::EqEq => "`==`",
Token::BangEq => "`!=`",
Token::Lt => "`<`",
Token::LtEq => "`<=`",
Token::Gt => "`>`",
Token::GtEq => "`>=`",
Token::AmpAmp => "`&&`",
Token::PipePipe => "`||`",
Token::Bang => "`!`",
Token::Plus => "`+`",
Token::Minus => "`-`",
Token::Star => "`*`",
Token::Slash => "`/`",
Token::Percent => "`%`",
Token::PlusEq => "`+=`",
Token::MinusEq => "`-=`",
Token::StarEq => "`*=`",
Token::SlashEq => "`/=`",
Token::PercentEq => "`%=`",
Token::Amp => "`&`",
Token::Pipe => "`|`",
Token::Caret => "`^`",
Token::Tilde => "`~`",
Token::LtLt => "`<<`",
Token::GtGt => "`>>`",
Token::AmpEq => "`&=`",
Token::PipeEq => "`|=`",
Token::CaretEq => "`^=`",
Token::LtLtEq => "`<<=`",
Token::GtGtEq => "`>>=`",
Token::Int(_) => "integer literal",
Token::Float(_) => "float literal",
Token::Char(_) => "char literal",
Token::StrStart => "`\"`",
Token::StrPart(_) => "string segment",
Token::StrEnd => "`\"`",
Token::InterpOpen => "`${`",
Token::InterpClose => "`}`",
Token::RawStr(_) => "raw string literal",
Token::Ident(_) => "identifier",
Token::DocComment(_) => "doc comment",
Token::Eof => "end of file",
}
}
}