1use oak_core::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub enum ScssSyntaxKind {
7 SourceFile,
9 ErrorNode,
10 Selector,
11 Property,
12 Variable,
13 Ruleset,
14 Declaration,
15
16 Whitespace,
18 Newline,
19 Comment,
20 Error,
21 Eof,
22
23 Identifier,
25 IntegerLiteral,
26 FloatLiteral,
27 StringLiteral,
28 CharLiteral,
29 BooleanLiteral,
30
31 Import,
33 Include,
34 Mixin,
35 Function,
36 Return,
37 If,
38 Else,
39 For,
40 While,
41 Each,
42 In,
43 From,
44 To,
45 Through,
46 Default,
47 Important,
48 Optional,
49 Global,
50 Null,
51 True,
52 False,
53
54 Abstract,
56 Case,
57 Catch,
58 Class,
59 Def,
60 Do,
61 Extends,
62 Final,
63 Finally,
64 ForSome,
65 Implicit,
66 Lazy,
67 Match,
68 New,
69 Object,
70 Override,
71 Package,
72 Private,
73 Protected,
74 Sealed,
75 Super,
76 This,
77 Throw,
78 Trait,
79 Try,
80 Type,
81 Val,
82 Var,
83 With,
84 Yield,
85
86 Plus, Minus, Star, Slash, Percent, Eq, EqEq, Ne, Lt, Le, Gt, Ge, And, Or, Xor, AndAnd, OrOr, Not, Bang, 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, Dollar, LeftParen, RightParen, LeftBracket, RightBracket, LeftBrace, RightBrace, LineComment,
143 BlockComment,
144 DocComment,
145}
146
147impl TokenType for ScssSyntaxKind {
148 type Role = UniversalTokenRole;
149
150 const END_OF_STREAM: Self = Self::Eof;
151
152 fn role(&self) -> Self::Role {
153 match self {
154 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
155 Self::Comment | Self::LineComment | Self::BlockComment | Self::DocComment => UniversalTokenRole::Comment,
156 Self::Error => UniversalTokenRole::Error,
157 Self::Eof => UniversalTokenRole::None,
158 Self::Identifier => UniversalTokenRole::Name,
159 Self::IntegerLiteral | Self::FloatLiteral | Self::StringLiteral | Self::CharLiteral | Self::BooleanLiteral | Self::True | Self::False | Self::Null => UniversalTokenRole::Literal,
160 Self::Import
161 | Self::Include
162 | Self::Mixin
163 | Self::Function
164 | Self::Return
165 | Self::If
166 | Self::Else
167 | Self::For
168 | Self::While
169 | Self::Each
170 | Self::In
171 | Self::From
172 | Self::To
173 | Self::Through
174 | Self::Default
175 | Self::Important
176 | Self::Optional
177 | Self::Global => UniversalTokenRole::Keyword,
178 Self::Plus
179 | Self::Minus
180 | Self::Star
181 | Self::Slash
182 | Self::Percent
183 | Self::Eq
184 | Self::EqEq
185 | Self::Ne
186 | Self::Lt
187 | Self::Le
188 | Self::Gt
189 | Self::Ge
190 | Self::And
191 | Self::Or
192 | Self::Xor
193 | Self::AndAnd
194 | Self::OrOr
195 | Self::Not
196 | Self::Bang
197 | Self::Tilde
198 | Self::LShift
199 | Self::RShift
200 | Self::URShift
201 | Self::PlusEq
202 | Self::MinusEq
203 | Self::StarEq
204 | Self::SlashEq
205 | Self::PercentEq
206 | Self::AndEq
207 | Self::OrEq
208 | Self::XorEq
209 | Self::LShiftEq
210 | Self::RShiftEq
211 | Self::URShiftEq
212 | Self::Arrow
213 | Self::LeftArrow => UniversalTokenRole::Operator,
214 Self::LeftParen | Self::RightParen | Self::LeftBracket | Self::RightBracket | Self::LeftBrace | Self::RightBrace => UniversalTokenRole::Punctuation,
215 _ => UniversalTokenRole::None,
216 }
217 }
218}
219
220impl ElementType for ScssSyntaxKind {
221 type Role = UniversalElementRole;
222
223 fn role(&self) -> Self::Role {
224 match self {
225 Self::SourceFile => UniversalElementRole::Root,
226 Self::ErrorNode => UniversalElementRole::Error,
227 _ => UniversalElementRole::None,
228 }
229 }
230}