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