1use crate::lexer::token_type::ElixirTokenType;
2use oak_core::{ElementType, UniversalElementRole};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7#[repr(u16)]
8pub enum ElixirElementType {
9 Root,
11 Whitespace,
13 Newline,
15 Comment,
17 Identifier,
19 Atom,
21 Variable,
23 Number,
25 Float,
27 String,
29 Character,
31 Sigil,
33
34 After,
36 And,
38 Case,
40 Catch,
42 Cond,
44 Def,
46 Defp,
48 Defmodule,
50 Defstruct,
52 Defprotocol,
54 Defimpl,
56 Defmacro,
58 Defmacrop,
60 Do,
62 Else,
64 Elsif,
66 End,
68 False,
70 Fn,
72 If,
74 In,
76 Not,
78 Or,
80 Receive,
82 Rescue,
84 True,
86 Try,
88 Unless,
90 When,
92 With,
94
95 Plus,
97 Minus,
99 Mul,
101 Div,
103 Dot,
105 Comma,
107 Semicolon,
109 Colon,
111 LeftParen,
113 RightParen,
115 LeftBrace,
117 RightBrace,
119 LeftBracket,
121 RightBracket,
123 Arrow,
125 Pipe,
127
128 ModuleDefinition,
130 FunctionDefinition,
132 CallExpression,
134 BinaryExpression,
136 UnaryExpression,
138 LiteralExpression,
140 IdentifierExpression,
142 AttributeExpression,
144 AccessExpression,
146 ListLiteral,
148 TupleLiteral,
150 MapLiteral,
152 KeywordLiteral,
154 BlockExpression,
156 MatchExpression,
158 At,
160 Percent,
162
163 Error,
165}
166
167impl ElementType for ElixirElementType {
168 type Role = UniversalElementRole;
169
170 fn role(&self) -> Self::Role {
171 match self {
172 Self::Root => UniversalElementRole::Root,
173 Self::Error => UniversalElementRole::Error,
174 _ => UniversalElementRole::None,
175 }
176 }
177}
178
179impl From<ElixirTokenType> for ElixirElementType {
180 fn from(t: ElixirTokenType) -> Self {
181 type T = ElixirTokenType;
182 match t {
183 T::Root => Self::Root,
184 T::Whitespace => Self::Whitespace,
185 T::Newline => Self::Newline,
186 T::Comment => Self::Comment,
187 T::Identifier => Self::Identifier,
188 T::Atom => Self::Atom,
189 T::Variable => Self::Variable,
190 T::Number => Self::Number,
191 T::Float => Self::Float,
192 T::String => Self::String,
193 T::Character => Self::Character,
194 T::Sigil => Self::Sigil,
195 T::After => Self::After,
196 T::And => Self::And,
197 T::Case => Self::Case,
198 T::Catch => Self::Catch,
199 T::Cond => Self::Cond,
200 T::Def => Self::Def,
201 T::Defp => Self::Defp,
202 T::Defmodule => Self::Defmodule,
203 T::Defstruct => Self::Defstruct,
204 T::Defprotocol => Self::Defprotocol,
205 T::Defimpl => Self::Defimpl,
206 T::Defmacro => Self::Defmacro,
207 T::Defmacrop => Self::Defmacrop,
208 T::Do => Self::Do,
209 T::Else => Self::Else,
210 T::Elsif => Self::Elsif,
211 T::End => Self::End,
212 T::False => Self::False,
213 T::Fn => Self::Fn,
214 T::If => Self::If,
215 T::In => Self::In,
216 T::Not => Self::Not,
217 T::Or => Self::Or,
218 T::Receive => Self::Receive,
219 T::Rescue => Self::Rescue,
220 T::True => Self::True,
221 T::Try => Self::Try,
222 T::Unless => Self::Unless,
223 T::When => Self::When,
224 T::With => Self::With,
225 T::Plus => Self::Plus,
226 T::Minus => Self::Minus,
227 T::Mul => Self::Mul,
228 T::Div => Self::Div,
229 T::Dot => Self::Dot,
230 T::Comma => Self::Comma,
231 T::Semicolon => Self::Semicolon,
232 T::Colon => Self::Colon,
233 T::LeftParen => Self::LeftParen,
234 T::RightParen => Self::RightParen,
235 T::LeftBrace => Self::LeftBrace,
236 T::RightBrace => Self::RightBrace,
237 T::LeftBracket => Self::LeftBracket,
238 T::RightBracket => Self::RightBracket,
239 T::Arrow => Self::Arrow,
240 T::Pipe => Self::Pipe,
241
242 T::Eq => Self::MatchExpression,
243 T::EqEq => Self::BinaryExpression,
244 T::Ne => Self::BinaryExpression,
245 T::Lt => Self::BinaryExpression,
246 T::Le => Self::BinaryExpression,
247 T::Gt => Self::BinaryExpression,
248 T::Ge => Self::BinaryExpression,
249 T::AndAnd => Self::BinaryExpression,
250 T::OrOr => Self::BinaryExpression,
251 T::Bang => Self::UnaryExpression,
252 T::Concat => Self::BinaryExpression,
253 T::PlusPlus => Self::BinaryExpression,
254 T::MinusMinus => Self::BinaryExpression,
255 T::Pipeline => Self::BinaryExpression,
256 T::At => Self::At,
257 T::Percent => Self::Percent,
258 T::LeftDoubleBracket => Self::LeftBracket,
259 T::RightDoubleBracket => Self::RightBracket,
260
261 T::Error => Self::Error,
262 }
263 }
264}