From 3a42498c8dee4f7d6d30ae6ae874c0ed7cf34044 Mon Sep 17 00:00:00 2001 From: Dmitry Zhuravlev Date: Thu, 16 May 2019 20:20:25 +0300 Subject: [PATCH] vcs-ignore: add default highlighter for ignore language GitOrigin-RevId: 5a85a71c14013b1c37e22e9cba0e3a5d1e822aa4 --- .../src/componentSets/VCS.xml | 3 + .../lang/IgnoreLanguageHighlighter.java | 70 +++++++++++++++++++ .../IgnoreLanguageHighlighterFactory.java | 40 +++++++++++ 3 files changed, 113 insertions(+) create mode 100644 platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ignore/lang/IgnoreLanguageHighlighter.java create mode 100644 platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ignore/lang/IgnoreLanguageHighlighterFactory.java diff --git a/platform/platform-resources/src/componentSets/VCS.xml b/platform/platform-resources/src/componentSets/VCS.xml index ca0fa2893af1..cb33f38cf23b 100644 --- a/platform/platform-resources/src/componentSets/VCS.xml +++ b/platform/platform-resources/src/componentSets/VCS.xml @@ -99,6 +99,9 @@ + + + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package com.intellij.openapi.vcs.changes.ignore.lang; + +import com.intellij.lexer.Lexer; +import com.intellij.openapi.editor.DefaultLanguageHighlighterColors; +import com.intellij.openapi.editor.colors.TextAttributesKey; +import com.intellij.openapi.fileTypes.SyntaxHighlighterBase; +import com.intellij.openapi.vcs.changes.ignore.lexer.IgnoreLexerAdapter; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.tree.IElementType; +import com.intellij.util.containers.hash.HashMap; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Map; + +/** + * Syntax highlighter definition for {@link IgnoreLanguage}. + */ +public class IgnoreLanguageHighlighter extends SyntaxHighlighterBase { + + @Nullable + private final VirtualFile currentHighlightedFile; + + private static final Map ATTRIBUTES = new HashMap<>(); + + /* Binds parser definitions with highlighter colors. */ + static { + SyntaxHighlighterBase.fillMap(ATTRIBUTES, IgnoreParserDefinition.COMMENTS, DefaultLanguageHighlighterColors.LINE_COMMENT); + } + + public IgnoreLanguageHighlighter(@Nullable VirtualFile currentHighlightedFile) { + this.currentHighlightedFile = currentHighlightedFile; + } + + @NotNull + @Override + public Lexer getHighlightingLexer() { + return new IgnoreLexerAdapter(currentHighlightedFile); + } + + @NotNull + @Override + public TextAttributesKey[] getTokenHighlights(IElementType tokenType) { + return pack(ATTRIBUTES.get(tokenType)); + } +} diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ignore/lang/IgnoreLanguageHighlighterFactory.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ignore/lang/IgnoreLanguageHighlighterFactory.java new file mode 100644 index 000000000000..5d7e38ee88b4 --- /dev/null +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ignore/lang/IgnoreLanguageHighlighterFactory.java @@ -0,0 +1,40 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2018 hsz Jakub Chrzanowski + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package com.intellij.openapi.vcs.changes.ignore.lang; + +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 IgnoreLanguageHighlighterFactory extends SyntaxHighlighterFactory { + @NotNull + @Override + public SyntaxHighlighter getSyntaxHighlighter(@Nullable Project project, @Nullable VirtualFile virtualFile) { + return new IgnoreLanguageHighlighter(virtualFile); + } +}