Skip to main content

oak_scala/kind/
mod.rs

1use oak_core::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
2use serde::{Deserialize, Serialize};
3
4/// 统一Scala 语法种类(包含节点与词法单元)
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub enum ScalaSyntaxKind {
7    // 节点种类
8    SourceFile,
9
10    // 基础词法种类
11    Whitespace,
12    Newline,
13    Error,
14    Eof,
15    ErrorNode,
16
17    // 标识符和字面量
18    Identifier,
19    IntegerLiteral,
20    FloatLiteral,
21    StringLiteral,
22    CharLiteral,
23    BooleanLiteral,
24
25    // 关键字
26    Abstract,
27    Case,
28    Catch,
29    Class,
30    Def,
31    Do,
32    Else,
33    Extends,
34    False,
35    Final,
36    Finally,
37    For,
38    ForSome,
39    If,
40    Implicit,
41    Import,
42    Lazy,
43    Match,
44    New,
45    Null,
46    Object,
47    Override,
48    Package,
49    Private,
50    Protected,
51    Return,
52    Sealed,
53    Super,
54    This,
55    Throw,
56    Trait,
57    Try,
58    True,
59    Type,
60    Val,
61    Var,
62    While,
63    With,
64    Yield,
65
66    // 操作符
67    Plus,         // +
68    Minus,        // -
69    Star,         // *
70    Slash,        // /
71    Percent,      // %
72    Eq,           // =
73    EqEq,         // ==
74    Ne,           // !=
75    Lt,           // <
76    Le,           // <=
77    Gt,           // >
78    Ge,           // >=
79    LessEqual,    // <=
80    GreaterEqual, // >=
81    EqualEqual,   // ==
82    NotEqual,     // !=
83    And,          // &
84    Or,           // |
85    Xor,          // ^
86    AndAnd,       // &&
87    OrOr,         // ||
88    Not,          // !
89    Tilde,        // ~
90    LShift,       // <<
91    RShift,       // >>
92    URShift,      // >>>
93    PlusEq,       // +=
94    MinusEq,      // -=
95    StarEq,       // *=
96    SlashEq,      // /=
97    PercentEq,    // %=
98    AndEq,        // &=
99    OrEq,         // |=
100    XorEq,        // ^=
101    LShiftEq,     // <<=
102    RShiftEq,     // >>=
103    URShiftEq,    // >>>=
104    Arrow,        // =>
105    LeftArrow,    // <-
106    Colon,        // :
107    ColonColon,   // ::
108    Semicolon,    // ;
109    Dot,          // .
110    Comma,        // ,
111    Question,     // ?
112    At,           // @
113    Hash,         // #
114
115    // 分隔符
116    LeftParen,    // (
117    RightParen,   // )
118    LeftBracket,  // [
119    RightBracket, // ]
120    LeftBrace,    // {
121    RightBrace,   // }
122
123    // 注释
124    LineComment,
125    BlockComment,
126    DocComment,
127}
128
129impl TokenType for ScalaSyntaxKind {
130    const END_OF_STREAM: Self = Self::Eof;
131    type Role = UniversalTokenRole;
132
133    fn role(&self) -> Self::Role {
134        match self {
135            Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
136            Self::LineComment | Self::BlockComment | Self::DocComment => UniversalTokenRole::Comment,
137            Self::Eof => UniversalTokenRole::Eof,
138            _ => UniversalTokenRole::None,
139        }
140    }
141}
142
143impl ElementType for ScalaSyntaxKind {
144    type Role = UniversalElementRole;
145
146    fn role(&self) -> Self::Role {
147        match self {
148            Self::SourceFile => UniversalElementRole::Root,
149            Self::Error | Self::ErrorNode => UniversalElementRole::Error,
150            _ => UniversalElementRole::None,
151        }
152    }
153}