mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 11:53:49 +07:00
[ai-completion] ML-3765 fix multi-line visitor for python
(cherry picked from commit 5ff5ecbd1ce452d18a25d4296b7a891e8406b0c3) IJ-MR-140904 GitOrigin-RevId: 78aa2552905f2afc40df7a22961419416f7a6405
This commit is contained in:
committed by
intellij-monorepo-bot
parent
514b70a053
commit
095f4959a5
@@ -68,21 +68,26 @@ object MultiLineVisitorUtils {
|
||||
}
|
||||
|
||||
private fun PsiElement.lineRanges(document: Document): List<LineInfo> = buildList {
|
||||
val offset = startOffset
|
||||
var pos = 0
|
||||
val wholeRange = rangeFromLineBeginning(document)
|
||||
val wholeText = document.getText(wholeRange)
|
||||
val elementPrefix = wholeText.substring(0, offset - wholeRange.startOffset)
|
||||
val elementText = if (elementPrefix.isNotBlank()) { text } else { wholeText }
|
||||
|
||||
val currentLineStartToElementOffset = startOffset - wholeRange.startOffset
|
||||
|
||||
val elementPrefix = wholeText.substring(0, currentLineStartToElementOffset)
|
||||
val (elementText, elementOffset) = if (elementPrefix.isNotBlank()) { text to startOffset } else { wholeText to wholeRange.startOffset }
|
||||
|
||||
while (pos < elementText.length) {
|
||||
val nextLineBreakPos = elementText.indexOf('\n', pos)
|
||||
if (nextLineBreakPos == -1) break
|
||||
val range = TextRange(pos + offset, nextLineBreakPos + offset)
|
||||
if (nextLineBreakPos == -1) {
|
||||
if (pos == 0) return@buildList
|
||||
break
|
||||
}
|
||||
val range = TextRange(pos + elementOffset, nextLineBreakPos + elementOffset)
|
||||
add(document.getLineInfo(range))
|
||||
pos = nextLineBreakPos + 1
|
||||
}
|
||||
val lastRange = TextRange(pos + offset, textLength + offset)
|
||||
val lastRange = TextRange(pos + elementOffset, elementText.length + elementOffset)
|
||||
add(document.getLineInfo(lastRange))
|
||||
}
|
||||
|
||||
@@ -108,7 +113,7 @@ object MultiLineVisitorUtils {
|
||||
.takeWhile { it.indent >= indent }
|
||||
.lastOrNull()?.range?.endOffset ?: element.endOffset
|
||||
|
||||
val scopeRange = TextRange(lineInfo.startOffset, lastInScopeOffset)
|
||||
val scopeRange = TextRange(lineInfo.startOffset + indent, lastInScopeOffset)
|
||||
val scopeText = document.getText(scopeRange)
|
||||
add(CodeToken(scopeText, scopeRange.startOffset))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user