1use std::fmt;
2
3#[derive(PartialEq)]
7pub struct Span {
8 start: usize,
9 end: usize,
10}
11
12impl Span {
13 pub fn new(start: usize, end: usize) -> Self {
14 Self { start, end }
15 }
16}
17
18impl fmt::Debug for Span {
19 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20 write!(f, "{}..{}", self.start, self.end)
21 }
22}
23
24#[derive(Debug, PartialEq)]
25pub struct Spanned<T>(T, Span);
26
27impl<T> Spanned<T> {
28 pub fn new(token: T, span: Span) -> Self {
29 Self(token, span)
30 }
31
32 pub fn token(&self) -> &T {
33 &self.0
34 }
35}
36#[derive(Debug, PartialEq)]
40pub enum RedirOp {
41 Clobber,
43 DGreat,
45 DLess,
47 DLessDash,
49 Great,
51 GreatAnd,
53 Less,
55 LessAnd,
57 LessGreat,
59 TLess,
61}
62#[derive(Debug, PartialEq)]
66pub enum ControlOp {
67 And,
69 AndIf,
71 DSemi,
73 Newline,
75 Or,
77 OrAnd,
79 OrIf,
81 Semi,
83}
84