From 4611a21ac3d4bf384489c5c253fdd60679188bef Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Mon, 25 Nov 2024 14:40:50 +0000 Subject: [PATCH] fix: do not trigger code completions when active lookup present --- .../DebouncedCodeCompletionProvider.kt | 25 ++++++++++--------- .../ee/carlrobert/codegpt/util/StringUtil.kt | 8 ++++++ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/DebouncedCodeCompletionProvider.kt b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/DebouncedCodeCompletionProvider.kt index 1482c133..568362c0 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/DebouncedCodeCompletionProvider.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/DebouncedCodeCompletionProvider.kt @@ -4,6 +4,7 @@ import com.intellij.codeInsight.inline.completion.* import com.intellij.codeInsight.inline.completion.elements.InlineCompletionElement import com.intellij.codeInsight.inline.completion.suggestion.InlineCompletionSingleSuggestion import com.intellij.codeInsight.inline.completion.suggestion.InlineCompletionSuggestion +import com.intellij.codeInsight.lookup.LookupManager import com.intellij.openapi.application.runInEdt import com.intellij.openapi.components.service import com.intellij.openapi.diagnostic.thisLogger @@ -18,6 +19,7 @@ import ee.carlrobert.codegpt.settings.service.custom.CustomServiceSettings import ee.carlrobert.codegpt.settings.service.llama.LlamaSettings import ee.carlrobert.codegpt.settings.service.ollama.OllamaSettings import ee.carlrobert.codegpt.settings.service.openai.OpenAISettings +import ee.carlrobert.codegpt.util.StringUtil.extractUntilNewline import kotlinx.coroutines.channels.ProducerScope import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.channelFlow @@ -50,14 +52,6 @@ class DebouncedCodeCompletionProvider : DebouncedInlineCompletionProvider() { override val providerPresentation: InlineCompletionProviderPresentation get() = CodeCompletionProviderPresentation() - private fun String.extractUntilNewline(): String { - val index = this.indexOf('\n') - if (index == -1) { - return this - } - return this.substring(0, index + 1) - } - override suspend fun getSuggestionDebounced(request: InlineCompletionRequest): InlineCompletionSuggestion { val editor = request.editor val remainingCompletion = REMAINING_EDITOR_COMPLETION.get(editor) @@ -74,8 +68,12 @@ class DebouncedCodeCompletionProvider : DebouncedInlineCompletionProvider() { return InlineCompletionSingleSuggestion.build(elements = emptyFlow()) } + if (LookupManager.getActiveLookup(editor) != null) { + return InlineCompletionSingleSuggestion.build(elements = emptyFlow()) + } + return InlineCompletionSingleSuggestion.build(elements = channelFlow { - REMAINING_EDITOR_COMPLETION.set(request, "") + REMAINING_EDITOR_COMPLETION.set(request.editor, "") IS_FETCHING_COMPLETION.set(request.editor, true) request.editor.project?.messageBus @@ -83,8 +81,7 @@ class DebouncedCodeCompletionProvider : DebouncedInlineCompletionProvider() { ?.loading(true) val infillRequest = InfillRequestUtil.buildInfillRequest(request) - val call = project - .service() + val call = project.service() .getCodeCompletionAsync( infillRequest, getEventListener(request.editor, infillRequest) @@ -116,6 +113,10 @@ class DebouncedCodeCompletionProvider : DebouncedInlineCompletionProvider() { return false } + if (LookupManager.getActiveLookup(event.toRequest()?.editor) != null) { + return false + } + val containsActiveCompletion = REMAINING_EDITOR_COMPLETION.get(event.toRequest()?.editor)?.isNotEmpty() ?: false @@ -198,4 +199,4 @@ class DebouncedCodeCompletionProvider : DebouncedInlineCompletionProvider() { } }) } -} \ No newline at end of file +} diff --git a/src/main/kotlin/ee/carlrobert/codegpt/util/StringUtil.kt b/src/main/kotlin/ee/carlrobert/codegpt/util/StringUtil.kt index f89b7e67..391b58ac 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/util/StringUtil.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/util/StringUtil.kt @@ -22,4 +22,12 @@ object StringUtil { return completionLine } + + fun String.extractUntilNewline(): String { + val index = this.indexOf('\n') + if (index == -1) { + return this + } + return this.substring(0, index + 1) + } }