oak_tcl/lexer/
token_type.rs1use oak_core::{Source, Token, TokenType, UniversalElementRole, UniversalTokenRole};
2
3pub type TclToken = Token<TclTokenType>;
5
6impl TokenType for TclTokenType {
7 type Role = UniversalTokenRole;
8 const END_OF_STREAM: Self = Self::Error;
9
10 fn is_ignored(&self) -> bool {
11 false
12 }
13
14 fn role(&self) -> Self::Role {
15 match self {
16 _ => UniversalTokenRole::None,
17 }
18 }
19}
20
21#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
23#[repr(u8)]
24#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
25pub enum TclTokenType {
26 Root,
28 Command,
30 Word,
32 SimpleWord,
34 VariableWord,
36 ScriptWord,
38 BracedWord,
40
41 Number,
43 StringLiteral,
45 Identifier,
47
48 If,
50 Else,
52 ElseIf,
54 For,
56 While,
58 ForEach,
60 Proc,
62 Return,
64 Break,
66 Continue,
68 Set,
70 Unset,
72 Global,
74 Upvar,
76 Variable,
78
79 Plus,
81 Minus,
83 Star,
85 Slash,
87 Percent,
89 Equal,
91 NotEqual,
93 Less,
95 Greater,
97 LessEqual,
99 GreaterEqual,
101 Ampersand,
103 AmpersandAmpersand,
105 Pipe,
107 PipePipe,
109 Exclamation,
111
112 LeftParen,
114 RightParen,
116 LeftBracket,
118 RightBracket,
120 LeftBrace,
122 RightBrace,
124 Semicolon,
126 Comma,
128 Dollar,
130
131 Whitespace,
133 Newline,
135 Comment,
137 Error,
139 Eof,
141}
142
143impl From<TclTokenType> for UniversalElementRole {
144 fn from(kind: TclTokenType) -> Self {
145 match kind {
146 TclTokenType::Root => UniversalElementRole::Root,
147 TclTokenType::Command => UniversalElementRole::Expression,
148 TclTokenType::Word | TclTokenType::SimpleWord | TclTokenType::VariableWord | TclTokenType::ScriptWord | TclTokenType::BracedWord => UniversalElementRole::Expression,
149 TclTokenType::Identifier => UniversalElementRole::Name,
150 TclTokenType::Number | TclTokenType::StringLiteral => UniversalElementRole::Value,
151 _ => UniversalElementRole::None,
152 }
153 }
154}
155
156impl From<crate::parser::element_type::TclElementType> for TclTokenType {
157 fn from(element: crate::parser::element_type::TclElementType) -> Self {
158 unsafe { std::mem::transmute(element) }
159 }
160}