1use oak_core::{ElementType, Token, TokenType, UniversalElementRole, UniversalTokenRole};
2
3pub type DotToken = Token<DotSyntaxKind>;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
7pub enum DotSyntaxKind {
8 Identifier,
10 String,
11 Number,
12 Whitespace,
13 Newline,
14
15 Graph,
17 Digraph,
18 Subgraph,
19 Node,
20 Edge,
21 Strict,
22
23 Arrow, Line, Equal, Semicolon, Comma, LeftBrace, RightBrace, LeftBracket, RightBracket, LeftParen, RightParen, Comment,
40
41 Root,
43 Error,
44 Eof,
45}
46
47impl TokenType for DotSyntaxKind {
48 const END_OF_STREAM: Self = Self::Eof;
49 type Role = UniversalTokenRole;
50
51 fn role(&self) -> Self::Role {
52 match self {
53 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
54 Self::Comment => UniversalTokenRole::Comment,
55 Self::Eof => UniversalTokenRole::Eof,
56 Self::Graph | Self::Digraph | Self::Subgraph | Self::Node | Self::Edge | Self::Strict => UniversalTokenRole::Keyword,
57 Self::Identifier => UniversalTokenRole::Name,
58 Self::String => UniversalTokenRole::Literal,
59 Self::Number => UniversalTokenRole::Literal,
60 Self::Arrow | Self::Line | Self::Equal => UniversalTokenRole::Operator,
61 Self::Semicolon | Self::Comma | Self::LeftBrace | Self::RightBrace | Self::LeftBracket | Self::RightBracket | Self::LeftParen | Self::RightParen => UniversalTokenRole::Punctuation,
62 _ => UniversalTokenRole::None,
63 }
64 }
65
66 fn is_comment(&self) -> bool {
67 matches!(self, Self::Comment)
68 }
69
70 fn is_whitespace(&self) -> bool {
71 matches!(self, Self::Whitespace | Self::Newline)
72 }
73}
74
75impl ElementType for DotSyntaxKind {
76 type Role = UniversalElementRole;
77
78 fn role(&self) -> Self::Role {
79 match self {
80 Self::Root => UniversalElementRole::Root,
81 Self::Error => UniversalElementRole::Error,
82 _ => UniversalElementRole::None,
83 }
84 }
85
86 fn is_error(&self) -> bool {
87 matches!(self, Self::Error)
88 }
89}