feat(zon): Simple syntax highlighting
This commit is contained in:
parent
3f4bc3d550
commit
6385be94dc
4 changed files with 88 additions and 0 deletions
|
@ -22,6 +22,7 @@ Changelog structure reference:
|
||||||
|
|
||||||
#### Zon
|
#### Zon
|
||||||
- Basic parser and PSI tree
|
- Basic parser and PSI tree
|
||||||
|
- Basic syntax highlighting
|
||||||
|
|
||||||
## [0.4.0]
|
## [0.4.0]
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
package com.falsepattern.zigbrains.zon.highlight;
|
||||||
|
|
||||||
|
import com.falsepattern.zigbrains.zon.lexer.ZonLexerAdapter;
|
||||||
|
import com.falsepattern.zigbrains.zon.psi.ZonTypes;
|
||||||
|
import com.intellij.lexer.Lexer;
|
||||||
|
import com.intellij.openapi.editor.DefaultLanguageHighlighterColors;
|
||||||
|
import com.intellij.openapi.editor.HighlighterColors;
|
||||||
|
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||||
|
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
|
||||||
|
import com.intellij.psi.TokenType;
|
||||||
|
import com.intellij.psi.tree.IElementType;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class ZonSyntaxHighlighter extends SyntaxHighlighterBase {
|
||||||
|
// @formatter: off
|
||||||
|
public static final TextAttributesKey
|
||||||
|
EQ = createKey("EQ" , DefaultLanguageHighlighterColors.OPERATION_SIGN),
|
||||||
|
ID = createKey("ID" , DefaultLanguageHighlighterColors.INSTANCE_FIELD),
|
||||||
|
COMMENT = createKey("COMMENT" , DefaultLanguageHighlighterColors.LINE_COMMENT ),
|
||||||
|
BAD_CHAR = createKey("BAD_CHARACTER", HighlighterColors.BAD_CHARACTER ),
|
||||||
|
STRING = createKey("STRING" , DefaultLanguageHighlighterColors.STRING ),
|
||||||
|
COMMA = createKey("COMMA" , DefaultLanguageHighlighterColors.COMMA ),
|
||||||
|
DOT = createKey("DOT" , DefaultLanguageHighlighterColors.DOT ),
|
||||||
|
BRACE = createKey("BRACE" , DefaultLanguageHighlighterColors.BRACES );
|
||||||
|
// @formatter: on
|
||||||
|
|
||||||
|
private static final TextAttributesKey[] EMPTY_KEYS = new TextAttributesKey[0];
|
||||||
|
private static final Map<IElementType, TextAttributesKey[]> KEYMAP = new HashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
// @formatter: off
|
||||||
|
addMapping(DOT , ZonTypes.DOT);
|
||||||
|
addMapping(COMMA , ZonTypes.COMMA);
|
||||||
|
addMapping(BRACE , ZonTypes.LBRACE);
|
||||||
|
addMapping(BRACE , ZonTypes.RBRACE);
|
||||||
|
addMapping(STRING , ZonTypes.LINE_STRING, ZonTypes.STRING_LITERAL_SINGLE);
|
||||||
|
addMapping(BAD_CHAR, TokenType.BAD_CHARACTER);
|
||||||
|
addMapping(COMMENT , ZonTypes.COMMENT);
|
||||||
|
addMapping(ID , ZonTypes.ID);
|
||||||
|
addMapping(EQ , ZonTypes.EQ);
|
||||||
|
// @formatter: on
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addMapping(TextAttributesKey key, IElementType... types) {
|
||||||
|
for (var type: types) {
|
||||||
|
KEYMAP.put(type, new TextAttributesKey[]{key});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static TextAttributesKey createKey(String name, TextAttributesKey fallback) {
|
||||||
|
return TextAttributesKey.createTextAttributesKey("ZON_" + name, fallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Lexer getHighlightingLexer() {
|
||||||
|
return new ZonLexerAdapter();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TextAttributesKey @NotNull [] getTokenHighlights(IElementType tokenType) {
|
||||||
|
if (KEYMAP.containsKey(tokenType)) {
|
||||||
|
return KEYMAP.get(tokenType);
|
||||||
|
}
|
||||||
|
return EMPTY_KEYS;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.falsepattern.zigbrains.zon.highlight;
|
||||||
|
|
||||||
|
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
|
||||||
|
import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory;
|
||||||
|
import com.intellij.openapi.project.Project;
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
public class ZonSyntaxHighlighterFactory extends SyntaxHighlighterFactory {
|
||||||
|
@Override
|
||||||
|
public @NotNull SyntaxHighlighter getSyntaxHighlighter(@Nullable Project project, @Nullable VirtualFile virtualFile) {
|
||||||
|
return new ZonSyntaxHighlighter();
|
||||||
|
}
|
||||||
|
}
|
|
@ -88,6 +88,9 @@
|
||||||
|
|
||||||
<lang.parserDefinition language="Zon"
|
<lang.parserDefinition language="Zon"
|
||||||
implementationClass="com.falsepattern.zigbrains.zon.parser.ZonParserDefinition"/>
|
implementationClass="com.falsepattern.zigbrains.zon.parser.ZonParserDefinition"/>
|
||||||
|
|
||||||
|
<lang.syntaxHighlighterFactory language="Zon"
|
||||||
|
implementationClass="com.falsepattern.zigbrains.zon.highlight.ZonSyntaxHighlighterFactory"/>
|
||||||
<!-- endregion Zon -->
|
<!-- endregion Zon -->
|
||||||
|
|
||||||
</extensions>
|
</extensions>
|
||||||
|
|
Loading…
Add table
Reference in a new issue