#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Span {
pub start: usize,
pub end: usize,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Token {
pub kind: TokenKind,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub enum TokenKind {
Word(Word),
AndAnd,
OrOr,
Pipe,
Semi,
RedirectOut {
stderr: bool,
append: bool,
},
RedirectIn,
StderrToStdout,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Word {
pub parts: Vec<WordPart>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub enum WordPart {
Text(String),
Escaped(char),
SingleQuoted(String),
DoubleQuoted(Vec<WordPart>),
Var(String),
LastExit,
CmdSubst {
source: String,
span: Span,
},
}