wat_syntax/
kind.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
2#[expect(non_camel_case_types)]
3#[repr(u16)]
4/// Syntax kind enum for nodes and tokens.
5pub enum SyntaxKind {
6    // SyntaxToken
7    WHITESPACE = 0,
8    LINE_COMMENT,
9    BLOCK_COMMENT,
10    L_PAREN,
11    R_PAREN,
12    KEYWORD,
13    INSTR_NAME,
14    IDENT,
15    STRING,
16    INT,
17    UNSIGNED_INT,
18    FLOAT,
19    TYPE_KEYWORD,
20    EQ,
21    MEM_ARG_KEYWORD,
22    SHAPE_DESCRIPTOR,
23    ANNOT_START,
24    ANNOT_ELEM,
25    ANNOT_END,
26    ERROR,
27
28    // SyntaxNode
29    MODULE_NAME,
30    NAME,
31    NUM_TYPE,
32    VEC_TYPE,
33    REF_TYPE,
34    HEAP_TYPE,
35    PACKED_TYPE,
36    FIELD_TYPE,
37    STRUCT_TYPE,
38    ARRAY_TYPE,
39    FUNC_TYPE,
40    PARAM,
41    RESULT,
42    FIELD,
43    SUB_TYPE,
44    TABLE_TYPE,
45    MEMORY_TYPE,
46    ADDR_TYPE,
47    GLOBAL_TYPE,
48    BLOCK_TYPE,
49    PLAIN_INSTR,
50    BLOCK_BLOCK,
51    BLOCK_LOOP,
52    BLOCK_IF,
53    BLOCK_IF_THEN,
54    BLOCK_IF_ELSE,
55    BLOCK_TRY_TABLE,
56    CATCH,
57    CATCH_ALL,
58    MEM_ARG,
59    IMMEDIATE,
60    TYPE_USE,
61    LIMITS,
62    IMPORT,
63    EXPORT,
64    EXTERN_TYPE_FUNC,
65    EXTERN_TYPE_TABLE,
66    EXTERN_TYPE_MEMORY,
67    EXTERN_TYPE_GLOBAL,
68    EXTERN_TYPE_TAG,
69    EXTERN_IDX_FUNC,
70    EXTERN_IDX_TABLE,
71    EXTERN_IDX_MEMORY,
72    EXTERN_IDX_GLOBAL,
73    EXTERN_IDX_TAG,
74    INDEX,
75    LOCAL,
76    MEM_USE,
77    OFFSET,
78    ELEM,
79    ELEM_LIST,
80    ELEM_EXPR,
81    TABLE_USE,
82    DATA,
83    MODULE,
84    MODULE_FIELD_DATA,
85    MODULE_FIELD_ELEM,
86    MODULE_FIELD_EXPORT,
87    MODULE_FIELD_FUNC,
88    MODULE_FIELD_GLOBAL,
89    MODULE_FIELD_IMPORT,
90    MODULE_FIELD_MEMORY,
91    MODULE_FIELD_START,
92    MODULE_FIELD_TABLE,
93    MODULE_FIELD_TAG,
94    TYPE_DEF,
95    REC_TYPE,
96    ROOT,
97}
98
99impl SyntaxKind {
100    #[inline]
101    /// Checks if it is whitespace or comment or annotation.
102    pub fn is_trivia(self) -> bool {
103        matches!(
104            self,
105            SyntaxKind::WHITESPACE
106                | SyntaxKind::LINE_COMMENT
107                | SyntaxKind::BLOCK_COMMENT
108                | SyntaxKind::ANNOT_START
109                | SyntaxKind::ANNOT_ELEM
110                | SyntaxKind::ANNOT_END
111        )
112    }
113
114    #[inline]
115    pub fn is_comment(self) -> bool {
116        matches!(self, SyntaxKind::LINE_COMMENT | SyntaxKind::BLOCK_COMMENT)
117    }
118
119    #[inline]
120    /// Checks if it is punctuation.
121    pub fn is_punc(self) -> bool {
122        matches!(self, SyntaxKind::L_PAREN | SyntaxKind::R_PAREN)
123    }
124}
125
126impl From<SyntaxKind> for rowan::SyntaxKind {
127    fn from(kind: SyntaxKind) -> Self {
128        Self(kind as u16)
129    }
130}