oak_vala/parser/
element_type.rs1use crate::lexer::token_type::ValaTokenType;
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(u8)]
9pub enum ValaElementType {
10 SourceFile,
11 Root,
12 Namespace,
13 Class,
14 Interface,
15 Struct,
16 Enum,
17 Method,
18 Field,
19 Property,
20 Parameter,
21 Block,
22 Statement,
23 Expression,
24 Type,
25 Error,
26
27 Token(ValaTokenType),
29}
30
31impl From<ValaTokenType> for ValaElementType {
32 fn from(token: ValaTokenType) -> Self {
33 Self::Token(token)
34 }
35}
36
37impl ElementType for ValaElementType {
38 type Role = UniversalElementRole;
39
40 fn is_root(&self) -> bool {
41 matches!(self, Self::SourceFile | Self::Root)
42 }
43
44 fn is_error(&self) -> bool {
45 matches!(self, Self::Error)
46 }
47
48 fn role(&self) -> Self::Role {
49 match self {
50 Self::SourceFile | Self::Root => UniversalElementRole::Root,
51 Self::Namespace | Self::Class | Self::Interface | Self::Struct | Self::Enum | Self::Method | Self::Field | Self::Property => UniversalElementRole::Definition,
52 Self::Block | Self::Parameter => UniversalElementRole::Container,
53 Self::Statement => UniversalElementRole::Statement,
54 Self::Expression | Self::Type => UniversalElementRole::Expression,
55 Self::Error => UniversalElementRole::Error,
56 Self::Token(_) => UniversalElementRole::None,
57 }
58 }
59}
60
61impl oak_core::language::TokenType for ValaElementType {
62 type Role = oak_core::UniversalTokenRole;
63 const END_OF_STREAM: Self = Self::Token(ValaTokenType::Eof);
64
65 fn is_ignored(&self) -> bool {
66 match self {
67 Self::Token(t) => {
68 use oak_core::TokenType;
69 t.is_ignored()
70 }
71 _ => false,
72 }
73 }
74
75 fn role(&self) -> Self::Role {
76 match self {
77 Self::Token(t) => {
78 use oak_core::TokenType;
79 t.role()
80 }
81 _ => oak_core::UniversalTokenRole::None,
82 }
83 }
84}