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