emmylua_parser/kind/
mod.rs1mod lua_language_level;
2mod lua_non_std_symbol;
3mod lua_operator_kind;
4mod lua_syntax_kind;
5mod lua_token_kind;
6mod lua_type_operator_kind;
7mod lua_version;
8mod lua_visibility_kind;
9
10pub use lua_language_level::LuaLanguageLevel;
11pub use lua_non_std_symbol::{LuaNonStdSymbol, LuaNonStdSymbolSet};
12pub use lua_operator_kind::{BinaryOperator, UNARY_PRIORITY, UnaryOperator};
13pub use lua_syntax_kind::LuaSyntaxKind;
14pub use lua_token_kind::LuaTokenKind;
15pub use lua_type_operator_kind::{
16 LuaTypeBinaryOperator, LuaTypeTernaryOperator, LuaTypeUnaryOperator, UNARY_TYPE_PRIORITY,
17};
18pub use lua_version::{LuaVersionCondition, LuaVersionNumber};
19pub use lua_visibility_kind::VisibilityKind;
20
21#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
22#[repr(u16)]
23pub enum LuaKind {
24 Syntax(LuaSyntaxKind),
25 Token(LuaTokenKind),
26}
27
28impl From<LuaSyntaxKind> for LuaKind {
29 fn from(kind: LuaSyntaxKind) -> Self {
30 LuaKind::Syntax(kind)
31 }
32}
33
34impl From<LuaTokenKind> for LuaKind {
35 fn from(kind: LuaTokenKind) -> Self {
36 LuaKind::Token(kind)
37 }
38}
39
40impl From<LuaKind> for LuaSyntaxKind {
41 fn from(val: LuaKind) -> Self {
42 match val {
43 LuaKind::Syntax(kind) => kind,
44 _ => LuaSyntaxKind::None,
45 }
46 }
47}
48
49impl From<LuaKind> for LuaTokenKind {
50 fn from(val: LuaKind) -> Self {
51 match val {
52 LuaKind::Token(kind) => kind,
53 _ => LuaTokenKind::None,
54 }
55 }
56}
57
58impl LuaKind {
59 pub fn is_syntax(self) -> bool {
60 matches!(self, LuaKind::Syntax(_))
61 }
62
63 pub fn is_token(self) -> bool {
64 matches!(self, LuaKind::Token(_))
65 }
66
67 pub fn to_syntax(self) -> LuaSyntaxKind {
68 match self {
69 LuaKind::Syntax(kind) => kind,
70 LuaKind::Token(_) => LuaSyntaxKind::None,
71 }
72 }
73
74 pub fn to_token(self) -> LuaTokenKind {
75 match self {
76 LuaKind::Token(kind) => kind,
77 LuaKind::Syntax(_) => LuaTokenKind::None,
78 }
79 }
80
81 pub fn get_raw(self) -> u16 {
82 match self {
83 LuaKind::Syntax(kind) => kind as u16 | 0x8000,
84 LuaKind::Token(kind) => kind as u16,
85 }
86 }
87
88 pub fn from_raw(raw: u16) -> LuaKind {
89 if raw & 0x8000 != 0 {
90 LuaKind::Syntax(unsafe { std::mem::transmute::<u16, LuaSyntaxKind>(raw & 0x7FFF) })
91 } else {
92 LuaKind::Token(unsafe { std::mem::transmute::<u16, LuaTokenKind>(raw) })
93 }
94 }
95}
96
97#[derive(Debug)]
98pub struct PriorityTable {
99 pub left: i32,
100 pub right: i32,
101}
102
103#[derive(Debug, PartialEq)]
104pub enum LuaOpKind {
105 None,
106 Unary(UnaryOperator),
107 Binary(BinaryOperator),
108 TypeUnary(LuaTypeUnaryOperator),
109 TypeBinary(LuaTypeBinaryOperator),
110 TypeTernary(LuaTypeTernaryOperator),
111}
112
113impl From<UnaryOperator> for LuaOpKind {
114 fn from(op: UnaryOperator) -> Self {
115 LuaOpKind::Unary(op)
116 }
117}
118
119impl From<BinaryOperator> for LuaOpKind {
120 fn from(op: BinaryOperator) -> Self {
121 LuaOpKind::Binary(op)
122 }
123}
124
125impl From<LuaTypeUnaryOperator> for LuaOpKind {
126 fn from(op: LuaTypeUnaryOperator) -> Self {
127 LuaOpKind::TypeUnary(op)
128 }
129}
130
131impl From<LuaTypeBinaryOperator> for LuaOpKind {
132 fn from(op: LuaTypeBinaryOperator) -> Self {
133 LuaOpKind::TypeBinary(op)
134 }
135}
136
137impl From<LuaTypeTernaryOperator> for LuaOpKind {
138 fn from(op: LuaTypeTernaryOperator) -> Self {
139 LuaOpKind::TypeTernary(op)
140 }
141}
142
143impl LuaOpKind {
144 pub fn to_unary_operator(kind: LuaTokenKind) -> UnaryOperator {
145 match kind {
146 LuaTokenKind::TkNot => UnaryOperator::OpNot,
147 LuaTokenKind::TkLen => UnaryOperator::OpLen,
148 LuaTokenKind::TkMinus => UnaryOperator::OpUnm,
149 LuaTokenKind::TkBitXor => UnaryOperator::OpBNot,
150 _ => UnaryOperator::OpNop,
151 }
152 }
153
154 pub fn to_binary_operator(kind: LuaTokenKind) -> BinaryOperator {
155 match kind {
156 LuaTokenKind::TkPlus => BinaryOperator::OpAdd,
157 LuaTokenKind::TkMinus => BinaryOperator::OpSub,
158 LuaTokenKind::TkMul => BinaryOperator::OpMul,
159 LuaTokenKind::TkMod => BinaryOperator::OpMod,
160 LuaTokenKind::TkPow => BinaryOperator::OpPow,
161 LuaTokenKind::TkDiv => BinaryOperator::OpDiv,
162 LuaTokenKind::TkIDiv => BinaryOperator::OpIDiv,
163 LuaTokenKind::TkBitAnd => BinaryOperator::OpBAnd,
164 LuaTokenKind::TkBitOr => BinaryOperator::OpBOr,
165 LuaTokenKind::TkBitXor => BinaryOperator::OpBXor,
166 LuaTokenKind::TkShl => BinaryOperator::OpShl,
167 LuaTokenKind::TkShr => BinaryOperator::OpShr,
168 LuaTokenKind::TkConcat => BinaryOperator::OpConcat,
169 LuaTokenKind::TkLt => BinaryOperator::OpLt,
170 LuaTokenKind::TkLe => BinaryOperator::OpLe,
171 LuaTokenKind::TkGt => BinaryOperator::OpGt,
172 LuaTokenKind::TkGe => BinaryOperator::OpGe,
173 LuaTokenKind::TkEq => BinaryOperator::OpEq,
174 LuaTokenKind::TkNe => BinaryOperator::OpNe,
175 LuaTokenKind::TkAnd => BinaryOperator::OpAnd,
176 LuaTokenKind::TkOr => BinaryOperator::OpOr,
177 _ => BinaryOperator::OpNop,
178 }
179 }
180
181 pub fn to_type_unary_operator(kind: LuaTokenKind) -> LuaTypeUnaryOperator {
182 match kind {
183 LuaTokenKind::TkDocKeyOf => LuaTypeUnaryOperator::Keyof,
184 LuaTokenKind::TkMinus => LuaTypeUnaryOperator::Neg,
185 _ => LuaTypeUnaryOperator::None,
186 }
187 }
188
189 pub fn to_parse_binary_operator(kind: LuaTokenKind) -> LuaTypeBinaryOperator {
190 match kind {
191 LuaTokenKind::TkDocOr => LuaTypeBinaryOperator::Union,
192 LuaTokenKind::TkDocAnd => LuaTypeBinaryOperator::Intersection,
193 LuaTokenKind::TkIn => LuaTypeBinaryOperator::In,
194 LuaTokenKind::TkDocExtends => LuaTypeBinaryOperator::Extends,
195 LuaTokenKind::TkPlus => LuaTypeBinaryOperator::Add,
196 LuaTokenKind::TkMinus => LuaTypeBinaryOperator::Sub,
197 _ => LuaTypeBinaryOperator::None,
198 }
199 }
200
201 pub fn to_type_binary_operator(kind: LuaTokenKind) -> LuaTypeBinaryOperator {
202 match kind {
203 LuaTokenKind::TkDocOr | LuaTokenKind::TkDocContinueOr => LuaTypeBinaryOperator::Union,
204 LuaTokenKind::TkDocAnd => LuaTypeBinaryOperator::Intersection,
205 LuaTokenKind::TkIn => LuaTypeBinaryOperator::In,
206 LuaTokenKind::TkDocExtends => LuaTypeBinaryOperator::Extends,
207 LuaTokenKind::TkPlus => LuaTypeBinaryOperator::Add,
208 LuaTokenKind::TkMinus => LuaTypeBinaryOperator::Sub,
209 _ => LuaTypeBinaryOperator::None,
210 }
211 }
212}