1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
use std::fmt::{Display, Error, Formatter};
#[derive(PartialEq, Clone, Debug)]
/// Punctuation
pub enum Punctuator {
    /// `+`
    Add,
    /// `&`
    And,
    /// `=>`
    Arrow,
    /// `=`
    Assign,
    /// `+=`
    AssignAdd,
    /// `&=`
    AssignAnd,
    /// `/=`
    AssignDiv,
    /// `<<=`
    AssignLeftSh,
    /// `%=`
    AssignMod,
    /// `*=`
    AssignMul,
    /// `|=`
    AssignOr,
    /// `**=`
    AssignPow,
    /// `>>=`
    AssignRightSh,
    /// `-=`
    AssignSub,
    /// `>>>=`
    AssignURightSh,
    /// `^=`
    AssignXor,
    /// `&&`
    BoolAnd,
    /// `||`
    BoolOr,
    /// `}`
    CloseBlock,
    /// `]`
    CloseBracket,
    /// `)`
    CloseParen,
    /// `:`
    Colon,
    /// `,`
    Comma,
    /// `--`
    Dec,
    /// `/`
    Div,
    /// `.`
    Dot,
    /// `==`
    Eq,
    /// `>`
    GreaterThan,
    /// `>=`
    GreaterThanOrEq,
    /// `++`
    Inc,
    /// `<<`
    LeftSh,
    /// `<`
    LessThan,
    /// `<=`
    LessThanOrEq,
    /// `%`
    Mod,
    /// `*`
    Mul,
    /// `~`
    Neg,
    /// `!`
    Not,
    /// `!=`
    NotEq,
    /// `{`
    OpenBlock,
    /// `[`
    OpenBracket,
    /// `(`
    OpenParen,
    /// `|`
    Or,
    /// `**`
    Pow,
    /// `?`
    Question,
    /// `>>`
    RightSh,
    /// `;`
    Semicolon,
    /// `...`
    Spread,
    /// `===`
    StrictEq,
    /// `!==`
    StrictNotEq,
    /// `-`
    Sub,
    /// `>>>`
    URightSh,
    /// `^`
    Xor,
}
impl Display for Punctuator {
    fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
        write!(
            f,
            "{}",
            match self {
                Punctuator::Add => "+",
                Punctuator::And => "&",
                Punctuator::Arrow => "=>",
                Punctuator::Assign => "=",
                Punctuator::AssignAdd => "+=",
                Punctuator::AssignAnd => "&=",
                Punctuator::AssignDiv => "/=",
                Punctuator::AssignLeftSh => "<<=",
                Punctuator::AssignMod => "%=",
                Punctuator::AssignMul => "*=",
                Punctuator::AssignOr => "|=",
                Punctuator::AssignPow => "**=",
                Punctuator::AssignRightSh => ">>=",
                Punctuator::AssignSub => "-=",
                Punctuator::AssignURightSh => ">>>=",
                Punctuator::AssignXor => "^=",
                Punctuator::BoolAnd => "&&",
                Punctuator::BoolOr => "||",
                Punctuator::CloseBlock => "}",
                Punctuator::CloseBracket => "]",
                Punctuator::CloseParen => ")",
                Punctuator::Colon => ":",
                Punctuator::Comma => ",",
                Punctuator::Dec => "--",
                Punctuator::Div => "/",
                Punctuator::Dot => ".",
                Punctuator::Eq => "==",
                Punctuator::GreaterThan => ">",
                Punctuator::GreaterThanOrEq => ">=",
                Punctuator::Inc => "++",
                Punctuator::LeftSh => "<<",
                Punctuator::LessThan => "<",
                Punctuator::LessThanOrEq => "<=",
                Punctuator::Mod => "%",
                Punctuator::Mul => "*",
                Punctuator::Neg => "~",
                Punctuator::Not => "!",
                Punctuator::NotEq => "!=",
                Punctuator::OpenBlock => "{",
                Punctuator::OpenBracket => "[",
                Punctuator::OpenParen => "(",
                Punctuator::Or => "|",
                Punctuator::Pow => "**",
                Punctuator::Question => "?",
                Punctuator::RightSh => ">>",
                Punctuator::Semicolon => ";",
                Punctuator::Spread => "...",
                Punctuator::StrictEq => "===",
                Punctuator::StrictNotEq => "!==",
                Punctuator::Sub => "-",
                Punctuator::URightSh => ">>>",
                Punctuator::Xor => "^",
            }
        )
    }
}