[FIR][LightTree] Skip comments and whitespaces when marking elements
This commit is contained in:
committed by
TeamCityServer
parent
dcbb1fb22b
commit
48994976d4
+7
-1
@@ -10,6 +10,7 @@ import com.intellij.openapi.util.Ref
|
|||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
import com.intellij.psi.TokenType
|
import com.intellij.psi.TokenType
|
||||||
import com.intellij.util.diff.FlyweightCapableTreeStructure
|
import com.intellij.util.diff.FlyweightCapableTreeStructure
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.getChildren
|
||||||
import org.jetbrains.kotlin.lexer.KtSingleValueToken
|
import org.jetbrains.kotlin.lexer.KtSingleValueToken
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.WHITE_SPACE
|
import org.jetbrains.kotlin.lexer.KtTokens.WHITE_SPACE
|
||||||
@@ -50,7 +51,8 @@ fun markRange(
|
|||||||
tree: FlyweightCapableTreeStructure<LighterASTNode>,
|
tree: FlyweightCapableTreeStructure<LighterASTNode>,
|
||||||
originalNode: LighterASTNode
|
originalNode: LighterASTNode
|
||||||
): List<TextRange> {
|
): List<TextRange> {
|
||||||
val startDelta = tree.getStartOffset(from) - tree.getStartOffset(originalNode)
|
val betterFrom = from.nonFillerChildOrSelf(tree)
|
||||||
|
val startDelta = tree.getStartOffset(betterFrom) - tree.getStartOffset(originalNode)
|
||||||
val endDelta = tree.getEndOffset(to) - tree.getEndOffset(originalNode)
|
val endDelta = tree.getEndOffset(to) - tree.getEndOffset(originalNode)
|
||||||
return listOf(TextRange(startDelta + startOffset, endDelta + endOffset))
|
return listOf(TextRange(startDelta + startOffset, endDelta + endOffset))
|
||||||
}
|
}
|
||||||
@@ -60,6 +62,10 @@ private val DOC_AND_COMMENT_TOKENS = setOf(
|
|||||||
KtTokens.EOL_COMMENT, KtTokens.BLOCK_COMMENT, KtTokens.SHEBANG_COMMENT, KtTokens.DOC_COMMENT
|
KtTokens.EOL_COMMENT, KtTokens.BLOCK_COMMENT, KtTokens.SHEBANG_COMMENT, KtTokens.DOC_COMMENT
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private fun LighterASTNode.nonFillerChildOrSelf(tree: FlyweightCapableTreeStructure<LighterASTNode>): LighterASTNode =
|
||||||
|
getChildren(tree).firstOrNull { it != null && it.tokenType !in DOC_AND_COMMENT_TOKENS } ?: this
|
||||||
|
|
||||||
|
|
||||||
private fun hasSyntaxErrors(node: LighterASTNode, tree: FlyweightCapableTreeStructure<LighterASTNode>): Boolean {
|
private fun hasSyntaxErrors(node: LighterASTNode, tree: FlyweightCapableTreeStructure<LighterASTNode>): Boolean {
|
||||||
if (node.tokenType == TokenType.ERROR_ELEMENT) return true
|
if (node.tokenType == TokenType.ERROR_ELEMENT) return true
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user