oak_lua/lexer/
token_type.rs1use oak_core::{Token, TokenType, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5pub type LuaToken = Token<LuaTokenType>;
6
7impl TokenType for LuaTokenType {
8 type Role = UniversalTokenRole;
9 const END_OF_STREAM: Self = Self::EndOfStream;
10
11 fn is_ignored(&self) -> bool {
12 matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
13 }
14
15 fn role(&self) -> Self::Role {
16 match self {
17 Self::And
18 | Self::Break
19 | Self::Do
20 | Self::Else
21 | Self::Elseif
22 | Self::End
23 | Self::False
24 | Self::For
25 | Self::Function
26 | Self::Goto
27 | Self::If
28 | Self::In
29 | Self::Local
30 | Self::Nil
31 | Self::Not
32 | Self::Or
33 | Self::Repeat
34 | Self::Return
35 | Self::Then
36 | Self::True
37 | Self::Until
38 | Self::While => UniversalTokenRole::Keyword,
39
40 Self::Identifier => UniversalTokenRole::Name,
41 Self::Number => UniversalTokenRole::Literal,
42 Self::String => UniversalTokenRole::Literal,
43
44 Self::Plus
45 | Self::Minus
46 | Self::Star
47 | Self::Slash
48 | Self::Percent
49 | Self::Caret
50 | Self::Hash
51 | Self::Ampersand
52 | Self::Tilde
53 | Self::Pipe
54 | Self::LtLt
55 | Self::GtGt
56 | Self::SlashSlash
57 | Self::EqEq
58 | Self::TildeEq
59 | Self::LtEq
60 | Self::GtEq
61 | Self::Lt
62 | Self::Gt
63 | Self::Eq
64 | Self::DotDot
65 | Self::DotDotDot => UniversalTokenRole::Operator,
66
67 Self::LeftParen | Self::RightParen | Self::LeftBrace | Self::RightBrace | Self::LeftBracket | Self::RightBracket | Self::ColonColon | Self::Semicolon | Self::Colon | Self::Comma | Self::Dot => UniversalTokenRole::Punctuation,
68
69 Self::Comment => UniversalTokenRole::Comment,
70 _ => UniversalTokenRole::None,
71 }
72 }
73}
74
75#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
76#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
77#[repr(u16)]
78pub enum LuaTokenType {
79 Root,
80 And,
82 Break,
83 Do,
84 Else,
85 Elseif,
86 End,
87 False,
88 For,
89 Function,
90 Goto,
91 If,
92 In,
93 Local,
94 Nil,
95 Not,
96 Or,
97 Repeat,
98 Return,
99 Then,
100 True,
101 Until,
102 While,
103
104 Identifier,
106 Number,
107 String,
108
109 Plus, Minus, Star, Slash, Percent, Caret, Hash, Ampersand, Tilde, Pipe, LtLt, GtGt, SlashSlash, EqEq, TildeEq, LtEq, GtEq, Lt, Gt, Eq, LeftParen, RightParen, LeftBrace, RightBrace, LeftBracket, RightBracket, ColonColon, Semicolon, Colon, Comma, Dot, DotDot, DotDotDot, Whitespace,
148 Newline,
149 Comment,
150
151 EndOfStream,
153 Error,
154}