1#[derive(Debug, Clone, PartialEq)]
5pub enum Token {
6 Let,
8 Mut,
9 Const,
10 Fn,
11 Return,
12 If,
13 Else,
14 While,
15 For,
16 In,
17 Break,
18 Continue,
19 Match,
20 Type,
21 Record,
22 Trait,
23 Impl,
24 Import,
25 Module,
26 Pub,
27 Async,
28 Await,
29 Extern,
30 Unsafe,
31 True,
32 False,
33 As,
34 Is,
35 Where,
36 With,
37 SelfLower,
38 SelfUpper,
39
40 LParen,
42 RParen,
43 LBracket,
44 RBracket,
45 LBrace,
46 RBrace,
47 Comma,
48 Semicolon,
49 Colon,
50 ColonColon,
51 Arrow,
52 FatArrow,
53 Dot,
54 DotDot,
55 DotDotEq,
56 At,
57 Question,
58
59 Eq,
61 EqEq,
62 BangEq,
63 Lt,
64 LtEq,
65 Gt,
66 GtEq,
67 AmpAmp,
68 PipePipe,
69 Bang,
70
71 Plus,
73 Minus,
74 Star,
75 Slash,
76 Percent,
77 PlusEq,
78 MinusEq,
79 StarEq,
80 SlashEq,
81 PercentEq,
82
83 Amp,
85 Pipe,
86 Caret,
87 Tilde,
88 LtLt,
89 GtGt,
90 AmpEq,
91 PipeEq,
92 CaretEq,
93 LtLtEq,
94 GtGtEq,
95
96 Int(i64),
98 Float(f64),
99 Char(char),
100
101 StrStart,
104 StrPart(String),
106 StrEnd,
108 InterpOpen,
110 InterpClose,
112 RawStr(String),
114
115 Ident(String),
117 DocComment(String),
119
120 Eof,
122}
123
124impl Token {
125 pub fn description(&self) -> &str {
127 match self {
128 Token::Let => "`let`",
129 Token::Mut => "`mut`",
130 Token::Const => "`const`",
131 Token::Fn => "`fn`",
132 Token::Return => "`return`",
133 Token::If => "`if`",
134 Token::Else => "`else`",
135 Token::While => "`while`",
136 Token::For => "`for`",
137 Token::In => "`in`",
138 Token::Break => "`break`",
139 Token::Continue => "`continue`",
140 Token::Match => "`match`",
141 Token::Type => "`type`",
142 Token::Record => "`record`",
143 Token::Trait => "`trait`",
144 Token::Impl => "`impl`",
145 Token::Import => "`import`",
146 Token::Module => "`module`",
147 Token::Pub => "`pub`",
148 Token::Async => "`async`",
149 Token::Await => "`await`",
150 Token::Extern => "`extern`",
151 Token::Unsafe => "`unsafe`",
152 Token::True => "`true`",
153 Token::False => "`false`",
154 Token::As => "`as`",
155 Token::Is => "`is`",
156 Token::Where => "`where`",
157 Token::With => "`with`",
158 Token::SelfLower => "`self`",
159 Token::SelfUpper => "`Self`",
160 Token::LParen => "`(`",
161 Token::RParen => "`)`",
162 Token::LBracket => "`[`",
163 Token::RBracket => "`]`",
164 Token::LBrace => "`{`",
165 Token::RBrace => "`}`",
166 Token::Comma => "`,`",
167 Token::Semicolon => "`;`",
168 Token::Colon => "`:`",
169 Token::ColonColon => "`::`",
170 Token::Arrow => "`->`",
171 Token::FatArrow => "`=>`",
172 Token::Dot => "`.`",
173 Token::DotDot => "`..`",
174 Token::DotDotEq => "`..=`",
175 Token::At => "`@`",
176 Token::Question => "`?`",
177 Token::Eq => "`=`",
178 Token::EqEq => "`==`",
179 Token::BangEq => "`!=`",
180 Token::Lt => "`<`",
181 Token::LtEq => "`<=`",
182 Token::Gt => "`>`",
183 Token::GtEq => "`>=`",
184 Token::AmpAmp => "`&&`",
185 Token::PipePipe => "`||`",
186 Token::Bang => "`!`",
187 Token::Plus => "`+`",
188 Token::Minus => "`-`",
189 Token::Star => "`*`",
190 Token::Slash => "`/`",
191 Token::Percent => "`%`",
192 Token::PlusEq => "`+=`",
193 Token::MinusEq => "`-=`",
194 Token::StarEq => "`*=`",
195 Token::SlashEq => "`/=`",
196 Token::PercentEq => "`%=`",
197 Token::Amp => "`&`",
198 Token::Pipe => "`|`",
199 Token::Caret => "`^`",
200 Token::Tilde => "`~`",
201 Token::LtLt => "`<<`",
202 Token::GtGt => "`>>`",
203 Token::AmpEq => "`&=`",
204 Token::PipeEq => "`|=`",
205 Token::CaretEq => "`^=`",
206 Token::LtLtEq => "`<<=`",
207 Token::GtGtEq => "`>>=`",
208 Token::Int(_) => "integer literal",
209 Token::Float(_) => "float literal",
210 Token::Char(_) => "char literal",
211 Token::StrStart => "`\"`",
212 Token::StrPart(_) => "string segment",
213 Token::StrEnd => "`\"`",
214 Token::InterpOpen => "`${`",
215 Token::InterpClose => "`}`",
216 Token::RawStr(_) => "raw string literal",
217 Token::Ident(_) => "identifier",
218 Token::DocComment(_) => "doc comment",
219 Token::Eof => "end of file",
220 }
221 }
222}