1use crate::lexer::token_type::ElixirTokenType;
2use oak_core::{ElementType, UniversalElementRole};
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8#[repr(u16)]
9pub enum ElixirElementType {
10 Root,
11 Whitespace,
12 Newline,
13 Comment,
14 Identifier,
15 Atom,
16 Variable,
17 Number,
18 Float,
19 String,
20 Character,
21 Sigil,
22
23 After,
24 And,
25 Case,
26 Catch,
27 Cond,
28 Def,
29 Defp,
30 Defmodule,
31 Defstruct,
32 Defprotocol,
33 Defimpl,
34 Defmacro,
35 Defmacrop,
36 Do,
37 Else,
38 Elsif,
39 End,
40 False,
41 Fn,
42 If,
43 In,
44 Not,
45 Or,
46 Receive,
47 Rescue,
48 True,
49 Try,
50 Unless,
51 When,
52 With,
53
54 Plus,
55 Minus,
56 Mul,
57 Div,
58 Dot,
59 Comma,
60 Semicolon,
61 Colon,
62 LeftParen,
63 RightParen,
64 LeftBrace,
65 RightBrace,
66 LeftBracket,
67 RightBracket,
68 Arrow,
69 Pipe,
70
71 ModuleDefinition,
72 FunctionDefinition,
73 CallExpression,
74 BinaryExpression,
75 UnaryExpression,
76 LiteralExpression,
77 IdentifierExpression,
78 AttributeExpression,
79 AccessExpression,
80 ListLiteral,
81 TupleLiteral,
82 MapLiteral,
83 KeywordLiteral,
84 BlockExpression,
85 MatchExpression,
86 At,
87 Percent,
88
89 Error,
90}
91
92impl ElementType for ElixirElementType {
93 type Role = UniversalElementRole;
94
95 fn role(&self) -> Self::Role {
96 match self {
97 Self::Root => UniversalElementRole::Root,
98 Self::Error => UniversalElementRole::Error,
99 _ => UniversalElementRole::None,
100 }
101 }
102}
103
104impl From<ElixirTokenType> for ElixirElementType {
105 fn from(t: ElixirTokenType) -> Self {
106 type T = ElixirTokenType;
107 match t {
108 T::Root => Self::Root,
109 T::Whitespace => Self::Whitespace,
110 T::Newline => Self::Newline,
111 T::Comment => Self::Comment,
112 T::Identifier => Self::Identifier,
113 T::Atom => Self::Atom,
114 T::Variable => Self::Variable,
115 T::Number => Self::Number,
116 T::Float => Self::Float,
117 T::String => Self::String,
118 T::Character => Self::Character,
119 T::Sigil => Self::Sigil,
120 T::After => Self::After,
121 T::And => Self::And,
122 T::Case => Self::Case,
123 T::Catch => Self::Catch,
124 T::Cond => Self::Cond,
125 T::Def => Self::Def,
126 T::Defp => Self::Defp,
127 T::Defmodule => Self::Defmodule,
128 T::Defstruct => Self::Defstruct,
129 T::Defprotocol => Self::Defprotocol,
130 T::Defimpl => Self::Defimpl,
131 T::Defmacro => Self::Defmacro,
132 T::Defmacrop => Self::Defmacrop,
133 T::Do => Self::Do,
134 T::Else => Self::Else,
135 T::Elsif => Self::Elsif,
136 T::End => Self::End,
137 T::False => Self::False,
138 T::Fn => Self::Fn,
139 T::If => Self::If,
140 T::In => Self::In,
141 T::Not => Self::Not,
142 T::Or => Self::Or,
143 T::Receive => Self::Receive,
144 T::Rescue => Self::Rescue,
145 T::True => Self::True,
146 T::Try => Self::Try,
147 T::Unless => Self::Unless,
148 T::When => Self::When,
149 T::With => Self::With,
150 T::Plus => Self::Plus,
151 T::Minus => Self::Minus,
152 T::Mul => Self::Mul,
153 T::Div => Self::Div,
154 T::Dot => Self::Dot,
155 T::Comma => Self::Comma,
156 T::Semicolon => Self::Semicolon,
157 T::Colon => Self::Colon,
158 T::LeftParen => Self::LeftParen,
159 T::RightParen => Self::RightParen,
160 T::LeftBrace => Self::LeftBrace,
161 T::RightBrace => Self::RightBrace,
162 T::LeftBracket => Self::LeftBracket,
163 T::RightBracket => Self::RightBracket,
164 T::Arrow => Self::Arrow,
165 T::Pipe => Self::Pipe,
166
167 T::Eq => Self::MatchExpression,
168 T::EqEq => Self::BinaryExpression,
169 T::Ne => Self::BinaryExpression,
170 T::Lt => Self::BinaryExpression,
171 T::Le => Self::BinaryExpression,
172 T::Gt => Self::BinaryExpression,
173 T::Ge => Self::BinaryExpression,
174 T::AndAnd => Self::BinaryExpression,
175 T::OrOr => Self::BinaryExpression,
176 T::Bang => Self::UnaryExpression,
177 T::Concat => Self::BinaryExpression,
178 T::PlusPlus => Self::BinaryExpression,
179 T::MinusMinus => Self::BinaryExpression,
180 T::Pipeline => Self::BinaryExpression,
181 T::At => Self::At,
182 T::Percent => Self::Percent,
183 T::LeftDoubleBracket => Self::LeftBracket,
184 T::RightDoubleBracket => Self::RightBracket,
185
186 T::Error => Self::Error,
187 }
188 }
189}