Skip to main content

oak_tailwind/lexer/
token_type.rs

1use oak_core::{Source, Token, TokenType, UniversalElementRole, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5pub type TailwindToken = Token<TailwindTokenType>;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub enum TailwindTokenType {
10    Root,
11    Document,
12    Template,
13    Block,
14    Variable,
15    Filter,
16    Function,
17    Tag,
18    Comment,
19    Text,
20    Expression,
21    String,
22    Number,
23    Boolean,
24    Null,
25    Array,
26    Object,
27    Identifier,
28    Operator,
29    ErrorNode,
30    LeftBrace,
31    RightBrace,
32    LeftBracket,
33    RightBracket,
34    DoubleLeftBrace,
35    DoubleRightBrace,
36    LeftBracePercent,
37    PercentRightBrace,
38    LeftParen,
39    RightParen,
40    Pipe,
41    Comma,
42    Dot,
43    Colon,
44    Semicolon,
45    Eq,
46    Plus,
47    Minus,
48    Star,
49    Slash,
50    Percent,
51    Bang,
52    Question,
53    Lt,
54    Gt,
55    Amp,
56    Caret,
57    Tilde,
58    Whitespace,
59    Eof,
60    Error,
61}
62
63impl core::fmt::Display for TailwindTokenType {
64    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
65        match self {
66            TailwindTokenType::Root => f.write_str("Root"),
67            TailwindTokenType::Document => f.write_str("Document"),
68            TailwindTokenType::Template => f.write_str("Template"),
69            TailwindTokenType::Block => f.write_str("Block"),
70            TailwindTokenType::Variable => f.write_str("Variable"),
71            TailwindTokenType::Filter => f.write_str("Filter"),
72            TailwindTokenType::Function => f.write_str("Function"),
73            TailwindTokenType::Tag => f.write_str("Tag"),
74            TailwindTokenType::Comment => f.write_str("Comment"),
75            TailwindTokenType::Text => f.write_str("Text"),
76            TailwindTokenType::Expression => f.write_str("Expression"),
77            TailwindTokenType::String => f.write_str("String"),
78            TailwindTokenType::Number => f.write_str("Number"),
79            TailwindTokenType::Boolean => f.write_str("Boolean"),
80            TailwindTokenType::Null => f.write_str("Null"),
81            TailwindTokenType::Array => f.write_str("Array"),
82            TailwindTokenType::Object => f.write_str("Object"),
83            TailwindTokenType::Identifier => f.write_str("Identifier"),
84            TailwindTokenType::Operator => f.write_str("Operator"),
85            TailwindTokenType::ErrorNode => f.write_str("ErrorNode"),
86            TailwindTokenType::LeftBrace => f.write_str("{"),
87            TailwindTokenType::RightBrace => f.write_str("}"),
88            TailwindTokenType::LeftBracket => f.write_str("["),
89            TailwindTokenType::RightBracket => f.write_str("]"),
90            TailwindTokenType::DoubleLeftBrace => f.write_str("{{"),
91            TailwindTokenType::DoubleRightBrace => f.write_str("}}"),
92            TailwindTokenType::LeftBracePercent => f.write_str("{%"),
93            TailwindTokenType::PercentRightBrace => f.write_str("%}"),
94            TailwindTokenType::LeftParen => f.write_str("("),
95            TailwindTokenType::RightParen => f.write_str(")"),
96            TailwindTokenType::Pipe => f.write_str("|"),
97            TailwindTokenType::Comma => f.write_str(","),
98            TailwindTokenType::Dot => f.write_str("."),
99            TailwindTokenType::Colon => f.write_str(":"),
100            TailwindTokenType::Semicolon => f.write_str(";"),
101            TailwindTokenType::Eq => f.write_str("="),
102            TailwindTokenType::Plus => f.write_str("+"),
103            TailwindTokenType::Minus => f.write_str("-"),
104            TailwindTokenType::Star => f.write_str("*"),
105            TailwindTokenType::Slash => f.write_str("/"),
106            TailwindTokenType::Percent => f.write_str("%"),
107            TailwindTokenType::Bang => f.write_str("!"),
108            TailwindTokenType::Question => f.write_str("?"),
109            TailwindTokenType::Lt => f.write_str("<"),
110            TailwindTokenType::Gt => f.write_str(">"),
111            TailwindTokenType::Amp => f.write_str("&"),
112            TailwindTokenType::Caret => f.write_str("^"),
113            TailwindTokenType::Tilde => f.write_str("~"),
114            TailwindTokenType::Whitespace => f.write_str("Whitespace"),
115            TailwindTokenType::Eof => f.write_str("Eof"),
116            TailwindTokenType::Error => f.write_str("Error"),
117        }
118    }
119}
120
121impl TokenType for TailwindTokenType {
122    type Role = UniversalTokenRole;
123    const END_OF_STREAM: Self = Self::Eof;
124
125    fn is_ignored(&self) -> bool {
126        matches!(self, Self::Whitespace | Self::Comment)
127    }
128
129    fn role(&self) -> Self::Role {
130        match self {
131            Self::Whitespace => UniversalTokenRole::Whitespace,
132            Self::Comment => UniversalTokenRole::Comment,
133            Self::Eof => UniversalTokenRole::Eof,
134            Self::Error => UniversalTokenRole::Error,
135            _ => UniversalTokenRole::None,
136        }
137    }
138}