1use oak_core::{ElementType, UniversalElementRole};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum DelphiElementType {
7 Root,
9 Identifier,
12 String,
14 Number,
16 Float,
18 Whitespace,
20 Newline,
22
23 Program,
26 Unit,
28 Interface,
30 Implementation,
32 Uses,
34 Type,
36 Var,
38 Const,
40 Function,
42 Procedure,
44 Begin,
46 End,
48 If,
50 Then,
52 Else,
54 While,
56 Do,
58 For,
60 To,
62 Downto,
64 Repeat,
66 Until,
68 Case,
70 Of,
72 With,
74 Try,
76 Except,
78 Finally,
80 Raise,
82 Class,
84 Object,
86 Record,
88 Array,
90 Set,
92 File,
94 Packed,
96 String_,
98 Integer,
100 Real,
102 Boolean,
104 Char,
106 Pointer,
108 Nil,
110 True_,
112 False_,
114 And_,
116 Or_,
118 Not_,
120 Div,
122 Mod,
124 In_,
126 Is_,
128 As_,
130
131 Plus,
134 Minus,
136 Star,
138 Slash,
140 Equal,
142 NotEqual,
144 Less,
146 Greater,
148 LessEqual,
150 GreaterEqual,
152 Assign,
154 Dot,
156 DotDot,
158 Caret,
160 At,
162
163 LeftParen,
166 RightParen,
168 LeftBracket,
170 RightBracket,
172 Semicolon,
174 Comma,
176 Colon,
178
179 Comment,
182 LineComment,
184 BlockComment,
186
187 Error,
190 Eof,
192}
193
194impl DelphiElementType {
195 pub fn is_keyword(&self) -> bool {
197 matches!(
198 self,
199 Self::Program
200 | Self::Unit
201 | Self::Interface
202 | Self::Implementation
203 | Self::Uses
204 | Self::Type
205 | Self::Var
206 | Self::Const
207 | Self::Function
208 | Self::Procedure
209 | Self::Begin
210 | Self::End
211 | Self::If
212 | Self::Then
213 | Self::Else
214 | Self::While
215 | Self::Do
216 | Self::For
217 | Self::To
218 | Self::Downto
219 | Self::Repeat
220 | Self::Until
221 | Self::Case
222 | Self::Of
223 | Self::With
224 | Self::Try
225 | Self::Except
226 | Self::Finally
227 | Self::Raise
228 | Self::Class
229 | Self::Object
230 | Self::Record
231 | Self::Array
232 | Self::Set
233 | Self::File
234 | Self::Packed
235 | Self::String_
236 | Self::Integer
237 | Self::Real
238 | Self::Boolean
239 | Self::Char
240 | Self::Pointer
241 | Self::Nil
242 | Self::True_
243 | Self::False_
244 | Self::And_
245 | Self::Or_
246 | Self::Not_
247 | Self::Div
248 | Self::Mod
249 | Self::In_
250 | Self::Is_
251 | Self::As_
252 )
253 }
254}
255
256impl ElementType for DelphiElementType {
257 type Role = UniversalElementRole;
258
259 fn role(&self) -> Self::Role {
260 match self {
261 _ => UniversalElementRole::None,
262 }
263 }
264}
265
266impl From<crate::lexer::token_type::DelphiTokenType> for DelphiElementType {
267 fn from(token: crate::lexer::token_type::DelphiTokenType) -> Self {
268 match token {
269 crate::lexer::token_type::DelphiTokenType::Root => DelphiElementType::Root,
270 crate::lexer::token_type::DelphiTokenType::Identifier => DelphiElementType::Identifier,
271 crate::lexer::token_type::DelphiTokenType::String => DelphiElementType::String,
272 crate::lexer::token_type::DelphiTokenType::Number => DelphiElementType::Number,
273 crate::lexer::token_type::DelphiTokenType::Float => DelphiElementType::Float,
274 crate::lexer::token_type::DelphiTokenType::Whitespace => DelphiElementType::Whitespace,
275 crate::lexer::token_type::DelphiTokenType::Newline => DelphiElementType::Newline,
276 crate::lexer::token_type::DelphiTokenType::Program => DelphiElementType::Program,
277 crate::lexer::token_type::DelphiTokenType::Unit => DelphiElementType::Unit,
278 crate::lexer::token_type::DelphiTokenType::Interface => DelphiElementType::Interface,
279 crate::lexer::token_type::DelphiTokenType::Implementation => DelphiElementType::Implementation,
280 crate::lexer::token_type::DelphiTokenType::Uses => DelphiElementType::Uses,
281 crate::lexer::token_type::DelphiTokenType::Type => DelphiElementType::Type,
282 crate::lexer::token_type::DelphiTokenType::Var => DelphiElementType::Var,
283 crate::lexer::token_type::DelphiTokenType::Const => DelphiElementType::Const,
284 crate::lexer::token_type::DelphiTokenType::Function => DelphiElementType::Function,
285 crate::lexer::token_type::DelphiTokenType::Procedure => DelphiElementType::Procedure,
286 crate::lexer::token_type::DelphiTokenType::Begin => DelphiElementType::Begin,
287 crate::lexer::token_type::DelphiTokenType::End => DelphiElementType::End,
288 crate::lexer::token_type::DelphiTokenType::If => DelphiElementType::If,
289 crate::lexer::token_type::DelphiTokenType::Then => DelphiElementType::Then,
290 crate::lexer::token_type::DelphiTokenType::Else => DelphiElementType::Else,
291 crate::lexer::token_type::DelphiTokenType::While => DelphiElementType::While,
292 crate::lexer::token_type::DelphiTokenType::Do => DelphiElementType::Do,
293 crate::lexer::token_type::DelphiTokenType::For => DelphiElementType::For,
294 crate::lexer::token_type::DelphiTokenType::To => DelphiElementType::To,
295 crate::lexer::token_type::DelphiTokenType::Downto => DelphiElementType::Downto,
296 crate::lexer::token_type::DelphiTokenType::Repeat => DelphiElementType::Repeat,
297 crate::lexer::token_type::DelphiTokenType::Until => DelphiElementType::Until,
298 crate::lexer::token_type::DelphiTokenType::Case => DelphiElementType::Case,
299 crate::lexer::token_type::DelphiTokenType::Of => DelphiElementType::Of,
300 crate::lexer::token_type::DelphiTokenType::With => DelphiElementType::With,
301 crate::lexer::token_type::DelphiTokenType::Try => DelphiElementType::Try,
302 crate::lexer::token_type::DelphiTokenType::Except => DelphiElementType::Except,
303 crate::lexer::token_type::DelphiTokenType::Finally => DelphiElementType::Finally,
304 crate::lexer::token_type::DelphiTokenType::Raise => DelphiElementType::Raise,
305 crate::lexer::token_type::DelphiTokenType::Class => DelphiElementType::Class,
306 crate::lexer::token_type::DelphiTokenType::Object => DelphiElementType::Object,
307 crate::lexer::token_type::DelphiTokenType::Record => DelphiElementType::Record,
308 crate::lexer::token_type::DelphiTokenType::Array => DelphiElementType::Array,
309 crate::lexer::token_type::DelphiTokenType::Set => DelphiElementType::Set,
310 crate::lexer::token_type::DelphiTokenType::File => DelphiElementType::File,
311 crate::lexer::token_type::DelphiTokenType::Packed => DelphiElementType::Packed,
312 crate::lexer::token_type::DelphiTokenType::String_ => DelphiElementType::String_,
313 crate::lexer::token_type::DelphiTokenType::Integer => DelphiElementType::Integer,
314 crate::lexer::token_type::DelphiTokenType::Real => DelphiElementType::Real,
315 crate::lexer::token_type::DelphiTokenType::Boolean => DelphiElementType::Boolean,
316 crate::lexer::token_type::DelphiTokenType::Char => DelphiElementType::Char,
317 crate::lexer::token_type::DelphiTokenType::Pointer => DelphiElementType::Pointer,
318 crate::lexer::token_type::DelphiTokenType::Nil => DelphiElementType::Nil,
319 crate::lexer::token_type::DelphiTokenType::True_ => DelphiElementType::True_,
320 crate::lexer::token_type::DelphiTokenType::False_ => DelphiElementType::False_,
321 crate::lexer::token_type::DelphiTokenType::And_ => DelphiElementType::And_,
322 crate::lexer::token_type::DelphiTokenType::Or_ => DelphiElementType::Or_,
323 crate::lexer::token_type::DelphiTokenType::Not_ => DelphiElementType::Not_,
324 crate::lexer::token_type::DelphiTokenType::Div => DelphiElementType::Div,
325 crate::lexer::token_type::DelphiTokenType::Mod => DelphiElementType::Mod,
326 crate::lexer::token_type::DelphiTokenType::In_ => DelphiElementType::In_,
327 crate::lexer::token_type::DelphiTokenType::Is_ => DelphiElementType::Is_,
328 crate::lexer::token_type::DelphiTokenType::As_ => DelphiElementType::As_,
329 crate::lexer::token_type::DelphiTokenType::Plus => DelphiElementType::Plus,
330 crate::lexer::token_type::DelphiTokenType::Minus => DelphiElementType::Minus,
331 crate::lexer::token_type::DelphiTokenType::Star => DelphiElementType::Star,
332 crate::lexer::token_type::DelphiTokenType::Slash => DelphiElementType::Slash,
333 crate::lexer::token_type::DelphiTokenType::Equal => DelphiElementType::Equal,
334 crate::lexer::token_type::DelphiTokenType::NotEqual => DelphiElementType::NotEqual,
335 crate::lexer::token_type::DelphiTokenType::Less => DelphiElementType::Less,
336 crate::lexer::token_type::DelphiTokenType::Greater => DelphiElementType::Greater,
337 crate::lexer::token_type::DelphiTokenType::LessEqual => DelphiElementType::LessEqual,
338 crate::lexer::token_type::DelphiTokenType::GreaterEqual => DelphiElementType::GreaterEqual,
339 crate::lexer::token_type::DelphiTokenType::Assign => DelphiElementType::Assign,
340 crate::lexer::token_type::DelphiTokenType::Dot => DelphiElementType::Dot,
341 crate::lexer::token_type::DelphiTokenType::DotDot => DelphiElementType::DotDot,
342 crate::lexer::token_type::DelphiTokenType::Caret => DelphiElementType::Caret,
343 crate::lexer::token_type::DelphiTokenType::At => DelphiElementType::At,
344 crate::lexer::token_type::DelphiTokenType::LeftParen => DelphiElementType::LeftParen,
345 crate::lexer::token_type::DelphiTokenType::RightParen => DelphiElementType::RightParen,
346 crate::lexer::token_type::DelphiTokenType::LeftBracket => DelphiElementType::LeftBracket,
347 crate::lexer::token_type::DelphiTokenType::RightBracket => DelphiElementType::RightBracket,
348 crate::lexer::token_type::DelphiTokenType::Semicolon => DelphiElementType::Semicolon,
349 crate::lexer::token_type::DelphiTokenType::Comma => DelphiElementType::Comma,
350 crate::lexer::token_type::DelphiTokenType::Colon => DelphiElementType::Colon,
351 crate::lexer::token_type::DelphiTokenType::Comment => DelphiElementType::Comment,
352 crate::lexer::token_type::DelphiTokenType::LineComment => DelphiElementType::LineComment,
353 crate::lexer::token_type::DelphiTokenType::BlockComment => DelphiElementType::BlockComment,
354 crate::lexer::token_type::DelphiTokenType::Error => DelphiElementType::Error,
355 crate::lexer::token_type::DelphiTokenType::Eof => DelphiElementType::Eof,
356 }
357 }
358}