1use oak_core::{ElementType, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7#[repr(u16)]
8pub enum CSharpElementType {
9 Whitespace,
11 Newline,
12 Comment,
13 Identifier,
14 Number,
15 String,
16 Character,
17 VerbatimString,
18 InterpolatedString,
19 NumberLiteral,
20 StringLiteral,
21 CharLiteral,
22
23 Abstract,
25 As,
26 Base,
27 Bool,
28 Break,
29 Byte,
30 Case,
31 Catch,
32 Char,
33 Checked,
34 Class,
35 Const,
36 Continue,
37 Decimal,
38 Default,
39 Delegate,
40 Do,
41 Double,
42 Else,
43 Enum,
44 Event,
45 Explicit,
46 Extern,
47 False,
48 Finally,
49 Fixed,
50 Float,
51 For,
52 Foreach,
53 Goto,
54 If,
55 Implicit,
56 In,
57 Int,
58 Interface,
59 Internal,
60 Is,
61 Lock,
62 Long,
63 Namespace,
64 New,
65 Null,
66 Object,
67 Operator,
68 Out,
69 Override,
70 Params,
71 Private,
72 Protected,
73 Public,
74 Readonly,
75 Record,
76 Ref,
77 Return,
78 Sbyte,
79 Sealed,
80 Short,
81 Sizeof,
82 Stackalloc,
83 Static,
84 Struct,
85 Switch,
86 This,
87 Throw,
88 True,
89 Try,
90 Typeof,
91 Uint,
92 Ulong,
93 Unchecked,
94 Unsafe,
95 Ushort,
96 Using,
97 Virtual,
98 Void,
99 Volatile,
100 While,
101
102 AbstractKeyword,
104 AsKeyword,
105 BaseKeyword,
106 BoolKeyword,
107 BreakKeyword,
108 ByteKeyword,
109 CaseKeyword,
110 CatchKeyword,
111 CharKeyword,
112 CheckedKeyword,
113 ClassKeyword,
114 ConstKeyword,
115 ContinueKeyword,
116 DecimalKeyword,
117 DefaultKeyword,
118 DelegateKeyword,
119 DoKeyword,
120 DoubleKeyword,
121 ElseKeyword,
122 EnumKeyword,
123 EventKeyword,
124 ExplicitKeyword,
125 ExternKeyword,
126 FalseKeyword,
127 FinallyKeyword,
128 FixedKeyword,
129 FloatKeyword,
130 ForKeyword,
131 ForeachKeyword,
132 GotoKeyword,
133 IfKeyword,
134 ImplicitKeyword,
135 InKeyword,
136 IntKeyword,
137 InterfaceKeyword,
138 InternalKeyword,
139 IsKeyword,
140 LockKeyword,
141 LongKeyword,
142 NamespaceKeyword,
143 NewKeyword,
144 NullKeyword,
145 ObjectKeyword,
146 OperatorKeyword,
147 OutKeyword,
148 OverrideKeyword,
149 ParamsKeyword,
150 PrivateKeyword,
151 ProtectedKeyword,
152 PublicKeyword,
153 ReadonlyKeyword,
154 RefKeyword,
155 ReturnKeyword,
156 SbyteKeyword,
157 SealedKeyword,
158 ShortKeyword,
159 SizeofKeyword,
160 StackallocKeyword,
161 StaticKeyword,
162 StringKeyword,
163 StructKeyword,
164 SwitchKeyword,
165 ThisKeyword,
166 ThrowKeyword,
167 TrueKeyword,
168 TryKeyword,
169 TypeofKeyword,
170 UintKeyword,
171 UlongKeyword,
172 UncheckedKeyword,
173 UnsafeKeyword,
174 UshortKeyword,
175 UsingKeyword,
176 VirtualKeyword,
177 VoidKeyword,
178 VolatileKeyword,
179 WhileKeyword,
180
181 AddKeyword,
183 AliasKeyword,
184 AscendingKeyword,
185 ByKeyword,
186 DescendingKeyword,
187 FromKeyword,
188 GetKeyword,
189 GlobalKeyword,
190 GroupKeyword,
191 IntoKeyword,
192 JoinKeyword,
193 LetKeyword,
194 OrderbyKeyword,
195 PartialKeyword,
196 RemoveKeyword,
197 SelectKeyword,
198 SetKeyword,
199 ValueKeyword,
200 VarKeyword,
201 WhereKeyword,
202 YieldKeyword,
203
204 Plus,
206 Minus,
207 Star,
208 Slash,
209 Percent,
210 Ampersand,
211 Pipe,
212 Caret,
213 Tilde,
214 BitAnd,
215 BitOr,
216 BitXor,
217 BitNot,
218 LeftShift,
219 RightShift,
220 Equal,
221 NotEqual,
222 Less,
223 LessEqual,
224 Greater,
225 GreaterEqual,
226 LogicalAnd,
227 LogicalOr,
228 LogicalNot,
229 Question,
230 QuestionQuestion,
231 Increment,
232 Decrement,
233 Arrow,
234 Lambda,
235
236 Assign,
238 PlusAssign,
239 MinusAssign,
240 StarAssign,
241 SlashAssign,
242 PercentAssign,
243 AmpersandAssign,
244 PipeAssign,
245 CaretAssign,
246 LeftShiftAssign,
247 RightShiftAssign,
248 QuestionQuestionAssign,
249 AndAssign,
250 OrAssign,
251 XorAssign,
252
253 LeftParen,
255 RightParen,
256 LeftBracket,
257 RightBracket,
258 LeftBrace,
259 RightBrace,
260 Comma,
261 Semicolon,
262 Colon,
263 ColonColon,
264 Dot,
265 QuestionDot,
266 At,
267 Hash,
268 Dollar,
269
270 Eof,
271 Error,
272
273 IfStatement,
275 WhileStatement,
276 ForStatement,
277 Block,
278 ReturnStatement,
279 MethodDeclaration,
280 PropertyDeclaration,
281 FieldDeclaration,
282 IndexerDeclaration,
283 IdentifierName,
284 LiteralExpression,
285 BinaryExpression,
286 InvocationExpression,
287 ElementAccessExpression,
288 MemberAccessExpression,
289 AssignmentExpression,
290 BreakStatement,
291 ContinueStatement,
292 ExpressionStatement,
293 ForeachStatement,
294 NamespaceDeclaration,
295 UsingDirective,
296 ClassDeclaration,
297 InterfaceDeclaration,
298 StructDeclaration,
299 EnumDeclaration,
300 RecordDeclaration,
301 DelegateDeclaration,
302 EventDeclaration,
303 AwaitExpression,
304 AttributeList,
305 Attribute,
306 Root,
307}
308
309impl CSharpElementType {
310 pub fn is_keyword(&self) -> bool {
311 matches!(
312 self,
313 Self::Abstract
314 | Self::As
315 | Self::Base
316 | Self::Bool
317 | Self::Break
318 | Self::Byte
319 | Self::Case
320 | Self::Catch
321 | Self::Char
322 | Self::Checked
323 | Self::Class
324 | Self::Const
325 | Self::Continue
326 | Self::Decimal
327 | Self::Default
328 | Self::Delegate
329 | Self::Do
330 | Self::Double
331 | Self::Else
332 | Self::Enum
333 | Self::Event
334 | Self::Explicit
335 | Self::Extern
336 | Self::False
337 | Self::Finally
338 | Self::Fixed
339 | Self::Float
340 | Self::For
341 | Self::Foreach
342 | Self::Goto
343 | Self::If
344 | Self::Implicit
345 | Self::In
346 | Self::Int
347 | Self::Interface
348 | Self::Internal
349 | Self::Is
350 | Self::Lock
351 | Self::Long
352 | Self::Namespace
353 | Self::New
354 | Self::Null
355 | Self::Object
356 | Self::Operator
357 | Self::Out
358 | Self::Override
359 | Self::Params
360 | Self::Private
361 | Self::Protected
362 | Self::Public
363 | Self::Readonly
364 | Self::Ref
365 | Self::Return
366 | Self::Sbyte
367 | Self::Sealed
368 | Self::Short
369 | Self::Sizeof
370 | Self::Stackalloc
371 | Self::Static
372 | Self::Struct
373 | Self::Switch
374 | Self::This
375 | Self::Throw
376 | Self::True
377 | Self::Try
378 | Self::Typeof
379 | Self::Uint
380 | Self::Ulong
381 | Self::Unchecked
382 | Self::Unsafe
383 | Self::Ushort
384 | Self::Using
385 | Self::Virtual
386 | Self::Void
387 | Self::Volatile
388 | Self::While
389 | Self::AbstractKeyword
390 | Self::AsKeyword
391 | Self::BaseKeyword
392 | Self::BoolKeyword
393 | Self::BreakKeyword
394 | Self::ByteKeyword
395 | Self::CaseKeyword
396 | Self::CatchKeyword
397 | Self::CharKeyword
398 | Self::CheckedKeyword
399 | Self::ClassKeyword
400 | Self::ConstKeyword
401 | Self::ContinueKeyword
402 | Self::DecimalKeyword
403 | Self::DefaultKeyword
404 | Self::DelegateKeyword
405 | Self::DoKeyword
406 | Self::DoubleKeyword
407 | Self::ElseKeyword
408 | Self::EnumKeyword
409 | Self::EventKeyword
410 | Self::ExplicitKeyword
411 | Self::ExternKeyword
412 | Self::FalseKeyword
413 | Self::FinallyKeyword
414 | Self::FixedKeyword
415 | Self::FloatKeyword
416 | Self::ForKeyword
417 | Self::ForeachKeyword
418 | Self::GotoKeyword
419 | Self::IfKeyword
420 | Self::ImplicitKeyword
421 | Self::InKeyword
422 | Self::IntKeyword
423 | Self::InterfaceKeyword
424 | Self::InternalKeyword
425 | Self::IsKeyword
426 | Self::LockKeyword
427 | Self::LongKeyword
428 | Self::NamespaceKeyword
429 | Self::NewKeyword
430 | Self::NullKeyword
431 | Self::ObjectKeyword
432 | Self::OperatorKeyword
433 | Self::OutKeyword
434 | Self::OverrideKeyword
435 | Self::ParamsKeyword
436 | Self::PrivateKeyword
437 | Self::ProtectedKeyword
438 | Self::PublicKeyword
439 | Self::ReadonlyKeyword
440 | Self::RefKeyword
441 | Self::ReturnKeyword
442 | Self::SbyteKeyword
443 | Self::SealedKeyword
444 | Self::ShortKeyword
445 | Self::SizeofKeyword
446 | Self::StackallocKeyword
447 | Self::StaticKeyword
448 | Self::StringKeyword
449 | Self::StructKeyword
450 | Self::SwitchKeyword
451 | Self::ThisKeyword
452 | Self::ThrowKeyword
453 | Self::TrueKeyword
454 | Self::TryKeyword
455 | Self::TypeofKeyword
456 | Self::UintKeyword
457 | Self::UlongKeyword
458 | Self::UncheckedKeyword
459 | Self::UnsafeKeyword
460 | Self::UshortKeyword
461 | Self::UsingKeyword
462 | Self::VirtualKeyword
463 | Self::VoidKeyword
464 | Self::VolatileKeyword
465 | Self::WhileKeyword
466 | Self::AddKeyword
467 | Self::AliasKeyword
468 | Self::AscendingKeyword
469 | Self::ByKeyword
470 | Self::DescendingKeyword
471 | Self::FromKeyword
472 | Self::GetKeyword
473 | Self::GlobalKeyword
474 | Self::GroupKeyword
475 | Self::IntoKeyword
476 | Self::JoinKeyword
477 | Self::LetKeyword
478 | Self::OrderbyKeyword
479 | Self::PartialKeyword
480 | Self::RemoveKeyword
481 | Self::SelectKeyword
482 | Self::SetKeyword
483 | Self::ValueKeyword
484 | Self::VarKeyword
485 | Self::WhereKeyword
486 | Self::YieldKeyword
487 )
488 }
489}
490
491impl ElementType for CSharpElementType {
492 type Role = UniversalElementRole;
493
494 fn role(&self) -> Self::Role {
495 match self {
496 _ => UniversalElementRole::None,
497 }
498 }
499}
500
501impl From<crate::lexer::token_type::CSharpTokenType> for CSharpElementType {
502 fn from(token: crate::lexer::token_type::CSharpTokenType) -> Self {
503 unsafe { std::mem::transmute(token as u16) }
504 }
505}