Skip to main content

oak_tailwind/kind/
mod.rs

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