diff --git a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/RainbowUpdateNotifyActivity.kt b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/RainbowUpdateNotifyActivity.kt index df4120d..6e7f218 100644 --- a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/RainbowUpdateNotifyActivity.kt +++ b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/RainbowUpdateNotifyActivity.kt @@ -39,7 +39,7 @@ class RainbowUpdateNotifyActivity : StartupActivity { } companion object { - private const val pluginId = "izhangzhihao.rainbow.brackets" + const val pluginId = "izhangzhihao.rainbow.brackets" private val updateContent: String by lazy { diff --git a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/RainbowConfigurable.kt b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/RainbowConfigurable.kt index b7e6562..eaf1645 100644 --- a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/RainbowConfigurable.kt +++ b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/RainbowConfigurable.kt @@ -41,6 +41,7 @@ class RainbowConfigurable : Configurable { settings.useColorGenerator = settingsForm?.useColorGenerator() ?: false settings.rainbowifyTagNameInXML = settingsForm?.rainbowifyTagNameInXML() ?: false settings.doNOTRainbowifyTemplateString = settingsForm?.doNOTRainbowifyTemplateString() ?: false + settings.doNOTRainbowifyBigFiles = settingsForm?.doNOTRainbowifyBigFiles() ?: true } override fun reset() { diff --git a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/RainbowSettings.kt b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/RainbowSettings.kt index 7b4fc15..08563b1 100644 --- a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/RainbowSettings.kt +++ b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/RainbowSettings.kt @@ -38,6 +38,7 @@ class RainbowSettings : PersistentStateComponent<RainbowSettings> { var showNotificationOnUpdate = true var rainbowifyTagNameInXML = false var doNOTRainbowifyTemplateString = false + var doNOTRainbowifyBigFiles = true @Suppress("MemberVisibilityCanBePrivate") var languageBlacklist: Array<String> = arrayOf() diff --git a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/form/RainbowSettingsForm.form b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/form/RainbowSettingsForm.form index 9c9f455..faf8e50 100644 --- a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/form/RainbowSettingsForm.form +++ b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/form/RainbowSettingsForm.form @@ -8,7 +8,7 @@ <properties/> <border type="none"/> <children> - <grid id="fd26e" binding="appearancePanel" layout-manager="GridLayoutManager" row-count="16" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1"> + <grid id="fd26e" binding="appearancePanel" layout-manager="GridLayoutManager" row-count="17" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1"> <margin top="0" left="0" bottom="0" right="0"/> <constraints> <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/> @@ -99,7 +99,7 @@ </component> <component id="9d54" class="javax.swing.JLabel"> <constraints> - <grid row="15" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/> + <grid row="16" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/> </constraints> <properties> <text value="Number of colors "/> @@ -107,7 +107,7 @@ </component> <component id="b2481" class="javax.swing.JTextField" binding="numberOfColors"> <constraints> - <grid row="15" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false"> + <grid row="16" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false"> <preferred-size width="150" height="-1"/> </grid> </constraints> @@ -156,6 +156,14 @@ <text value="Do NOT rainbowify template string"/> </properties> </component> + <component id="454cb" class="javax.swing.JCheckBox" binding="doNOTRainbowifyBigFiles"> + <constraints> + <grid row="15" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/> + </constraints> + <properties> + <text value="Do NOT rainbowify big files"/> + </properties> + </component> </children> </grid> <vspacer id="9e387"> diff --git a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/form/RainbowSettingsForm.kt b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/form/RainbowSettingsForm.kt index 8713b30..dadc159 100644 --- a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/form/RainbowSettingsForm.kt +++ b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/form/RainbowSettingsForm.kt @@ -31,6 +31,8 @@ class RainbowSettingsForm { private var doNOTRainbowifyTemplateString: JCheckBox? = null + private var doNOTRainbowifyBigFiles: JCheckBox? = null + private val settings: RainbowSettings = RainbowSettings.instance fun component(): JComponent? = panel @@ -67,6 +69,8 @@ class RainbowSettingsForm { fun doNOTRainbowifyTemplateString() = doNOTRainbowifyTemplateString?.isSelected + fun doNOTRainbowifyBigFiles() = doNOTRainbowifyBigFiles?.isSelected + val isModified: Boolean get() = (isRainbowEnabled() != settings.isRainbowEnabled || isRainbowAngleBracketsEnabled() != settings.isEnableRainbowAngleBrackets @@ -84,6 +88,7 @@ class RainbowSettingsForm { || useColorGenerator() != settings.useColorGenerator || rainbowifyTagNameInXML() != settings.rainbowifyTagNameInXML || doNOTRainbowifyTemplateString() != settings.doNOTRainbowifyTemplateString + || doNOTRainbowifyBigFiles() != settings.doNOTRainbowifyBigFiles ) init { @@ -107,5 +112,6 @@ class RainbowSettingsForm { useColorGenerator?.isSelected = settings.useColorGenerator rainbowifyTagNameInXML?.isSelected = settings.rainbowifyTagNameInXML doNOTRainbowifyTemplateString?.isSelected = settings.doNOTRainbowifyTemplateString + doNOTRainbowifyBigFiles?.isSelected = settings.doNOTRainbowifyBigFiles } } diff --git a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/visitor/RainbowHighlightVisitor.kt b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/visitor/RainbowHighlightVisitor.kt index 2278d5a..39d574e 100644 --- a/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/visitor/RainbowHighlightVisitor.kt +++ b/src/main/kotlin/com/github/izhangzhihao/rainbow/brackets/visitor/RainbowHighlightVisitor.kt @@ -2,15 +2,20 @@ package com.github.izhangzhihao.rainbow.brackets.visitor import com.github.izhangzhihao.rainbow.brackets.RainbowHighlighter.getHighlightInfo import com.github.izhangzhihao.rainbow.brackets.RainbowInfo +import com.github.izhangzhihao.rainbow.brackets.RainbowUpdateNotifyActivity.Companion.pluginId import com.github.izhangzhihao.rainbow.brackets.settings.RainbowSettings import com.github.izhangzhihao.rainbow.brackets.util.memoizedFileExtension import com.intellij.codeInsight.daemon.impl.HighlightVisitor import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder import com.intellij.ide.plugins.PluginManagerCore +import com.intellij.notification.NotificationDisplayType +import com.intellij.notification.NotificationGroup +import com.intellij.notification.NotificationType import com.intellij.openapi.editor.colors.EditorColorsManager import com.intellij.openapi.extensions.PluginId import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile +import org.jetbrains.kotlin.idea.core.util.getLineCount import java.awt.Color @@ -20,11 +25,33 @@ abstract class RainbowHighlightVisitor : HighlightVisitor { override fun suitableForFile(file: PsiFile): Boolean { return RainbowSettings.instance.isRainbowEnabled && + checkForBigFile(file) && !RainbowSettings.instance.getLanguageBlacklist.contains(file.fileType.name) && !RainbowSettings.instance.getLanguageBlacklist.contains(memoizedFileExtension(file.name)) && fileIsNotHaskellOrIntelliJHaskellPluginNotEnabled(file.fileType.name) } + private fun checkForBigFile(file: PsiFile): Boolean { + if (RainbowSettings.instance.doNOTRainbowifyBigFiles && file.getLineCount() > 1000) { + val group = NotificationGroup( + pluginId, + NotificationDisplayType.BALLOON, + true + ) + + val notification = group.createNotification( + "Rainbowify big files is disabled by default", + "File with line count > 1000 will not rainbowify be default. If you still want to rainbowify it, please config it in <b>Settings > Other Settings > Rainbow Brackets > Do NOT rainbowify big files</b>", + NotificationType.INFORMATION + ) + + notification.notify(file.project) + + return false + } + return true + } + private fun fileIsNotHaskellOrIntelliJHaskellPluginNotEnabled(fileType: String) = fileType != "Haskell" || !isIntelliJHaskellEnabled