Skip to content

Commit e3f1d6e

Browse files
committed
feat: improve semantic tokens color attributes
Signed-off-by: azerr <azerr@redhat.com>
1 parent 42260d5 commit e3f1d6e

File tree

12 files changed

+161
-47
lines changed

12 files changed

+161
-47
lines changed

docs/LSPSupport.md

Lines changed: 41 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -480,46 +480,47 @@ The following table lists the currently predefined mappings:
480480
* the `DefaultLanguageHighlighterColors` column defines the standard `TextAttributesKey` used by IntelliJ that `SemanticTokensHighlightingColors` inherits.
481481

482482
| Semantic token types | Semantic modifier types | SemanticTokensHighlightingColors | (inherited from) DefaultLanguageHighlighterColors |
483-
|----------------------|------------------------|----------------------------------|---------------------------------------------------|
484-
| namespace | definition | NAMESPACE_DECLARATION | CLASS_NAME |
485-
| namespace | declaration | NAMESPACE_DECLARATION | CLASS_NAME |
486-
| namespace | | NAMESPACE | CLASS_REFERENCE |
487-
| class | definition | CLASS_DECLARATION | CLASS_NAME |
488-
| class | declaration | CLASS_DECLARATION | CLASS_NAME |
489-
| class | | CLASS | CLASS_REFERENCE |
490-
| enum | | ENUM | CLASS_NAME |
491-
| interface | | INTERFACE | INTERFACE_NAME |
492-
| struct | | STRUCT | CLASS_NAME |
493-
| typeParameter | | TYPE_PARAMETER | PARAMETER |
494-
| type | | TYPE | CLASS_NAME |
495-
| parameter | | PARAMETER | PARAMETER |
496-
| variable | static + readonly | STATIC_READONLY_VARIABLE | CONSTANT |
497-
| variable | static | STATIC_VARIABLE | STATIC_FIELD |
498-
| variable | readonly | READONLY_VARIABLE | LOCAL_VARIABLE |
499-
| variable | | VARIABLE | REASSIGNED_LOCAL_VARIABLE |
500-
| property | static + readonly | STATIC_READONLY_PROPERTY | CONSTANT |
501-
| property | static | STATIC_PROPERTY | STATIC_FIELD |
502-
| property | readonly | READONLY_PROPERTY | INSTANCE_FIELD |
503-
| property | | PROPERTY | INSTANCE_FIELD |
504-
| enumMember | | ENUM_MEMBER | STATIC_FIELD |
505-
| decorator | | DECORATOR | METADATA |
506-
| event | | EVENT | PREDEFINED_SYMBOL |
507-
| function | definition | FUNCTION_DECLARATION | FUNCTION_DECLARATION |
508-
| function | declaration | FUNCTION_DECLARATION | FUNCTION_DECLARATION |
509-
| function | | FUNCTION | FUNCTION_CALL |
510-
| method | definition | METHOD_DECLARATION | FUNCTION_DECLARATION |
511-
| method | declaration | METHOD_DECLARATION | FUNCTION_DECLARATION |
512-
| method | static | STATIC_METHOD | STATIC_METHOD |
513-
| method | | METHOD | FUNCTION_CALL |
514-
| macro | | MACRO | KEYWORD |
515-
| label | | LABEL | LABEL |
516-
| comment | | COMMENT | LINE_COMMENT |
517-
| string | | STRING | STRING |
518-
| keyword | | KEYWORD | KEYWORD |
519-
| number | | NUMBER | NUMBER |
520-
| regexp | | REGEXP | VALID_STRING_ESCAPE |
521-
| modifier | | MODIFIER | KEYWORD |
522-
| operator | | OPERATOR | OPERATION_SIGN |
483+
|----------------------|-------------------------|----------------------------------|---------------------------------------------------|
484+
| namespace | definition | NAMESPACE_DECLARATION | CLASS_NAME |
485+
| namespace | declaration | NAMESPACE_DECLARATION | CLASS_NAME |
486+
| namespace | | NAMESPACE | CLASS_REFERENCE |
487+
| class | definition | CLASS_DECLARATION | CLASS_NAME |
488+
| class | declaration | CLASS_DECLARATION | CLASS_NAME |
489+
| class | | CLASS | CLASS_REFERENCE |
490+
| enum | | ENUM | CLASS_NAME |
491+
| interface | | INTERFACE | INTERFACE_NAME |
492+
| struct | | STRUCT | CLASS_NAME |
493+
| typeParameter | | TYPE_PARAMETER | PARAMETER |
494+
| type | | TYPE | CLASS_NAME |
495+
| parameter | | PARAMETER | PARAMETER |
496+
| variable | static + readonly | STATIC_READONLY_VARIABLE | CONSTANT |
497+
| variable | static | STATIC_VARIABLE | STATIC_FIELD |
498+
| variable | readonly | READONLY_VARIABLE | LOCAL_VARIABLE |
499+
| variable | | VARIABLE | REASSIGNED_LOCAL_VARIABLE |
500+
| property | static + readonly | STATIC_READONLY_PROPERTY | CONSTANT |
501+
| property | static | STATIC_PROPERTY | STATIC_FIELD |
502+
| property | readonly | READONLY_PROPERTY | INSTANCE_FIELD |
503+
| property | | PROPERTY | INSTANCE_FIELD |
504+
| enumMember | | ENUM_MEMBER | STATIC_FIELD |
505+
| decorator | | DECORATOR | METADATA |
506+
| event | | EVENT | PREDEFINED_SYMBOL |
507+
| function | defaultLibrary | DEFAULT_LIBRARY_FUNCTION | STATIC_METHOD |
508+
| function | definition | FUNCTION_DECLARATION | FUNCTION_DECLARATION |
509+
| function | declaration | FUNCTION_DECLARATION | FUNCTION_DECLARATION |
510+
| function | | FUNCTION | FUNCTION_CALL |
511+
| method | definition | METHOD_DECLARATION | FUNCTION_DECLARATION |
512+
| method | declaration | METHOD_DECLARATION | FUNCTION_DECLARATION |
513+
| method | static | STATIC_METHOD | STATIC_METHOD |
514+
| method | | METHOD | FUNCTION_CALL |
515+
| macro | | MACRO | KEYWORD |
516+
| label | | LABEL | LABEL |
517+
| comment | | COMMENT | LINE_COMMENT |
518+
| string | | STRING | STRING |
519+
| keyword | | KEYWORD | KEYWORD |
520+
| number | | NUMBER | NUMBER |
521+
| regexp | | REGEXP | VALID_STRING_ESCAPE |
522+
| modifier | | MODIFIER | KEYWORD |
523+
| operator | | OPERATOR | OPERATION_SIGN |
523524

524525
If you need other mapping:
525526

src/main/java/com/redhat/devtools/lsp4ij/features/semanticTokens/DefaultSemanticTokensColorsProvider.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,11 @@ public class DefaultSemanticTokensColorsProvider implements SemanticTokensColors
125125

126126
// function: for identifiers that declare a function.
127127
case SemanticTokenTypes.Function:
128+
if (hasTokenModifiers(tokenModifiers,
129+
SemanticTokenModifiers.DefaultLibrary)) {
130+
// with defaultLibrary modifiers
131+
return SemanticTokensHighlightingColors.DEFAULT_LIBRARY_FUNCTION;
132+
}
128133
if (hasTokenModifiers(tokenModifiers,
129134
SemanticTokenModifiers.Declaration,
130135
SemanticTokenModifiers.Definition)) {

src/main/java/com/redhat/devtools/lsp4ij/features/semanticTokens/SemanticTokensColorSettingsPage.java

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public class SemanticTokensColorSettingsPage implements ColorSettingsPage, Displ
7070
// property
7171
new AttributesDescriptor(LanguageServerBundle.message("options.lsp.attribute.descriptor.property.static"), SemanticTokensHighlightingColors.STATIC_PROPERTY),
7272
new AttributesDescriptor(LanguageServerBundle.message("options.lsp.attribute.descriptor.property.static.readonly"), SemanticTokensHighlightingColors.STATIC_READONLY_PROPERTY),
73-
new AttributesDescriptor(LanguageServerBundle.message("options.lsp.attribute.descriptor.property"), SemanticTokensHighlightingColors.READONLY_PROPERTY),
73+
new AttributesDescriptor(LanguageServerBundle.message("options.lsp.attribute.descriptor.property"), SemanticTokensHighlightingColors.PROPERTY),
7474
new AttributesDescriptor(LanguageServerBundle.message("options.lsp.attribute.descriptor.property.readonly"), SemanticTokensHighlightingColors.READONLY_PROPERTY),
7575

7676
// enumMember
@@ -85,6 +85,7 @@ public class SemanticTokensColorSettingsPage implements ColorSettingsPage, Displ
8585
// function
8686
new AttributesDescriptor(LanguageServerBundle.message("options.lsp.attribute.descriptor.function.call"), SemanticTokensHighlightingColors.FUNCTION),
8787
new AttributesDescriptor(LanguageServerBundle.message("options.lsp.attribute.descriptor.function.declaration"), SemanticTokensHighlightingColors.FUNCTION_DECLARATION),
88+
new AttributesDescriptor(LanguageServerBundle.message("options.lsp.attribute.descriptor.function.defaultLibrary"), SemanticTokensHighlightingColors.DEFAULT_LIBRARY_FUNCTION),
8889

8990
// method
9091
new AttributesDescriptor(LanguageServerBundle.message("options.lsp.attribute.descriptor.method.call"), SemanticTokensHighlightingColors.METHOD),
@@ -141,8 +142,59 @@ public class SemanticTokensColorSettingsPage implements ColorSettingsPage, Displ
141142
@Override
142143
public @NonNls @NotNull String getDemoText() {
143144
return """
144-
public class <LSP_CLASS_DECLARATION>SomeClass</LSP_CLASS_DECLARATION><<typeParameter>T</typeParameter> extends <interface>Runnable</interface>> { // some comment
145+
<LSP_COMMENT>// Here is a Java sample</LSP_COMMENT>
146+
package <LSP_NAMESPACE>com</LSP_NAMESPACE>;
147+
148+
<LSP_DECORATOR>@Deprecated</LSP_DECORATOR>(since = <LSP_STRING>"1.0.0"</LSP_STRING>)
149+
<LSP_MODIFIER>public</LSP_MODIFIER> <LSP_MODIFIER>class</LSP_MODIFIER> <LSP_CLASS_DECLARATION>Bar</LSP_CLASS_DECLARATION><<LSP_TYPE_PARAMETER>T</LSP_TYPE_PARAMETER> extends <LSP_INTERFACE>Runnable</LSP_INTERFACE>> {
150+
151+
<LSP_MODIFIER>private</LSP_MODIFIER> <LSP_MODIFIER>static</LSP_MODIFIER> <LSP_MODIFIER>final</LSP_MODIFIER> int <LSP_STATIC_READONLY_PROPERTY>CONSTANT</LSP_STATIC_READONLY_PROPERTY> = <LSP_NUMBER>1234</LSP_NUMBER>;
152+
<LSP_MODIFIER>private</LSP_MODIFIER> <LSP_MODIFIER>static</LSP_MODIFIER> int <LSP_STATIC_PROPERTY>GLOBAL</LSP_STATIC_PROPERTY>;
153+
<LSP_MODIFIER>private</LSP_MODIFIER> <LSP_MODIFIER>final</LSP_MODIFIER> int <LSP_READONLY_PROPERTY>readOnlyField</LSP_READONLY_PROPERTY> = <LSP_NUMBER>5678</LSP_NUMBER>;
154+
<LSP_MODIFIER>private</LSP_MODIFIER> int <LSP_PROPERTY>field</LSP_PROPERTY>;
155+
156+
<LSP_MODIFIER>public</LSP_MODIFIER> int <LSP_METHOD_DECLARATION>someMethod</LSP_METHOD_DECLARATION>() {
157+
<LSP_CLASS>var</LSP_CLASS> <LSP_VARIABLE>bar</LSP_VARIABLE> = new <LSP_CLASS>Bar</LSP_CLASS><?>();
158+
<LSP_STATIC_METHOD>staticMethod</LSP_STATIC_METHOD>();
159+
<LSP_METHOD>someMethod</LSP_METHOD>();
160+
<LSP_KEYWORD>return</LSP_KEYWORD> <LSP_NUMBER>1</LSP_NUMBER> <LSP_OPERATOR>+</LSP_OPERATOR> <LSP_NUMBER>2</LSP_NUMBER> <LSP_OPERATOR>+</LSP_OPERATOR> <LSP_PROPERTY>field</LSP_PROPERTY>;
161+
}
162+
163+
<LSP_MODIFIER>public</LSP_MODIFIER> <LSP_MODIFIER>static</LSP_MODIFIER> <LSP_CLASS>String</LSP_CLASS> <LSP_METHOD_DECLARATION>staticMethod</LSP_METHOD_DECLARATION>() {
164+
<LSP_KEYWORD>return</LSP_KEYWORD> <LSP_STRING>"foo"</LSP_STRING>;
165+
}
145166
}
167+
168+
<LSP_COMMENT>// Here is a TypeScript sample</LSP_COMMENT>
169+
<LSP_KEYWORD>function</LSP_KEYWORD> <LSP_FUNCTION_DECLARATION>foo</LSP_FUNCTION_DECLARATION>() {
170+
<LSP_DEFAULT_LIBRARY_FUNCTION>print</LSP_DEFAULT_LIBRARY_FUNCTION>(<LSP_STRING>"bar"</LSP_STRING>)
171+
}
172+
173+
<LSP_COMMENT>// Here is a Go sample</LSP_COMMENT>
174+
<LSP_KEYWORD>package</LSP_KEYWORD> <LSP_NAMESPACE>src</LSP_NAMESPACE>
175+
176+
<LSP_KEYWORD>import</LSP_KEYWORD> (
177+
"<LSP_NAMESPACE>fmt</LSP_NAMESPACE>"
178+
)
179+
180+
<LSP_KEYWORD>func</LSP_KEYWORD> <LSP_FUNCTION_DECLARATION>foo</LSP_FUNCTION_DECLARATION>() {
181+
<LSP_KEYWORD>const</LSP_KEYWORD> <LSP_READONLY_VARIABLE>s</LSP_READONLY_VARIABLE> = <LSP_STRING>""</LSP_STRING>;
182+
<LSP_NAMESPACE>fmt</LSP_NAMESPACE>.<LSP_FUNCTION>Printf</LSP_FUNCTION>(<LSP_STRING>"s: %v\\n"</LSP_STRING>, <LSP_READONLY_VARIABLE>s</LSP_READONLY_VARIABLE>)
183+
}
184+
185+
<LSP_COMMENT>;; Here is a Clojure sample</LSP_COMMENT>
186+
187+
(<LSP_MACRO>defn</LSP_MACRO> <LSP_FUNCTION_DECLARATION>my-zipmap</LSP_FUNCTION_DECLARATION> [<LSP_VARIABLE>keys</LSP_VARIABLE> <LSP_VARIABLE>vals</LSP_VARIABLE>]
188+
(<LSP_MACRO>loop</LSP_MACRO> [<LSP_VARIABLE>my-map</LSP_VARIABLE> {}
189+
<LSP_VARIABLE>my-keys</LSP_VARIABLE> (<LSP_FUNCTION>seq</LSP_FUNCTION> <LSP_VARIABLE>keys</LSP_VARIABLE>)
190+
<LSP_VARIABLE>my-vals</LSP_VARIABLE> (<LSP_FUNCTION>seq</LSP_FUNCTION> <LSP_VARIABLE>vals</LSP_VARIABLE>)]
191+
(<LSP_FUNCTION>if</LSP_FUNCTION> (<LSP_MACRO>and</LSP_MACRO> <LSP_VARIABLE>my-keys</LSP_VARIABLE> <LSP_VARIABLE>my-vals</LSP_VARIABLE>)
192+
(<LSP_FUNCTION>recur</LSP_FUNCTION> (<LSP_FUNCTION>assoc</LSP_FUNCTION> <LSP_VARIABLE>my-map</LSP_VARIABLE> (<LSP_FUNCTION>first</LSP_FUNCTION> <LSP_VARIABLE>my-keys</LSP_VARIABLE>) (<LSP_FUNCTION>first</LSP_FUNCTION> <LSP_VARIABLE>my-vals</LSP_VARIABLE>))
193+
(<LSP_FUNCTION>next</LSP_FUNCTION> <LSP_VARIABLE>my-keys</LSP_VARIABLE>)
194+
(<LSP_FUNCTION>next</LSP_FUNCTION> <LSP_VARIABLE>my-vals</LSP_VARIABLE>))
195+
<LSP_VARIABLE>my-map</LSP_VARIABLE>)))
196+
(<LSP_FUNCTION>my-zipmap</LSP_FUNCTION> [:<LSP_KEYWORD>a</LSP_KEYWORD> :<LSP_KEYWORD>b</LSP_KEYWORD> :<LSP_KEYWORD>c</LSP_KEYWORD>] [1 2 3])
197+
<LSP_MACRO>-></LSP_MACRO> {:<LSP_KEYWORD>b</LSP_KEYWORD> 2, :<LSP_KEYWORD>c</LSP_KEYWORD> 3, :<LSP_KEYWORD>a</LSP_KEYWORD> 1}
146198
""";
147199
}
148200

src/main/java/com/redhat/devtools/lsp4ij/features/semanticTokens/SemanticTokensHighlightingColors.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public class SemanticTokensHighlightingColors {
6868
// function
6969
public static final TextAttributesKey FUNCTION = TextAttributesKey.createTextAttributesKey("LSP_FUNCTION", DefaultLanguageHighlighterColors.FUNCTION_CALL);
7070
public static final TextAttributesKey FUNCTION_DECLARATION = TextAttributesKey.createTextAttributesKey("LSP_FUNCTION_DECLARATION", DefaultLanguageHighlighterColors.FUNCTION_DECLARATION);
71+
public static final TextAttributesKey DEFAULT_LIBRARY_FUNCTION = TextAttributesKey.createTextAttributesKey("LSP_DEFAULT_LIBRARY_FUNCTION", DefaultLanguageHighlighterColors.STATIC_METHOD);
7172

7273
// method
7374
public static final TextAttributesKey METHOD = TextAttributesKey.createTextAttributesKey("LSP_METHOD", DefaultLanguageHighlighterColors.FUNCTION_CALL);

0 commit comments

Comments
 (0)