oak_smalltalk/kind/
mod.rs1use oak_core::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5pub enum SmalltalkSyntaxKind {
6 Root,
8 SourceFile,
9 Eof,
10 Error,
11
12 Number,
14 Integer,
15 Float,
16 String,
17 Character,
18 Symbol,
19
20 True,
22 False,
23 Nil,
24 Self_,
25 Super,
26
27 Identifier,
29
30 Plus,
32 Minus,
33 Star,
34 Slash,
35 Percent,
36 Equal,
37 NotEqual,
38 Less,
39 Greater,
40 LessEqual,
41 GreaterEqual,
42
43 LeftParen,
45 RightParen,
46 LeftBracket,
47 RightBracket,
48 LeftBrace,
49 RightBrace,
50 Dot,
51 Semicolon,
52 Comma,
53 Colon,
54 Pipe,
55 Caret,
56
57 Comment,
59
60 Whitespace,
62 Newline,
63}
64
65impl TokenType for SmalltalkSyntaxKind {
66 const END_OF_STREAM: Self = Self::Eof;
67 type Role = UniversalTokenRole;
68
69 fn role(&self) -> Self::Role {
70 match self {
71 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
72 Self::Comment => UniversalTokenRole::Comment,
73 Self::Eof => UniversalTokenRole::Eof,
74 _ => UniversalTokenRole::None,
75 }
76 }
77}
78
79impl ElementType for SmalltalkSyntaxKind {
80 type Role = UniversalElementRole;
81
82 fn role(&self) -> Self::Role {
83 match self {
84 Self::Root | Self::SourceFile => UniversalElementRole::Root,
85 Self::Error => UniversalElementRole::Error,
86 _ => UniversalElementRole::None,
87 }
88 }
89}