Skip to main content

oak_java/lsp/highlighter/
mod.rs

1#![doc = include_str!("readme.md")]
2use crate::JavaTokenType;
3
4/// 高亮类型的本地定义
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub enum HighlightKind {
7    /// 关键字
8    Keyword,
9    /// 字面量
10    Literal,
11    /// 标识符
12    Identifier,
13    /// 注释
14    Comment,
15    /// 运算符
16    Operator,
17    /// 标点符号
18    Punctuation,
19    /// 函数/方法
20    Function,
21    /// 类型/类
22    Type,
23}
24
25pub struct JavaHighlighter;
26
27impl JavaHighlighter {
28    pub fn highlight(&self, kind: JavaTokenType) -> Option<HighlightKind> {
29        match kind {
30            JavaTokenType::Abstract
31            | JavaTokenType::Assert
32            | JavaTokenType::Boolean
33            | JavaTokenType::Break
34            | JavaTokenType::Byte
35            | JavaTokenType::Case
36            | JavaTokenType::Catch
37            | JavaTokenType::Char
38            | JavaTokenType::Class
39            | JavaTokenType::Const
40            | JavaTokenType::Continue
41            | JavaTokenType::Default
42            | JavaTokenType::Do
43            | JavaTokenType::Double
44            | JavaTokenType::Else
45            | JavaTokenType::Enum
46            | JavaTokenType::Extends
47            | JavaTokenType::Final
48            | JavaTokenType::Finally
49            | JavaTokenType::Float
50            | JavaTokenType::For
51            | JavaTokenType::If
52            | JavaTokenType::Goto
53            | JavaTokenType::Implements
54            | JavaTokenType::Import
55            | JavaTokenType::Instanceof
56            | JavaTokenType::Int
57            | JavaTokenType::Interface
58            | JavaTokenType::Long
59            | JavaTokenType::Native
60            | JavaTokenType::New
61            | JavaTokenType::Package
62            | JavaTokenType::Private
63            | JavaTokenType::Protected
64            | JavaTokenType::Public
65            | JavaTokenType::Return
66            | JavaTokenType::Short
67            | JavaTokenType::Static
68            | JavaTokenType::Strictfp
69            | JavaTokenType::Super
70            | JavaTokenType::Switch
71            | JavaTokenType::Synchronized
72            | JavaTokenType::This
73            | JavaTokenType::Throw
74            | JavaTokenType::Throws
75            | JavaTokenType::Transient
76            | JavaTokenType::Try
77            | JavaTokenType::Void
78            | JavaTokenType::Volatile
79            | JavaTokenType::While => Some(HighlightKind::Keyword),
80
81            JavaTokenType::IntegerLiteral | JavaTokenType::FloatingPointLiteral | JavaTokenType::BooleanLiteral | JavaTokenType::CharacterLiteral | JavaTokenType::StringLiteral | JavaTokenType::NullLiteral => Some(HighlightKind::Literal),
82
83            JavaTokenType::Identifier => Some(HighlightKind::Identifier),
84
85            JavaTokenType::LineComment | JavaTokenType::BlockComment => Some(HighlightKind::Comment),
86
87            JavaTokenType::Assign
88            | JavaTokenType::GreaterThan
89            | JavaTokenType::LessThan
90            | JavaTokenType::Bang
91            | JavaTokenType::Tilde
92            | JavaTokenType::Question
93            | JavaTokenType::Colon
94            | JavaTokenType::Equals
95            | JavaTokenType::LessThanEquals
96            | JavaTokenType::GreaterThanEquals
97            | JavaTokenType::BangEquals
98            | JavaTokenType::AmpersandAmpersand
99            | JavaTokenType::PipePipe
100            | JavaTokenType::PlusPlus
101            | JavaTokenType::MinusMinus
102            | JavaTokenType::Plus
103            | JavaTokenType::Minus
104            | JavaTokenType::Asterisk
105            | JavaTokenType::Slash
106            | JavaTokenType::Ampersand
107            | JavaTokenType::Pipe
108            | JavaTokenType::Caret
109            | JavaTokenType::Percent
110            | JavaTokenType::LeftShift
111            | JavaTokenType::RightShift
112            | JavaTokenType::UnsignedRightShift
113            | JavaTokenType::PlusEquals
114            | JavaTokenType::MinusEquals
115            | JavaTokenType::AsteriskEquals
116            | JavaTokenType::SlashEquals
117            | JavaTokenType::AmpersandEquals
118            | JavaTokenType::PipeEquals
119            | JavaTokenType::CaretEquals
120            | JavaTokenType::PercentEquals
121            | JavaTokenType::LeftShiftEquals
122            | JavaTokenType::RightShiftEquals
123            | JavaTokenType::UnsignedRightShiftEquals => Some(HighlightKind::Operator),
124
125            JavaTokenType::LeftParen
126            | JavaTokenType::RightParen
127            | JavaTokenType::LeftBrace
128            | JavaTokenType::RightBrace
129            | JavaTokenType::LeftBracket
130            | JavaTokenType::RightBracket
131            | JavaTokenType::Semicolon
132            | JavaTokenType::Comma
133            | JavaTokenType::Dot
134            | JavaTokenType::Ellipsis
135            | JavaTokenType::At
136            | JavaTokenType::DoubleColon => Some(HighlightKind::Punctuation),
137
138            _ => None,
139        }
140    }
141}