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}