oak_java/kind/
mod.rs

1use oak_core::SyntaxKind;
2use serde::{Deserialize, Serialize};
3
4/// Java 语言Token 类型
5#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize)]
6pub enum JavaSyntaxKind {
7    // 关键
8    Abstract,
9    Assert,
10    Boolean,
11    Break,
12    Byte,
13    Case,
14    Catch,
15    Char,
16    Class,
17    Const,
18    Continue,
19    Default,
20    Do,
21    Double,
22    Else,
23    Enum,
24    Extends,
25    Final,
26    Finally,
27    Float,
28    For,
29    If,
30    Goto,
31    Implements,
32    Import,
33    Instanceof,
34    Int,
35    Interface,
36    Long,
37    Native,
38    New,
39    Package,
40    Private,
41    Protected,
42    Public,
43    Return,
44    Short,
45    Static,
46    Strictfp,
47    Super,
48    Switch,
49    Synchronized,
50    This,
51    Throw,
52    Throws,
53    Transient,
54    Try,
55    Void,
56    Volatile,
57    While,
58    // 字面
59    IntegerLiteral,
60    FloatingPointLiteral,
61    BooleanLiteral,
62    CharacterLiteral,
63    StringLiteral,
64    NullLiteral,
65    // 运算
66    Assign,                   // =
67    GreaterThan,              // >
68    LessThan,                 // <
69    Bang,                     // !
70    Tilde,                    // ~
71    Question,                 // ?
72    Colon,                    // :
73    Equals,                   // ==
74    LessThanEquals,           // <=
75    GreaterThanEquals,        // >=
76    BangEquals,               // !=
77    AmpersandAmpersand,       // &&
78    PipePipe,                 // ||
79    PlusPlus,                 // ++
80    MinusMinus,               // --
81    Plus,                     // +
82    Minus,                    // -
83    Asterisk,                 // *
84    Slash,                    // /
85    Ampersand,                // &
86    Pipe,                     // |
87    Caret,                    // ^
88    Percent,                  // %
89    LeftShift,                // <<
90    RightShift,               // >>
91    UnsignedRightShift,       // >>>
92    PlusEquals,               // +=
93    MinusEquals,              // -=
94    AsteriskEquals,           // *=
95    SlashEquals,              // /=
96    AmpersandEquals,          // &=
97    PipeEquals,               // |=
98    CaretEquals,              // ^=
99    PercentEquals,            // %=
100    LeftShiftEquals,          // <<=
101    RightShiftEquals,         // >>=
102    UnsignedRightShiftEquals, // >>>=
103    // 分隔
104    LeftParen,    // (
105    RightParen,   // )
106    LeftBrace,    // {
107    RightBrace,   // }
108    LeftBracket,  // [
109    RightBracket, // ]
110    Semicolon,    // ;
111    Comma,        // ,
112    Dot,          // .
113    Ellipsis,     // ...
114    At,           // @
115    DoubleColon,  // ::
116    // 标识
117    Identifier,
118    // 注释
119    LineComment,
120    BlockComment,
121    // 空白
122    Whitespace,
123    // 文件结束
124    Eof,
125    // 错误
126    Error,
127}
128
129impl SyntaxKind for JavaSyntaxKind {
130    fn is_trivia(&self) -> bool {
131        matches!(self, Self::Whitespace | Self::LineComment | Self::BlockComment)
132    }
133
134    fn is_comment(&self) -> bool {
135        matches!(self, Self::LineComment | Self::BlockComment)
136    }
137
138    fn is_whitespace(&self) -> bool {
139        matches!(self, Self::Whitespace)
140    }
141
142    fn is_token_type(&self) -> bool {
143        !matches!(self, Self::Error | Self::Eof)
144    }
145
146    fn is_element_type(&self) -> bool {
147        matches!(self, Self::Error | Self::Eof)
148    }
149}
150
151impl JavaSyntaxKind {
152    pub fn is_keyword(s: &str) -> bool {
153        matches!(
154            s,
155            "abstract"
156                | "assert"
157                | "boolean"
158                | "break"
159                | "byte"
160                | "case"
161                | "catch"
162                | "char"
163                | "class"
164                | "const"
165                | "continue"
166                | "default"
167                | "do"
168                | "double"
169                | "else"
170                | "enum"
171                | "extends"
172                | "final"
173                | "finally"
174                | "float"
175                | "for"
176                | "if"
177                | "goto"
178                | "implements"
179                | "import"
180                | "instanceof"
181                | "int"
182                | "interface"
183                | "long"
184                | "native"
185                | "new"
186                | "package"
187                | "private"
188                | "protected"
189                | "public"
190                | "return"
191                | "short"
192                | "static"
193                | "strictfp"
194                | "super"
195                | "switch"
196                | "synchronized"
197                | "this"
198                | "throw"
199                | "throws"
200                | "transient"
201                | "try"
202                | "void"
203                | "volatile"
204                | "while"
205        )
206    }
207
208    pub fn from_keyword_str(s: &str) -> Option<JavaSyntaxKind> {
209        match s {
210            "abstract" => Some(JavaSyntaxKind::Abstract),
211            "assert" => Some(JavaSyntaxKind::Assert),
212            "boolean" => Some(JavaSyntaxKind::Boolean),
213            "break" => Some(JavaSyntaxKind::Break),
214            "byte" => Some(JavaSyntaxKind::Byte),
215            "case" => Some(JavaSyntaxKind::Case),
216            "catch" => Some(JavaSyntaxKind::Catch),
217            "char" => Some(JavaSyntaxKind::Char),
218            "class" => Some(JavaSyntaxKind::Class),
219            "const" => Some(JavaSyntaxKind::Const),
220            "continue" => Some(JavaSyntaxKind::Continue),
221            "default" => Some(JavaSyntaxKind::Default),
222            "do" => Some(JavaSyntaxKind::Do),
223            "double" => Some(JavaSyntaxKind::Double),
224            "else" => Some(JavaSyntaxKind::Else),
225            "enum" => Some(JavaSyntaxKind::Enum),
226            "extends" => Some(JavaSyntaxKind::Extends),
227            "final" => Some(JavaSyntaxKind::Final),
228            "finally" => Some(JavaSyntaxKind::Finally),
229            "float" => Some(JavaSyntaxKind::Float),
230            "for" => Some(JavaSyntaxKind::For),
231            "if" => Some(JavaSyntaxKind::If),
232            "goto" => Some(JavaSyntaxKind::Goto),
233            "implements" => Some(JavaSyntaxKind::Implements),
234            "import" => Some(JavaSyntaxKind::Import),
235            "instanceof" => Some(JavaSyntaxKind::Instanceof),
236            "int" => Some(JavaSyntaxKind::Int),
237            "interface" => Some(JavaSyntaxKind::Interface),
238            "long" => Some(JavaSyntaxKind::Long),
239            "native" => Some(JavaSyntaxKind::Native),
240            "new" => Some(JavaSyntaxKind::New),
241            "package" => Some(JavaSyntaxKind::Package),
242            "private" => Some(JavaSyntaxKind::Private),
243            "protected" => Some(JavaSyntaxKind::Protected),
244            "public" => Some(JavaSyntaxKind::Public),
245            "return" => Some(JavaSyntaxKind::Return),
246            "short" => Some(JavaSyntaxKind::Short),
247            "static" => Some(JavaSyntaxKind::Static),
248            "strictfp" => Some(JavaSyntaxKind::Strictfp),
249            "super" => Some(JavaSyntaxKind::Super),
250            "switch" => Some(JavaSyntaxKind::Switch),
251            "synchronized" => Some(JavaSyntaxKind::Synchronized),
252            "this" => Some(JavaSyntaxKind::This),
253            "throw" => Some(JavaSyntaxKind::Throw),
254            "throws" => Some(JavaSyntaxKind::Throws),
255            "transient" => Some(JavaSyntaxKind::Transient),
256            "try" => Some(JavaSyntaxKind::Try),
257            "void" => Some(JavaSyntaxKind::Void),
258            "volatile" => Some(JavaSyntaxKind::Volatile),
259            "while" => Some(JavaSyntaxKind::While),
260            "true" => Some(JavaSyntaxKind::BooleanLiteral),
261            "false" => Some(JavaSyntaxKind::BooleanLiteral),
262            "null" => Some(JavaSyntaxKind::NullLiteral),
263            _ => None,
264        }
265    }
266}