Skip to main content

oak_csharp/lexer/
token_type.rs

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    // Literals
205    Number,
206
207    String,
208
209    Character,
210
211    VerbatimString,
212
213    InterpolatedString,
214
215    NumberLiteral,
216
217    StringLiteral,
218
219    CharLiteral,
220
221    // Keywords
222    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    // Long keyword variants
303    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    // Contextual keywords
384    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    // Operators
407    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    // Assignment operators
439    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    // Delimiters
456    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}