1use oak_core::SyntaxKind;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize)]
6pub enum JavaSyntaxKind {
7 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 IntegerLiteral,
60 FloatingPointLiteral,
61 BooleanLiteral,
62 CharacterLiteral,
63 StringLiteral,
64 NullLiteral,
65 Assign, GreaterThan, LessThan, Bang, Tilde, Question, Colon, Equals, LessThanEquals, GreaterThanEquals, BangEquals, AmpersandAmpersand, PipePipe, PlusPlus, MinusMinus, Plus, Minus, Asterisk, Slash, Ampersand, Pipe, Caret, Percent, LeftShift, RightShift, UnsignedRightShift, PlusEquals, MinusEquals, AsteriskEquals, SlashEquals, AmpersandEquals, PipeEquals, CaretEquals, PercentEquals, LeftShiftEquals, RightShiftEquals, UnsignedRightShiftEquals, LeftParen, RightParen, LeftBrace, RightBrace, LeftBracket, RightBracket, Semicolon, Comma, Dot, Ellipsis, At, DoubleColon, Identifier,
118 LineComment,
120 BlockComment,
121 Whitespace,
123 Eof,
125 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}