emmylua_parser/kind/
lua_non_std_symbol.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
2#[repr(u64)]
3pub enum LuaNonStdSymbol {
4    DoubleSlash = 1,   // "//"
5    SlashStar,         // "/**/"
6    Backtick,          // "`"
7    PlusAssign,        // "+="
8    MinusAssign,       // "-="
9    StarAssign,        // "*="
10    SlashAssign,       // "/="
11    PercentAssign,     // "%="
12    CaretAssign,       // "^="
13    DoubleSlashAssign, // "//="
14    PipeAssign,        // "|="
15    AmpAssign,         // "&="
16    ShiftLeftAssign,   // "<<="
17    ShiftRightAssign,  // ">>="
18    DoublePipe,        // "||"
19    DoubleAmp,         // "&&"
20    Exclamation,       // "!"
21    NotEqual,          // "!="
22    Continue,          // "continue"
23}
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq)]
26pub struct LuaNonStdSymbolSet(u64);
27
28impl Default for LuaNonStdSymbolSet {
29    fn default() -> Self {
30        Self::new()
31    }
32}
33
34impl LuaNonStdSymbolSet {
35    pub fn new() -> Self {
36        LuaNonStdSymbolSet(0)
37    }
38
39    pub fn add(&mut self, symbol: LuaNonStdSymbol) {
40        self.0 |= 1 << (symbol as u64);
41    }
42
43    pub fn extends(&mut self, other: Vec<LuaNonStdSymbol>) {
44        for symbol in other {
45            self.add(symbol);
46        }
47    }
48
49    pub fn support(&self, symbol: LuaNonStdSymbol) -> bool {
50        self.0 & (1 << (symbol as u64)) != 0
51    }
52}