Skip to main content

oak_java/lsp/highlighter/
mod.rs

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