From 6536ff441b43f062e0a460063564cd03aa6f0da9 Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Tue, 13 May 2025 00:57:46 +0100 Subject: [PATCH] fix: dispose next edits on similar strings --- .../predictions/CodeSuggestionDiffViewer.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/kotlin/ee/carlrobert/codegpt/predictions/CodeSuggestionDiffViewer.kt b/src/main/kotlin/ee/carlrobert/codegpt/predictions/CodeSuggestionDiffViewer.kt index 05db874f..815df79a 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/predictions/CodeSuggestionDiffViewer.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/predictions/CodeSuggestionDiffViewer.kt @@ -8,6 +8,7 @@ import com.intellij.diff.requests.SimpleDiffRequest import com.intellij.diff.tools.fragmented.UnifiedDiffChange import com.intellij.diff.tools.fragmented.UnifiedDiffViewer import com.intellij.diff.util.DiffUtil +import com.intellij.diff.util.Side import com.intellij.openapi.Disposable import com.intellij.openapi.actionSystem.ActionManager import com.intellij.openapi.application.runReadAction @@ -72,6 +73,12 @@ class CodeSuggestionDiffViewer( override fun onAfterRediff() { val change = getClosestChange() ?: return + val changeContent = getChangeContent(change) + + if (normalizeString(getDocument(Side.LEFT).text).contains(normalizeString(changeContent))) { + popup.dispose() + return + } myEditor.component.preferredSize = Dimension( @@ -159,6 +166,16 @@ class CodeSuggestionDiffViewer( mainEditor.document.removeDocumentListener(documentListener) } + private fun normalizeString(text: String): String { + return text.replace("\\s+".toRegex(), "").lowercase() + } + + private fun getChangeContent(change: UnifiedDiffChange): String { + val startOffset = change.lineFragment.startOffset2 + val endOffset = change.lineFragment.endOffset2 + return getDocument(Side.RIGHT).getText(TextRange(startOffset, endOffset)) + } + private fun getClosestChange(): UnifiedDiffChange? { val changes = diffChanges ?: emptyList() val cursorOffset = mainEditor.caretModel.offset