1use oak_core::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub enum ScalaSyntaxKind {
7 SourceFile,
9
10 Whitespace,
12 Newline,
13 Error,
14 Eof,
15 ErrorNode,
16
17 Identifier,
19 IntegerLiteral,
20 FloatLiteral,
21 StringLiteral,
22 CharLiteral,
23 BooleanLiteral,
24
25 Abstract,
27 Case,
28 Catch,
29 Class,
30 Def,
31 Do,
32 Else,
33 Extends,
34 False,
35 Final,
36 Finally,
37 For,
38 ForSome,
39 If,
40 Implicit,
41 Import,
42 Lazy,
43 Match,
44 New,
45 Null,
46 Object,
47 Override,
48 Package,
49 Private,
50 Protected,
51 Return,
52 Sealed,
53 Super,
54 This,
55 Throw,
56 Trait,
57 Try,
58 True,
59 Type,
60 Val,
61 Var,
62 While,
63 With,
64 Yield,
65
66 Plus, Minus, Star, Slash, Percent, Eq, EqEq, Ne, Lt, Le, Gt, Ge, LessEqual, GreaterEqual, EqualEqual, NotEqual, And, Or, Xor, AndAnd, OrOr, Not, Tilde, LShift, RShift, URShift, PlusEq, MinusEq, StarEq, SlashEq, PercentEq, AndEq, OrEq, XorEq, LShiftEq, RShiftEq, URShiftEq, Arrow, LeftArrow, Colon, ColonColon, Semicolon, Dot, Comma, Question, At, Hash, LeftParen, RightParen, LeftBracket, RightBracket, LeftBrace, RightBrace, LineComment,
125 BlockComment,
126 DocComment,
127}
128
129impl TokenType for ScalaSyntaxKind {
130 const END_OF_STREAM: Self = Self::Eof;
131 type Role = UniversalTokenRole;
132
133 fn role(&self) -> Self::Role {
134 match self {
135 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
136 Self::LineComment | Self::BlockComment | Self::DocComment => UniversalTokenRole::Comment,
137 Self::Eof => UniversalTokenRole::Eof,
138 _ => UniversalTokenRole::None,
139 }
140 }
141}
142
143impl ElementType for ScalaSyntaxKind {
144 type Role = UniversalElementRole;
145
146 fn role(&self) -> Self::Role {
147 match self {
148 Self::SourceFile => UniversalElementRole::Root,
149 Self::Error | Self::ErrorNode => UniversalElementRole::Error,
150 _ => UniversalElementRole::None,
151 }
152 }
153}