oak_wit/kind/
mod.rs

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