mirror of
https://github.com/chylex/IntelliJ-Rainbow-Brackets.git
synced 2025-05-11 12:34:04 +02:00
Fix #497 C# in Rider - only squiggly brackets are rainbowified
(cherry picked from commit 086805155a79d90862ab315a95555b9b6f32cd2e)
This commit is contained in:
parent
3c15c62f71
commit
5836e0d4f0
src/main
kotlin/com/github/izhangzhihao/rainbow/brackets
resources/META-INF
@ -11,7 +11,7 @@ import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.RP
|
||||
|
||||
class CSharpBracePairProvider : BracePairProvider {
|
||||
override fun pairs(): List<BracePair> = listOf(
|
||||
BracePair(LPARENTH, RPARENTH, false),
|
||||
//BracePair(LPARENTH, RPARENTH, false),
|
||||
BracePair(LBRACE, RBRACE, false),
|
||||
BracePair(LBRACKET, RBRACKET, false)
|
||||
)
|
||||
|
@ -0,0 +1,71 @@
|
||||
package com.github.izhangzhihao.rainbow.brackets.visitor
|
||||
|
||||
import com.github.izhangzhihao.rainbow.brackets.settings.RainbowSettings
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightVisitor
|
||||
import com.intellij.lang.BracePair
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.impl.source.tree.LeafPsiElement
|
||||
import com.intellij.psi.tree.IElementType
|
||||
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LPARENTH
|
||||
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.RPARENTH
|
||||
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.psi.CSharpDummyNode
|
||||
|
||||
|
||||
class CSharpRainbowVisitor : RainbowHighlightVisitor() {
|
||||
|
||||
override fun suitableForFile(file: PsiFile)
|
||||
: Boolean = super.suitableForFile(file) &&
|
||||
RainbowSettings.instance.isEnableRainbowAngleBrackets &&
|
||||
(file.language.id == "C#" ||
|
||||
file.viewProvider.allFiles.any { it.language.id == "C#" }
|
||||
)
|
||||
|
||||
override fun clone(): HighlightVisitor = CSharpRainbowVisitor()
|
||||
|
||||
override fun visit(element: PsiElement) {
|
||||
val type = (element as? LeafPsiElement)?.elementType ?: return
|
||||
if (type == LPARENTH || type == RPARENTH) {
|
||||
val level = element.getBracketLevel(pair, type)
|
||||
if (RainbowSettings.instance.isDoNOTRainbowifyTheFirstLevel) {
|
||||
if (level >= 1) {
|
||||
rainbowPairs(element, pair, level)
|
||||
}
|
||||
} else {
|
||||
if (level >= 0) {
|
||||
rainbowPairs(element, pair, level)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun rainbowPairs(element: LeafPsiElement, pair: BracePair, level: Int) {
|
||||
val startElement = element.takeIf { it.elementType == pair.leftBraceType }
|
||||
val endElement = element.takeIf { it.elementType == pair.rightBraceType }
|
||||
element.setHighlightInfo(element.parent, level, startElement, endElement)
|
||||
}
|
||||
|
||||
companion object {
|
||||
val pair = BracePair(LPARENTH, RPARENTH, true)
|
||||
|
||||
private fun LeafPsiElement.getBracketLevel(pair: BracePair, type: IElementType): Int = iterateBracketParents(this, pair, -1, type)
|
||||
|
||||
private tailrec fun iterateBracketParents(element: PsiElement?, pair: BracePair, count: Int, type: IElementType): Int {
|
||||
if (element == null || element is CSharpDummyNode || element is PsiFile) {
|
||||
return count
|
||||
}
|
||||
|
||||
var nextCount = count
|
||||
|
||||
if (element is LeafPsiElement && element.elementType == type) {
|
||||
nextCount ++
|
||||
}
|
||||
|
||||
return if (type == LPARENTH) {
|
||||
iterateBracketParents(element.prevSibling, pair, nextCount, type)
|
||||
} else {
|
||||
iterateBracketParents(element.nextSibling, pair, nextCount, type)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -34,8 +34,6 @@ class DefaultRainbowVisitor : RainbowHighlightVisitor() {
|
||||
} else {
|
||||
if (level >= 0) {
|
||||
rainbowPairs(element, pair, level)
|
||||
} else if (element.language.id == "C#") {
|
||||
rainbowPairs(element, pair, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -107,7 +105,7 @@ class DefaultRainbowVisitor : RainbowHighlightVisitor() {
|
||||
return findLeftBracket && findRightBracket
|
||||
}
|
||||
|
||||
private fun PsiElement.elementType(): IElementType? {
|
||||
fun PsiElement.elementType(): IElementType? {
|
||||
return (this as? LeafPsiElement)?.elementType
|
||||
}
|
||||
|
||||
|
@ -3,4 +3,8 @@
|
||||
<bracePairProvider language="C#"
|
||||
implementationClass="com.github.izhangzhihao.rainbow.brackets.provider.CSharpBracePairProvider"/>
|
||||
</extensions>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<highlightVisitor implementation="com.github.izhangzhihao.rainbow.brackets.visitor.CSharpRainbowVisitor"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
Loading…
Reference in New Issue
Block a user