clara_shell/token.rs
1use std::fmt::{Debug, Formatter, Result, Display};
2use logos::{Logos};
3
4#[derive(Logos, Debug, PartialEq)]
5pub enum Token<'a> {
6 // Tokens can be literal strings, of any length.
7 // Or regular expressions.
8 #[token("export")]
9 Keyword(&'a str),
10
11 #[regex("[a-zA-Z.=\"]+")]
12 Text(&'a str),
13
14 // Logos requires one token variant to handle errors,
15 // We can also use this variant to define whitespace,
16 // or any other matches we wish to skip.
17 #[error]
18 #[regex(r"[ \t\n\f]+", logos::skip)]
19 Error,
20}
21
22impl<'a> Display for Token<'a> {
23 fn fmt(&self, f: &mut Formatter<'_>) -> Result {
24 write!(f, "{:?}", self)
25 }
26}