Skip to main content

oak_vala/kind/
mod.rs

1#![doc = include_str!("../../readme.md")]
2
3use oak_core::{ElementType, Token, TokenType, UniversalElementRole, UniversalTokenRole};
4use serde::{Deserialize, Serialize};
5
6pub type ValaToken = Token<ValaSyntaxKind>;
7
8#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
9pub enum ValaSyntaxKind {
10    // 基础文本
11    Text,
12    Whitespace,
13    Newline,
14
15    // 错误处理
16    Error,
17
18    // EOF
19    Eof,
20
21    // 标点符号
22    LeftParen,
23    RightParen,
24    LeftBracket,
25    RightBracket,
26    LeftBrace,
27    RightBrace,
28    Colon,
29    Semicolon,
30    Dot,
31    Comma,
32    Question,
33    Bang,
34    At,
35    Hash,
36    Dollar,
37    Percent,
38    Caret,
39    Ampersand,
40    Star,
41    Plus,
42    Minus,
43    Eq,
44    LessThan,
45    GreaterThan,
46    Slash,
47    Backslash,
48    Pipe,
49    Tilde,
50
51    // 复合操作符
52    EqEq,
53    NotEq,
54    LessEq,
55    GreaterEq,
56    AndAnd,
57    OrOr,
58    PlusPlus,
59    MinusMinus,
60    PlusEq,
61    MinusEq,
62    StarEq,
63    SlashEq,
64    PercentEq,
65    LeftShift,
66    RightShift,
67    Arrow,
68
69    // Vala 关键字
70    AbstractKw,
71    AsKw,
72    BaseKw,
73    BreakKw,
74    CaseKw,
75    CatchKw,
76    ClassKw,
77    ConstKw,
78    ConstructKw,
79    ContinueKw,
80    DefaultKw,
81    DelegateKw,
82    DeleteKw,
83    DoKw,
84    ElseKw,
85    EnumKw,
86    EnsuresKw,
87    ErrordomainKw,
88    ExternKw,
89    FalseKw,
90    FinallyKw,
91    ForKw,
92    ForeachKw,
93    GetKw,
94    IfKw,
95    InKw,
96    InlineKw,
97    InterfaceKw,
98    InternalKw,
99    IsKw,
100    LockKw,
101    NamespaceKw,
102    NewKw,
103    NullKw,
104    OutKw,
105    OverrideKw,
106    OwnedKw,
107    PrivateKw,
108    ProtectedKw,
109    PublicKw,
110    RefKw,
111    RequiresKw,
112    ReturnKw,
113    SetKw,
114    SizeofKw,
115    StaticKw,
116    StructKw,
117    SwitchKw,
118    ThisKw,
119    ThrowKw,
120    ThrowsKw,
121    TrueKw,
122    TryKw,
123    TypeofKw,
124    UnownedKw,
125    UsingKw,
126    VarKw,
127    VirtualKw,
128    VoidKw,
129    VolatileKw,
130    WeakKw,
131    WhileKw,
132    YieldKw,
133
134    // 基本类型
135    BoolKw,
136    CharKw,
137    UcharKw,
138    IntKw,
139    UintKw,
140    ShortKw,
141    UshortKw,
142    LongKw,
143    UlongKw,
144    Int8Kw,
145    Uint8Kw,
146    Int16Kw,
147    Uint16Kw,
148    Int32Kw,
149    Uint32Kw,
150    Int64Kw,
151    Uint64Kw,
152    FloatKw,
153    DoubleKw,
154    StringKw,
155
156    // 字面量
157    IntegerLiteral,
158    FloatLiteral,
159    StringLiteral,
160    CharLiteral,
161    BoolLiteral,
162    NullLiteral,
163    Identifier,
164
165    // 注释
166    LineComment,
167    SourceFile,
168    BlockComment,
169}
170
171impl TokenType for ValaSyntaxKind {
172    const END_OF_STREAM: Self = Self::Eof;
173    type Role = UniversalTokenRole;
174
175    fn role(&self) -> Self::Role {
176        match self {
177            Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
178            Self::LineComment | Self::BlockComment => UniversalTokenRole::Comment,
179            Self::Eof => UniversalTokenRole::Eof,
180            _ => UniversalTokenRole::None,
181        }
182    }
183}
184
185impl ElementType for ValaSyntaxKind {
186    type Role = UniversalElementRole;
187
188    fn role(&self) -> Self::Role {
189        match self {
190            Self::SourceFile => UniversalElementRole::Root,
191            Self::Error => UniversalElementRole::Error,
192            _ => UniversalElementRole::None,
193        }
194    }
195}