mirror of
https://github.com/carlrobertoh/ProxyAI.git
synced 2026-05-19 07:54:46 +00:00
fix: temp disable code completions when next edits is active
This commit is contained in:
parent
e4f6a5234a
commit
7984d5211c
7 changed files with 22 additions and 25 deletions
|
|
@ -3,25 +3,19 @@ package ee.carlrobert.codegpt;
|
|||
import com.intellij.openapi.util.Key;
|
||||
import ee.carlrobert.codegpt.predictions.CodeSuggestionDiffViewer;
|
||||
import ee.carlrobert.llm.client.codegpt.CodeGPTUserDetails;
|
||||
import okhttp3.Call;
|
||||
|
||||
public class CodeGPTKeys {
|
||||
|
||||
public static final Key<String> PREVIOUS_INLAY_TEXT =
|
||||
Key.create("codegpt.editor.inlay.prev-value");
|
||||
public static final Key<String> IMAGE_ATTACHMENT_FILE_PATH =
|
||||
Key.create("codegpt.imageAttachmentFilePath");
|
||||
public static final Key<CodeGPTUserDetails> CODEGPT_USER_DETAILS =
|
||||
Key.create("codegpt.userDetails");
|
||||
public static final Key<String> REMAINING_EDITOR_COMPLETION =
|
||||
Key.create("codegpt.editorCompletionLines");
|
||||
public static final Key<Call> PENDING_PREDICTION_CALL =
|
||||
Key.create("codegpt.editorPendingPredictionCall");
|
||||
public static final Key<Boolean> COMPLETION_IN_PROGRESS =
|
||||
Key.create("codegpt.completionInProgress");
|
||||
public static final Key<Boolean> IS_PROMPT_TEXT_FIELD_DOCUMENT =
|
||||
Key.create("codegpt.isPromptTextFieldDocument");
|
||||
public static final Key<CodeSuggestionDiffViewer> EDITOR_PREDICTION_DIFF_VIEWER =
|
||||
Key.create("codegpt.editorPredictionDiffViewer");
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ class CodeCompletionMultiLineEventListener(
|
|||
) : CodeCompletionEventListener(request.editor) {
|
||||
|
||||
override fun handleCompleted(messageBuilder: StringBuilder) {
|
||||
request.editor.project?.let { CompletionProgressNotifier.update(it, false) }
|
||||
runInEdt {
|
||||
onCompletionReceived(runWriteAction {
|
||||
messageBuilder.toString().formatCompletion(request)
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.intellij.codeInsight.inline.completion.elements.InlineCompletionGrayT
|
|||
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.notification.NotificationType
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.diagnostic.thisLogger
|
||||
import com.intellij.openapi.project.Project
|
||||
|
|
@ -20,6 +21,7 @@ import ee.carlrobert.codegpt.settings.service.custom.CustomServicesSettings
|
|||
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.ui.OverlayUtil
|
||||
import ee.carlrobert.codegpt.util.StringUtil.extractUntilNewline
|
||||
import kotlinx.coroutines.channels.ProducerScope
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
|
|
@ -53,9 +55,17 @@ class DebouncedCodeCompletionProvider : DebouncedInlineCompletionProvider() {
|
|||
get() = CodeCompletionProviderPresentation()
|
||||
|
||||
override suspend fun getSuggestionDebounced(request: InlineCompletionRequest): InlineCompletionSuggestion {
|
||||
if (GeneralSettings.getSelectedService() == ServiceType.CODEGPT
|
||||
&& service<CodeGPTServiceSettings>().state.nextEditsEnabled
|
||||
val codegptSettings = service<CodeGPTServiceSettings>().state
|
||||
if (GeneralSettings.getSelectedService() == ServiceType.CODEGPT && codegptSettings.nextEditsEnabled
|
||||
) {
|
||||
if (codegptSettings.codeCompletionSettings.codeCompletionsEnabled) {
|
||||
codegptSettings.codeCompletionSettings.codeCompletionsEnabled = false
|
||||
OverlayUtil.showNotification(
|
||||
"Code completions and multi-line edits cannot be active simultaneously.",
|
||||
NotificationType.WARNING
|
||||
)
|
||||
}
|
||||
|
||||
predictNextEdit(request)
|
||||
return InlineCompletionSingleSuggestion.build(elements = emptyFlow())
|
||||
}
|
||||
|
|
@ -74,8 +84,6 @@ class DebouncedCodeCompletionProvider : DebouncedInlineCompletionProvider() {
|
|||
project.service<GrpcClientService>().getNextEdit(request.editor)
|
||||
} catch (ex: Exception) {
|
||||
logger.error("Error communicating with server: ${ex.message}")
|
||||
} finally {
|
||||
CompletionProgressNotifier.update(project, false)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -110,9 +118,7 @@ class DebouncedCodeCompletionProvider : DebouncedInlineCompletionProvider() {
|
|||
.getCodeCompletionAsync(
|
||||
infillRequest,
|
||||
CodeCompletionMultiLineEventListener(request) {
|
||||
if (it.isEmpty() && service<CodeGPTServiceSettings>().state.nextEditsEnabled) {
|
||||
predictNextEdit(request)
|
||||
} else {
|
||||
if (LookupManager.getActiveLookup(request.editor) == null) {
|
||||
trySend(InlineCompletionGrayTextElement(it))
|
||||
}
|
||||
}
|
||||
|
|
@ -147,7 +153,7 @@ class DebouncedCodeCompletionProvider : DebouncedInlineCompletionProvider() {
|
|||
}
|
||||
|
||||
override suspend fun getDebounceDelay(request: InlineCompletionRequest): Duration {
|
||||
return 600.toDuration(DurationUnit.MILLISECONDS)
|
||||
return 400.toDuration(DurationUnit.MILLISECONDS)
|
||||
}
|
||||
|
||||
override fun isEnabled(event: InlineCompletionEvent): Boolean {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import com.intellij.openapi.diagnostic.thisLogger
|
|||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.jetbrains.rd.util.UUID
|
||||
import ee.carlrobert.codegpt.codecompletions.CompletionProgressNotifier
|
||||
import ee.carlrobert.codegpt.credentials.CredentialsStore
|
||||
import ee.carlrobert.codegpt.credentials.CredentialsStore.CredentialKey.CodeGptApiKey
|
||||
import ee.carlrobert.codegpt.predictions.CodeSuggestionDiffViewer
|
||||
|
|
@ -89,25 +90,21 @@ class GrpcClientService(private val project: Project) : Disposable {
|
|||
override fun onNext(response: NextEditResponse) {
|
||||
runInEdt {
|
||||
if (LookupManager.getActiveLookup(editor) == null) {
|
||||
// TODO: Display when appropriate
|
||||
CodeSuggestionDiffViewer.displayInlineDiff(editor, response, isManuallyOpened)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError(ex: Throwable) {
|
||||
if (ex is CancellationException) {
|
||||
if (ex is CancellationException ||
|
||||
(ex is StatusRuntimeException && ex.status.code == Status.Code.CANCELLED)
|
||||
) {
|
||||
onCompleted()
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
if (ex is StatusRuntimeException) {
|
||||
if (ex.status.code == Status.Code.CANCELLED) {
|
||||
onCompleted()
|
||||
return
|
||||
}
|
||||
|
||||
OverlayUtil.showNotification(
|
||||
ex.status.description ?: ex.localizedMessage,
|
||||
NotificationType.ERROR,
|
||||
|
|
@ -119,11 +116,13 @@ class GrpcClientService(private val project: Project) : Disposable {
|
|||
logger.error("Something went wrong", ex)
|
||||
}
|
||||
} finally {
|
||||
onCompleted()
|
||||
onDispose()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCompleted() {
|
||||
editor.project?.let { CompletionProgressNotifier.update(it, false) }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,8 +38,6 @@ class PredictionService {
|
|||
project.service<GrpcClientService>().getNextEdit(editor, isManuallyOpened)
|
||||
} catch (ex: Exception) {
|
||||
logger.error("Error communicating with server: ${ex.message}")
|
||||
} finally {
|
||||
CompletionProgressNotifier.update(project, false)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -262,7 +262,7 @@ class KotlinFileAnalyzer(
|
|||
val type = property.typeReference?.text ?: "TypeUnknown"
|
||||
val resolvedType = resolveType(type)
|
||||
val modifierList = getModifiers(property)
|
||||
return FieldStructure(property.name!!, resolvedType, modifierList)
|
||||
return FieldStructure(property.name ?: "", resolvedType, modifierList)
|
||||
}
|
||||
|
||||
private fun analyzeFunction(function: KtFunction): MethodStructure {
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ open class IntegrationTest : BasePlatformTestCase(), ExternalServiceTestMixin, S
|
|||
}
|
||||
|
||||
private fun clearKeys() {
|
||||
putUserData(CodeGPTKeys.PREVIOUS_INLAY_TEXT, "")
|
||||
putUserData(CodeGPTKeys.IMAGE_ATTACHMENT_FILE_PATH, "")
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue