oak_wit/kind/
mod.rs

1use oak_core::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
2
3#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
4pub enum WitSyntaxKind {
5    // 基础 kind
6    Root,
7    Whitespace,
8    Newline,
9    Comment,
10    Error,
11    Eof,
12    Text,
13
14    // 字面量
15    IntegerLiteral,
16    FloatLiteral,
17    StringLiteral,
18    Identifier,
19
20    // WIT Component 关键字 - 基本结构
21    WorldKw,
22    InterfaceKw,
23    PackageKw,
24    ComponentKw,
25    InstanceKw,
26    ModuleKw,
27    CoreKw,
28    FuncKw,
29    TypeKw,
30    RecordKw,
31    VariantKw,
32    EnumKw,
33    FlagsKw,
34    UnionKw,
35    TupleKw,
36    ListKw,
37    OptionKw,
38    ResultKw,
39    ResourceKw,
40
41    // 导入导出
42    ImportKw,
43    ExportKw,
44    UseKw,
45    IncludeKw,
46    WithKw,
47
48    // 类型相关
49    StaticKw,
50    ConstructorKw,
51    MethodKw,
52
53    // 基本类型
54    BoolKw,
55    U8Kw,
56    U16Kw,
57    U32Kw,
58    U64Kw,
59    S8Kw,
60    S16Kw,
61    S32Kw,
62    S64Kw,
63    F32Kw,
64    F64Kw,
65    CharKw,
66    StringKw,
67
68    // 操作符
69    Arrow,     // ->
70    FatArrow,  // =>
71    Assign,    // =
72    Colon,     // :
73    Semicolon, // ;
74    Comma,     // ,
75    Dot,       // .
76    Question,  // ?
77    At,        // @
78    Hash,      // #
79    Dollar,    // $
80    Percent,   // %
81    Ampersand, // &
82    Star,      // *
83    Plus,      // +
84    Minus,     // -
85    Slash,     // /
86    Lt,        // <
87    Gt,        // >
88    Pipe,      // |
89    Caret,     // ^
90    Tilde,     // ~
91    Bang,      // !
92
93    // 标点符号
94    LeftParen,    // (
95    RightParen,   // )
96    LeftBrace,    // {
97    RightBrace,   // }
98    LeftBracket,  // [
99    RightBracket, // ]
100}
101
102impl std::fmt::Display for WitSyntaxKind {
103    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
104        write!(f, "{:?}", self)
105    }
106}
107
108impl TokenType for WitSyntaxKind {
109    const END_OF_STREAM: Self = Self::Eof;
110    type Role = UniversalTokenRole;
111
112    fn role(&self) -> Self::Role {
113        match self {
114            Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
115            Self::Comment => UniversalTokenRole::Comment,
116            Self::Eof => UniversalTokenRole::Eof,
117            _ => UniversalTokenRole::None,
118        }
119    }
120}
121
122impl ElementType for WitSyntaxKind {
123    type Role = UniversalElementRole;
124
125    fn is_root(&self) -> bool {
126        matches!(self, Self::Root)
127    }
128
129    fn role(&self) -> Self::Role {
130        match self {
131            Self::Root => UniversalElementRole::Root,
132            Self::Error => UniversalElementRole::Error,
133            _ => UniversalElementRole::None,
134        }
135    }
136}