oak_tailwind/kind/
mod.rs

1/// 统一 Twig 语法种类(包含节点与词法)
2#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
3pub enum TwigSyntaxKind {
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 TwigSyntaxKind {
63    type Role = oak_core::UniversalTokenRole;
64    const END_OF_STREAM: Self = TwigSyntaxKind::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 TwigSyntaxKind {
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 TwigSyntaxKind {
88    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
89        match self {
90            TwigSyntaxKind::Root => f.write_str("Root"),
91            TwigSyntaxKind::Document => f.write_str("Document"),
92            TwigSyntaxKind::Template => f.write_str("Template"),
93            TwigSyntaxKind::Block => f.write_str("Block"),
94            TwigSyntaxKind::Variable => f.write_str("Variable"),
95            TwigSyntaxKind::Filter => f.write_str("Filter"),
96            TwigSyntaxKind::Function => f.write_str("Function"),
97            TwigSyntaxKind::Tag => f.write_str("Tag"),
98            TwigSyntaxKind::Comment => f.write_str("Comment"),
99            TwigSyntaxKind::Text => f.write_str("Text"),
100            TwigSyntaxKind::Expression => f.write_str("Expression"),
101            TwigSyntaxKind::String => f.write_str("String"),
102            TwigSyntaxKind::Number => f.write_str("Number"),
103            TwigSyntaxKind::Boolean => f.write_str("Boolean"),
104            TwigSyntaxKind::Null => f.write_str("Null"),
105            TwigSyntaxKind::Array => f.write_str("Array"),
106            TwigSyntaxKind::Object => f.write_str("Object"),
107            TwigSyntaxKind::Identifier => f.write_str("Identifier"),
108            TwigSyntaxKind::Operator => f.write_str("Operator"),
109            TwigSyntaxKind::ErrorNode => f.write_str("ErrorNode"),
110            TwigSyntaxKind::LeftBrace => f.write_str("{"),
111            TwigSyntaxKind::RightBrace => f.write_str("}"),
112            TwigSyntaxKind::LeftBracket => f.write_str("["),
113            TwigSyntaxKind::RightBracket => f.write_str("]"),
114            TwigSyntaxKind::DoubleLeftBrace => f.write_str("{{"),
115            TwigSyntaxKind::DoubleRightBrace => f.write_str("}}"),
116            TwigSyntaxKind::LeftBracePercent => f.write_str("{%"),
117            TwigSyntaxKind::PercentRightBrace => f.write_str("%}"),
118            TwigSyntaxKind::LeftParen => f.write_str("("),
119            TwigSyntaxKind::RightParen => f.write_str(")"),
120            TwigSyntaxKind::Pipe => f.write_str("|"),
121            TwigSyntaxKind::Comma => f.write_str(","),
122            TwigSyntaxKind::Dot => f.write_str("."),
123            TwigSyntaxKind::Colon => f.write_str(":"),
124            TwigSyntaxKind::Semicolon => f.write_str(";"),
125            TwigSyntaxKind::Eq => f.write_str("="),
126            TwigSyntaxKind::Plus => f.write_str("+"),
127            TwigSyntaxKind::Minus => f.write_str("-"),
128            TwigSyntaxKind::Star => f.write_str("*"),
129            TwigSyntaxKind::Slash => f.write_str("/"),
130            TwigSyntaxKind::Percent => f.write_str("%"),
131            TwigSyntaxKind::Bang => f.write_str("!"),
132            TwigSyntaxKind::Question => f.write_str("?"),
133            TwigSyntaxKind::Lt => f.write_str("<"),
134            TwigSyntaxKind::Gt => f.write_str(">"),
135            TwigSyntaxKind::Amp => f.write_str("&"),
136            TwigSyntaxKind::Caret => f.write_str("^"),
137            TwigSyntaxKind::Tilde => f.write_str("~"),
138            TwigSyntaxKind::Whitespace => f.write_str("Whitespace"),
139            TwigSyntaxKind::Eof => f.write_str("EOF"),
140            TwigSyntaxKind::Error => f.write_str("Error"),
141        }
142    }
143}