oak_tailwind/lexer/
token_type.rs1use oak_core::{Token, TokenType, UniversalTokenRole};
3
4pub type TailwindToken = Token<TailwindTokenType>;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10pub enum TailwindTokenType {
11 Root,
13 Utility,
15 Modifier,
17 ArbitraryValue,
19 Important,
21 Directive,
23 Identifier,
25 Value,
27
28 LeftBracket,
30 RightBracket,
32 Colon,
34 Semicolon,
36 At,
38 Bang,
40 Dash,
42 Slash,
44 Dot,
46 Hash,
48 Comma,
50 LeftParen,
52 RightParen,
54
55 Whitespace,
57 Comment,
59 Unknown,
61 Eof,
63}
64
65impl core::fmt::Display for TailwindTokenType {
66 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
67 match self {
68 Self::Root => f.write_str("Root"),
69 Self::Utility => f.write_str("Utility"),
70 Self::Modifier => f.write_str("Modifier"),
71 Self::ArbitraryValue => f.write_str("ArbitraryValue"),
72 Self::Important => f.write_str("Important"),
73 Self::Directive => f.write_str("Directive"),
74 Self::Identifier => f.write_str("Identifier"),
75 Self::Value => f.write_str("Value"),
76 Self::LeftBracket => f.write_str("["),
77 Self::RightBracket => f.write_str("]"),
78 Self::Colon => f.write_str(":"),
79 Self::Semicolon => f.write_str(";"),
80 Self::At => f.write_str("@"),
81 Self::Bang => f.write_str("!"),
82 Self::Dash => f.write_str("-"),
83 Self::Slash => f.write_str("/"),
84 Self::Dot => f.write_str("."),
85 Self::Hash => f.write_str("#"),
86 Self::Comma => f.write_str(","),
87 Self::LeftParen => f.write_str("("),
88 Self::RightParen => f.write_str(")"),
89 Self::Whitespace => f.write_str("Whitespace"),
90 Self::Comment => f.write_str("Comment"),
91 Self::Unknown => f.write_str("Unknown"),
92 Self::Eof => f.write_str("Eof"),
93 }
94 }
95}
96
97impl TokenType for TailwindTokenType {
98 type Role = UniversalTokenRole;
99 const END_OF_STREAM: Self = Self::Eof;
100
101 fn is_ignored(&self) -> bool {
102 matches!(self, Self::Whitespace | Self::Comment)
103 }
104
105 fn role(&self) -> Self::Role {
106 match self {
107 Self::Root => UniversalTokenRole::None,
108 Self::Utility => UniversalTokenRole::Keyword,
109 Self::Modifier => UniversalTokenRole::Keyword,
110 Self::ArbitraryValue => UniversalTokenRole::Literal,
111 Self::Important => UniversalTokenRole::Operator,
112 Self::Directive => UniversalTokenRole::Keyword,
113 Self::Identifier => UniversalTokenRole::Name,
114 Self::Value => UniversalTokenRole::Literal,
115 Self::LeftBracket | Self::RightBracket | Self::LeftParen | Self::RightParen => UniversalTokenRole::Punctuation,
116 Self::Colon | Self::Semicolon | Self::At | Self::Bang | Self::Dash | Self::Slash | Self::Dot | Self::Hash | Self::Comma => UniversalTokenRole::Punctuation,
117 Self::Whitespace => UniversalTokenRole::Whitespace,
118 Self::Comment => UniversalTokenRole::Comment,
119 Self::Eof => UniversalTokenRole::Eof,
120 Self::Unknown => UniversalTokenRole::Error,
121 }
122 }
123}