1
0
mirror of https://github.com/chylex/IntelliJ-Rainbow-Brackets.git synced 2025-05-04 10:34:03 +02:00

Fix :Disable rainbowify on big files(>1000 lines for now)

(cherry picked from commit 4bc3010ba224bfc7a10a1d1a72e6d1999df769fd)
This commit is contained in:
张志豪 2021-01-30 19:02:48 +08:00
parent ea1bc6ba6f
commit 2fe50bf08a
6 changed files with 47 additions and 4 deletions

View File

@ -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 {

View File

@ -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() {

View File

@ -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()

View File

@ -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">

View File

@ -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
}
}

View File

@ -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