Skip to main content

oak_smalltalk/kind/
mod.rs

1use 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    // Special
7    Root,
8    SourceFile,
9    Eof,
10    Error,
11
12    // Literals
13    Number,
14    Integer,
15    Float,
16    String,
17    Character,
18    Symbol,
19
20    // Keywords
21    True,
22    False,
23    Nil,
24    Self_,
25    Super,
26
27    // Identifiers
28    Identifier,
29
30    // Operators
31    Plus,
32    Minus,
33    Star,
34    Slash,
35    Percent,
36    Equal,
37    NotEqual,
38    Less,
39    Greater,
40    LessEqual,
41    GreaterEqual,
42
43    // Delimiters
44    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    // Comments
58    Comment,
59
60    // Whitespace
61    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}