use crate::frontend::span::Span;
use crate::version::LuaVersion;
#[derive(Clone, PartialEq, Debug)]
pub enum Token {
And,
Break,
Do,
Else,
Elseif,
End,
False,
For,
Function,
Global,
Goto,
If,
In,
Local,
Nil,
Not,
Or,
Repeat,
Return,
Then,
True,
Until,
While,
Plus,
Minus,
Star,
Slash,
DSlash,
Percent,
Caret,
Hash,
Amp,
Tilde,
Pipe,
Shl,
Shr,
Eq,
Ne,
Le,
Ge,
Lt,
Gt,
Assign,
LParen,
RParen,
LBrace,
RBrace,
LBracket,
RBracket,
DColon,
Semi,
Colon,
Comma,
Dot,
Concat,
Ellipsis,
Int(
i64,
),
Float(
f64,
),
Str(
Vec<u8>,
),
Name(
Box<str>,
),
At,
MacroBraceOpen,
MacroBraceClose,
MacroQuote(
Box<[TokenInfo]>,
),
Eof,
}
impl Token {
pub fn describe(&self, src: &[u8], span: Span, version: LuaVersion) -> String {
match self {
Token::Eof if version <= LuaVersion::Lua51 => "'<eof>'".to_string(),
Token::Eof => "<eof>".to_string(),
_ => format!("'{}'", String::from_utf8_lossy(span.slice(src))),
}
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct TokenInfo {
pub tok: Token,
pub span: Span,
pub line: u32,
}