mirror of
https://github.com/chylex/IntelliJ-Rainbow-Brackets.git
synced 2026-06-14 16:02:29 +02:00
Compare commits
1 Commits
493f97d4d6
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
2d111782c2
|
@@ -1,6 +1,7 @@
|
|||||||
package com.chylex.intellij.coloredbrackets
|
package com.chylex.intellij.coloredbrackets
|
||||||
|
|
||||||
import com.chylex.intellij.coloredbrackets.settings.RainbowSettings
|
import com.chylex.intellij.coloredbrackets.settings.RainbowSettings
|
||||||
|
import com.chylex.intellij.coloredbrackets.util.alphaBlend
|
||||||
import com.chylex.intellij.coloredbrackets.util.create
|
import com.chylex.intellij.coloredbrackets.util.create
|
||||||
import com.chylex.intellij.coloredbrackets.util.memoize
|
import com.chylex.intellij.coloredbrackets.util.memoize
|
||||||
import com.intellij.codeInsight.daemon.impl.HighlightInfo
|
import com.intellij.codeInsight.daemon.impl.HighlightInfo
|
||||||
@@ -56,6 +57,9 @@ object RainbowHighlighter {
|
|||||||
createRainbowAttributesKeys(KEY_ANGLE_BRACKETS, settings.numberOfColors)
|
createRainbowAttributesKeys(KEY_ANGLE_BRACKETS, settings.numberOfColors)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val SCOPE_HIGHLIGHTING_KEY = TextAttributesKey.createTempTextAttributesKey("ColoredBrackets:ScopeHighlighting", TextAttributes.ERASE_MARKER)
|
||||||
|
private val SCOPE_OUTSIDE_HIGHLIGHTING_KEY = TextAttributesKey.createTempTextAttributesKey("ColoredBrackets:ScopeOutsideHighlighting", TextAttributes.ERASE_MARKER)
|
||||||
|
|
||||||
private val rainbowElement: HighlightInfoType = HighlightInfoType
|
private val rainbowElement: HighlightInfoType = HighlightInfoType
|
||||||
.HighlightInfoTypeImpl(HighlightSeverity.INFORMATION, DefaultLanguageHighlighterColors.CONSTANT)
|
.HighlightInfoTypeImpl(HighlightSeverity.INFORMATION, DefaultLanguageHighlighterColors.CONSTANT)
|
||||||
|
|
||||||
@@ -226,4 +230,23 @@ object RainbowHighlighter {
|
|||||||
private fun EditorColorsScheme.setInherited(key: TextAttributesKey, inherited: Boolean) {
|
private fun EditorColorsScheme.setInherited(key: TextAttributesKey, inherited: Boolean) {
|
||||||
setAttributes(key, if (inherited) AbstractColorsScheme.INHERITED_ATTRS_MARKER else TextAttributes())
|
setAttributes(key, if (inherited) AbstractColorsScheme.INHERITED_ATTRS_MARKER else TextAttributes())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun updateScopeHighlightingAttributes(scheme: EditorColorsScheme, rainbowInfo: RainbowInfo): TextAttributesKey {
|
||||||
|
val defaultBackground = EditorColorsManager.getInstance().globalScheme.defaultBackground
|
||||||
|
val background = rainbowInfo.color.alphaBlend(defaultBackground, 0.2f)
|
||||||
|
val attributes = TextAttributes(null, background, rainbowInfo.color, EffectType.BOXED, Font.PLAIN)
|
||||||
|
|
||||||
|
scheme.setAttributes(SCOPE_HIGHLIGHTING_KEY, attributes)
|
||||||
|
return SCOPE_HIGHLIGHTING_KEY
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateScopeOutsideHighlightingAttributes(scheme: EditorColorsScheme): TextAttributesKey {
|
||||||
|
val defaultBackground = scheme.defaultBackground
|
||||||
|
val background = Color.GRAY.alphaBlend(defaultBackground, 0.05f)
|
||||||
|
val foreground = Color.GRAY.alphaBlend(defaultBackground, 0.55f)
|
||||||
|
val attributes = TextAttributes(foreground, background, background, EffectType.BOXED, Font.PLAIN)
|
||||||
|
|
||||||
|
scheme.setAttributes(SCOPE_OUTSIDE_HIGHLIGHTING_KEY, attributes)
|
||||||
|
return SCOPE_OUTSIDE_HIGHLIGHTING_KEY
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ abstract class AbstractScopeHighlightingAction : AnAction() {
|
|||||||
val offset = editor.caretModel.offset
|
val offset = editor.caretModel.offset
|
||||||
val rainbowInfo = psiFile.findRainbowInfoAt(offset) ?: return
|
val rainbowInfo = psiFile.findRainbowInfoAt(offset) ?: return
|
||||||
val highlightManager = HighlightManager.getInstance(project)
|
val highlightManager = HighlightManager.getInstance(project)
|
||||||
val highlighters = editor.addHighlighter(highlightManager, rainbowInfo)
|
val highlighters = editor.addHighlighter(editor, highlightManager, rainbowInfo)
|
||||||
|
|
||||||
editor.highlightingDisposer?.dispose()
|
editor.highlightingDisposer?.dispose()
|
||||||
if (highlighters.isNotEmpty()) {
|
if (highlighters.isNotEmpty()) {
|
||||||
@@ -47,6 +47,7 @@ abstract class AbstractScopeHighlightingAction : AnAction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected abstract fun Editor.addHighlighter(
|
protected abstract fun Editor.addHighlighter(
|
||||||
|
editor: Editor,
|
||||||
highlightManager: HighlightManager,
|
highlightManager: HighlightManager,
|
||||||
rainbowInfo: RainbowInfo,
|
rainbowInfo: RainbowInfo,
|
||||||
): Collection<RangeHighlighter>
|
): Collection<RangeHighlighter>
|
||||||
|
|||||||
@@ -1,38 +1,33 @@
|
|||||||
package com.chylex.intellij.coloredbrackets.action
|
package com.chylex.intellij.coloredbrackets.action
|
||||||
|
|
||||||
|
import com.chylex.intellij.coloredbrackets.RainbowHighlighter
|
||||||
import com.chylex.intellij.coloredbrackets.RainbowInfo
|
import com.chylex.intellij.coloredbrackets.RainbowInfo
|
||||||
import com.chylex.intellij.coloredbrackets.settings.RainbowSettings
|
import com.chylex.intellij.coloredbrackets.settings.RainbowSettings
|
||||||
import com.chylex.intellij.coloredbrackets.util.alphaBlend
|
|
||||||
import com.intellij.codeInsight.highlighting.HighlightManager
|
import com.intellij.codeInsight.highlighting.HighlightManager
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.editor.colors.EditorColorsManager
|
|
||||||
import com.intellij.openapi.editor.markup.EffectType
|
|
||||||
import com.intellij.openapi.editor.markup.RangeHighlighter
|
import com.intellij.openapi.editor.markup.RangeHighlighter
|
||||||
import com.intellij.openapi.editor.markup.TextAttributes
|
|
||||||
import java.awt.Font
|
|
||||||
import java.util.LinkedList
|
import java.util.LinkedList
|
||||||
|
|
||||||
class ScopeHighlightingAction : AbstractScopeHighlightingAction() {
|
class ScopeHighlightingAction : AbstractScopeHighlightingAction() {
|
||||||
|
|
||||||
override fun Editor.addHighlighter(
|
override fun Editor.addHighlighter(
|
||||||
|
editor: Editor,
|
||||||
highlightManager: HighlightManager,
|
highlightManager: HighlightManager,
|
||||||
rainbowInfo: RainbowInfo,
|
rainbowInfo: RainbowInfo,
|
||||||
): Collection<RangeHighlighter> {
|
): Collection<RangeHighlighter> {
|
||||||
val defaultBackground = EditorColorsManager.getInstance().globalScheme.defaultBackground
|
val attributesKey = RainbowHighlighter.updateScopeHighlightingAttributes(editor.colorsScheme, rainbowInfo)
|
||||||
val background = rainbowInfo.color.alphaBlend(defaultBackground, 0.2f)
|
|
||||||
val attributes = TextAttributes(null, background, rainbowInfo.color, EffectType.BOXED, Font.PLAIN)
|
|
||||||
val highlighters = LinkedList<RangeHighlighter>()
|
val highlighters = LinkedList<RangeHighlighter>()
|
||||||
|
|
||||||
highlightManager.addRangeHighlight(
|
highlightManager.addRangeHighlight(
|
||||||
this,
|
this,
|
||||||
rainbowInfo.startOffset,
|
rainbowInfo.startOffset,
|
||||||
rainbowInfo.endOffset,
|
rainbowInfo.endOffset,
|
||||||
attributes, //create("ScopeHighlightingAction", attributes),
|
attributesKey,
|
||||||
false, //hideByTextChange
|
false,
|
||||||
RainbowSettings.instance.pressAnyKeyToRemoveTheHighlightingEffects, //hideByAnyKey
|
RainbowSettings.instance.pressAnyKeyToRemoveTheHighlightingEffects,
|
||||||
highlighters
|
highlighters
|
||||||
)
|
)
|
||||||
|
|
||||||
return highlighters
|
return highlighters
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,21 @@
|
|||||||
package com.chylex.intellij.coloredbrackets.action
|
package com.chylex.intellij.coloredbrackets.action
|
||||||
|
|
||||||
|
import com.chylex.intellij.coloredbrackets.RainbowHighlighter
|
||||||
import com.chylex.intellij.coloredbrackets.RainbowInfo
|
import com.chylex.intellij.coloredbrackets.RainbowInfo
|
||||||
import com.chylex.intellij.coloredbrackets.settings.RainbowSettings
|
import com.chylex.intellij.coloredbrackets.settings.RainbowSettings
|
||||||
import com.chylex.intellij.coloredbrackets.util.alphaBlend
|
|
||||||
import com.intellij.codeInsight.highlighting.HighlightManager
|
import com.intellij.codeInsight.highlighting.HighlightManager
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.editor.colors.EditorColorsManager
|
|
||||||
import com.intellij.openapi.editor.markup.EffectType
|
|
||||||
import com.intellij.openapi.editor.markup.RangeHighlighter
|
import com.intellij.openapi.editor.markup.RangeHighlighter
|
||||||
import com.intellij.openapi.editor.markup.TextAttributes
|
|
||||||
import java.awt.Color
|
|
||||||
import java.awt.Font
|
|
||||||
import java.util.LinkedList
|
import java.util.LinkedList
|
||||||
|
|
||||||
class ScopeOutsideHighlightingRestrainAction : AbstractScopeHighlightingAction() {
|
class ScopeOutsideHighlightingRestrainAction : AbstractScopeHighlightingAction() {
|
||||||
|
|
||||||
override fun Editor.addHighlighter(
|
override fun Editor.addHighlighter(
|
||||||
|
editor: Editor,
|
||||||
highlightManager: HighlightManager,
|
highlightManager: HighlightManager,
|
||||||
rainbowInfo: RainbowInfo,
|
rainbowInfo: RainbowInfo,
|
||||||
): Collection<RangeHighlighter> {
|
): Collection<RangeHighlighter> {
|
||||||
val defaultBackground = EditorColorsManager.getInstance().globalScheme.defaultBackground
|
val attributesKey = RainbowHighlighter.updateScopeOutsideHighlightingAttributes(editor.colorsScheme)
|
||||||
val background = Color.GRAY.alphaBlend(defaultBackground, 0.05f)
|
|
||||||
val foreground = Color.GRAY.alphaBlend(defaultBackground, 0.55f)
|
|
||||||
val attributes = TextAttributes(foreground, background, background, EffectType.BOXED, Font.PLAIN)
|
|
||||||
val highlighters = LinkedList<RangeHighlighter>()
|
val highlighters = LinkedList<RangeHighlighter>()
|
||||||
|
|
||||||
val startOffset = rainbowInfo.startOffset
|
val startOffset = rainbowInfo.startOffset
|
||||||
@@ -33,9 +26,9 @@ class ScopeOutsideHighlightingRestrainAction : AbstractScopeHighlightingAction()
|
|||||||
this,
|
this,
|
||||||
0,
|
0,
|
||||||
startOffset,
|
startOffset,
|
||||||
attributes, //create("ScopeOutsideHighlightingRestrainAction", attributes),
|
attributesKey,
|
||||||
false, //hideByTextChange
|
false,
|
||||||
hideByAnyKey, //hideByAnyKey
|
hideByAnyKey,
|
||||||
highlighters
|
highlighters
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -47,14 +40,13 @@ class ScopeOutsideHighlightingRestrainAction : AbstractScopeHighlightingAction()
|
|||||||
this,
|
this,
|
||||||
endOffset,
|
endOffset,
|
||||||
lastOffset,
|
lastOffset,
|
||||||
attributes, //create("ScopeOutsideHighlightingRestrainAction", attributes),
|
attributesKey,
|
||||||
false, //hideByTextChange
|
false,
|
||||||
hideByAnyKey, //hideByAnyKey
|
hideByAnyKey,
|
||||||
highlighters
|
highlighters
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return highlighters
|
return highlighters
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class RainbowIndentsPass internal constructor(
|
|||||||
|
|
||||||
override fun doCollectInformation(progress: ProgressIndicator) {
|
override fun doCollectInformation(progress: ProgressIndicator) {
|
||||||
val stamp = myEditor.getUserData(LAST_TIME_INDENTS_BUILT)
|
val stamp = myEditor.getUserData(LAST_TIME_INDENTS_BUILT)
|
||||||
if (stamp != null && stamp.toLong() == nowStamp()) return
|
if (stamp != null && stamp == nowStamp()) return
|
||||||
|
|
||||||
myDescriptors = buildDescriptors()
|
myDescriptors = buildDescriptors()
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class RainbowConfigurable : SearchableConfigurable {
|
|||||||
settings.rainbowifyPythonKeywords = settingsForm?.rainbowifyPythonKeywords() ?: false
|
settings.rainbowifyPythonKeywords = settingsForm?.rainbowifyPythonKeywords() ?: false
|
||||||
|
|
||||||
ProjectManager.getInstanceIfCreated()?.openProjects?.forEach {
|
ProjectManager.getInstanceIfCreated()?.openProjects?.forEach {
|
||||||
DaemonCodeAnalyzer.getInstance(it).restart()
|
DaemonCodeAnalyzer.getInstance(it).restart(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import org.intellij.lang.annotations.Language
|
|||||||
class RainbowJavaScriptTest : LightJavaCodeInsightFixtureTestCase() {
|
class RainbowJavaScriptTest : LightJavaCodeInsightFixtureTestCase() {
|
||||||
|
|
||||||
fun testJavaScriptPluginEnabled() {
|
fun testJavaScriptPluginEnabled() {
|
||||||
assertTrue(PluginManagerCore.getPlugin(PluginId.getId("JavaScript"))?.isEnabled!!)
|
assertTrue(PluginManagerCore.isLoaded(PluginId("JavaScript")))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testIssue11() {
|
fun testIssue11() {
|
||||||
@@ -146,7 +146,7 @@ const element = ( <div> <h1>Hello, world!</h1> </div> );
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun `for somehow, it just don't work "testIssue39"`() {
|
fun testIssue39() {
|
||||||
@Language("JavaScript") val code = """
|
@Language("JavaScript") val code = """
|
||||||
const html = '<div><div><div>Hello</div></div></div>'
|
const html = '<div><div><div>Hello</div></div></div>'
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
|
|||||||
@@ -105,37 +105,6 @@ val a: (Int) -> Unit = { aa ->
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun `ForSomeHowTheTestNotPassed "testRainbowLabelForKotlin"`() {
|
|
||||||
@Language("kotlin") val code =
|
|
||||||
"""
|
|
||||||
class AA {
|
|
||||||
fun aa() {
|
|
||||||
arrayOf(1, 2, 3).forEach {
|
|
||||||
it.let dd@{
|
|
||||||
if (it > 0) a@{
|
|
||||||
return@dd
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return@forEach
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""".trimIndent()
|
|
||||||
myFixture.configureByText(KotlinFileType.INSTANCE, code)
|
|
||||||
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
|
||||||
val doHighlighting = myFixture.doHighlighting()
|
|
||||||
assertFalse(doHighlighting.isEmpty())
|
|
||||||
|
|
||||||
doHighlighting.getBrackets().shouldBe(
|
|
||||||
arrayOf(
|
|
||||||
squigglyLevel(3),
|
|
||||||
squigglyLevel(4),
|
|
||||||
squigglyLevel(3),
|
|
||||||
squigglyLevel(2)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun testKotlinFunctionLiteralBracesAndArrow() {
|
fun testKotlinFunctionLiteralBracesAndArrow() {
|
||||||
@Language("kotlin") val code =
|
@Language("kotlin") val code =
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import org.jetbrains.plugins.ruby.ruby.lang.RubyFileType
|
|||||||
class RainbowRubyTest : LightJavaCodeInsightFixtureTestCase() {
|
class RainbowRubyTest : LightJavaCodeInsightFixtureTestCase() {
|
||||||
|
|
||||||
fun testRubyPluginEnabled() {
|
fun testRubyPluginEnabled() {
|
||||||
assertTrue(PluginManagerCore.getPlugin(PluginId.getId("org.jetbrains.plugins.ruby"))?.isEnabled!!)
|
assertTrue(PluginManagerCore.isLoaded(PluginId("org.jetbrains.plugins.ruby")))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testRainbowForIssue53Part0() {
|
fun testRainbowForIssue53Part0() {
|
||||||
|
|||||||
Reference in New Issue
Block a user