From 6a3ec29602baa6b95c68d3b55bd5274f0f81dbea Mon Sep 17 00:00:00 2001 From: "Kirill.Krylov" Date: Mon, 21 Aug 2023 11:31:01 +0200 Subject: [PATCH] [inline-completion] ML-862 ML-864 hide inline on caret position change GitOrigin-RevId: cca33c0c0def34d5d27151b0c02a87b976c6131c --- .../listeners/InlineCompletionEditorListener.kt | 2 ++ .../listeners/InlineCompletionListeners.kt | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/listeners/InlineCompletionEditorListener.kt b/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/listeners/InlineCompletionEditorListener.kt index 82268c5b7df8..b56ceabb6640 100644 --- a/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/listeners/InlineCompletionEditorListener.kt +++ b/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/listeners/InlineCompletionEditorListener.kt @@ -31,9 +31,11 @@ class InlineCompletionEditorListener(scope: CoroutineScope) : EditorFactoryListe editor.putUserData(InlineCompletionHandler.KEY, handler) val docListener = InlineCompletionDocumentListener(editor) + val caretListener = InlineCaretListener(editor) editor.document.addDocumentListener(docListener, disposable) editor.addFocusListener(focusListener, disposable) + editor.caretModel.addCaretListener(caretListener, disposable) } override fun editorReleased(event: EditorFactoryEvent) { diff --git a/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/listeners/InlineCompletionListeners.kt b/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/listeners/InlineCompletionListeners.kt index f55c6161b64c..722818e49503 100644 --- a/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/listeners/InlineCompletionListeners.kt +++ b/platform/platform-impl/src/com/intellij/codeInsight/inline/completion/listeners/InlineCompletionListeners.kt @@ -8,6 +8,8 @@ import com.intellij.codeWithMe.ClientId import com.intellij.codeWithMe.isCurrent import com.intellij.openapi.editor.ClientEditorManager import com.intellij.openapi.editor.Editor +import com.intellij.openapi.editor.event.CaretEvent +import com.intellij.openapi.editor.event.CaretListener import com.intellij.openapi.editor.event.DocumentEvent import com.intellij.openapi.editor.event.DocumentListener import com.intellij.openapi.editor.ex.FocusChangeListener @@ -59,3 +61,16 @@ class InlineCompletionFocusListener : FocusChangeListener { editor.resetInlineCompletionContext() } } + +@ApiStatus.Experimental +class InlineCaretListener(private val editor: Editor) : CaretListener { + override fun caretPositionChanged(event: CaretEvent) { + if (isSimple(event)) return + + editor.resetInlineCompletionContext() + } + + private fun isSimple(event: CaretEvent): Boolean { + return event.oldPosition.line == event.newPosition.line && event.oldPosition.column + 1 == event.newPosition.column + } +}