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