1use oak_core::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
4pub enum SchemeSyntaxKind {
5 Whitespace,
7 Newline,
8 Comment,
9
10 LineComment,
12
13 NumberLiteral,
15 StringLiteral,
16 CharacterLiteral,
17 BooleanLiteral,
18
19 Identifier,
21 Symbol,
22
23 Keyword,
25 Define,
26 Lambda,
27 If,
28 Cond,
29 Case,
30 Let,
31 LetStar,
32 Letrec,
33 Begin,
34 Do,
35 Quote,
36 Quasiquote,
37 Unquote,
38 UnquoteSplicing,
39 And,
40 Or,
41 Not,
42 Set,
43
44 LeftParen,
46 RightParen,
47 LeftBracket,
48 RightBracket,
49 LeftBrace,
50 RightBrace,
51 Dot,
52
53 Hash,
55 Quote_,
56 Quasiquote_,
57 Unquote_,
58 UnquoteSplicing_,
59
60 Error,
62 Eof,
63
64 SourceFile,
66}
67
68impl TokenType for SchemeSyntaxKind {
69 const END_OF_STREAM: Self = Self::Eof;
70 type Role = UniversalTokenRole;
71
72 fn role(&self) -> Self::Role {
73 match self {
74 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
75 Self::LineComment => UniversalTokenRole::Comment,
76 Self::Eof => UniversalTokenRole::Eof,
77 _ => UniversalTokenRole::None,
78 }
79 }
80}
81
82impl ElementType for SchemeSyntaxKind {
83 type Role = UniversalElementRole;
84
85 fn role(&self) -> Self::Role {
86 match self {
87 Self::Error => UniversalElementRole::Error,
88 _ => UniversalElementRole::None,
89 }
90 }
91}