diff --git a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeGPTInlineCompletionProvider.kt b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeGPTInlineCompletionProvider.kt index bb899597..91f59474 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeGPTInlineCompletionProvider.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeGPTInlineCompletionProvider.kt @@ -43,11 +43,12 @@ class CodeGPTInlineCompletionProvider : InlineCompletionProvider { currentCall.set( CompletionRequestService.getInstance().getCodeCompletionAsync( infillRequest, - CodeCompletionEventListener(infillRequest) { - request.editor.putUserData(CodeGPTKeys.PREVIOUS_INLAY_TEXT, it) + CodeCompletionEventListener { + val inlineText = it.takeWhile { message -> message != '\n' }.toString() + request.editor.putUserData(CodeGPTKeys.PREVIOUS_INLAY_TEXT, inlineText) launch { try { - trySend(InlineCompletionGrayTextElement(it)) + trySend(InlineCompletionGrayTextElement(inlineText)) } catch (e: Exception) { LOG.error("Failed to send inline completion suggestion", e) } @@ -74,24 +75,21 @@ class CodeGPTInlineCompletionProvider : InlineCompletionProvider { } class CodeCompletionEventListener( - private val requestDetails: InfillRequestDetails, - private val completed: (String) -> Unit + private val completed: (StringBuilder) -> Unit ) : CompletionEventListener { + override fun onMessage(message: String?, eventSource: EventSource?) { + if (message != null && message.contains('\n')) { + eventSource?.cancel() + } + } + override fun onComplete(messageBuilder: StringBuilder) { - // TODO: https://youtrack.jetbrains.com/issue/CPP-38312/CLion-crashes-around-every-10-minutes-of-work - /*val processedOutput = CodeCompletionParserFactory - .getParserForFileExtension(requestDetails.fileExtension) - .parse( - requestDetails.prefix, - requestDetails.suffix, - messageBuilder.toString() - )*/ - val output = - if (messageBuilder.contains("\n")) - messageBuilder.substring(0, messageBuilder.indexOf("\n")) - else messageBuilder.toString() - completed(output) + completed(messageBuilder) + } + + override fun onCancelled(messageBuilder: StringBuilder) { + completed(messageBuilder) } } } \ No newline at end of file