Skip to main content

zuzu_rust/
token.rs

1use crate::span::Span;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4pub enum TokenKind {
5    Keyword(&'static str),
6    Identifier(String),
7    Number(String),
8    String(String),
9    BinaryString(Vec<u8>),
10    Regex {
11        pattern: String,
12        parts: Vec<TemplatePart>,
13        flags: String,
14    },
15    Template(Vec<TemplatePart>),
16    Operator(String),
17    Punct(char),
18    Eof,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq)]
22pub struct Token {
23    pub kind: TokenKind,
24    pub span: Span,
25}
26
27impl Token {
28    pub fn new(kind: TokenKind, span: Span) -> Self {
29        Self { kind, span }
30    }
31}
32
33#[derive(Debug, Clone, PartialEq, Eq)]
34pub enum TemplatePart {
35    Text { line: usize, value: String },
36    Expr { line: usize, source: String },
37}