Skip to main content

oak_elixir/parser/
element_type.rs

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}