From 0d97099112d785344bf43afc8fe4c35ded848851 Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Wed, 2 Jul 2025 11:55:48 -0700 Subject: [PATCH 1/6] skip inline completion when deleting --- .../bugfix-2488e2f1-f725-4e01-b38a-8b6953cf5f18.json | 4 ++++ .../codewhisperer/popup/QInlineCompletionProvider.kt | 8 ++++++++ 2 files changed, 12 insertions(+) create mode 100644 .changes/next-release/bugfix-2488e2f1-f725-4e01-b38a-8b6953cf5f18.json diff --git a/.changes/next-release/bugfix-2488e2f1-f725-4e01-b38a-8b6953cf5f18.json b/.changes/next-release/bugfix-2488e2f1-f725-4e01-b38a-8b6953cf5f18.json new file mode 100644 index 00000000000..37969f57f3a --- /dev/null +++ b/.changes/next-release/bugfix-2488e2f1-f725-4e01-b38a-8b6953cf5f18.json @@ -0,0 +1,4 @@ +{ + "type" : "bugfix", + "description" : "Skip inline completion when deleting characters" +} \ No newline at end of file diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt index a092798cb67..cc91ba0ac24 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt @@ -404,6 +404,14 @@ class QInlineCompletionProvider(private val cs: CoroutineScope) : InlineCompleti CodeWhispererInvocationStatus.getInstance().setIsInvokingQInline(session, false) } + if (request.event is InlineCompletionEvent.Backspace) { + logInline(triggerSessionId) { + "Skip inline completion when deleting" + } + return InlineCompletionSuggestion.Empty + } + + val sessionContext = InlineCompletionSessionContext(triggerOffset = request.endOffset) // Pagination workaround: Always return exactly 5 variants From 995c0b7854f2bb5335cb80c74ee7b55374571162 Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Wed, 2 Jul 2025 12:02:42 -0700 Subject: [PATCH 2/6] detekt --- .../services/codewhisperer/popup/QInlineCompletionProvider.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt index cc91ba0ac24..712d4c7d143 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt @@ -411,7 +411,6 @@ class QInlineCompletionProvider(private val cs: CoroutineScope) : InlineCompleti return InlineCompletionSuggestion.Empty } - val sessionContext = InlineCompletionSessionContext(triggerOffset = request.endOffset) // Pagination workaround: Always return exactly 5 variants From 58947d47caddd756f6584ad1017b5e506ef3f696 Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Wed, 2 Jul 2025 13:00:47 -0700 Subject: [PATCH 3/6] use offset --- .../services/codewhisperer/popup/QInlineCompletionProvider.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt index 712d4c7d143..79b63ceb2eb 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt @@ -404,7 +404,9 @@ class QInlineCompletionProvider(private val cs: CoroutineScope) : InlineCompleti CodeWhispererInvocationStatus.getInstance().setIsInvokingQInline(session, false) } - if (request.event is InlineCompletionEvent.Backspace) { + // ideally we want to use if (request.event is InlineCompletionEvent.Backspace) { + // but this API is marked as experimental and it will not compile on 2024.2 + if (request.startOffset == request.endOffset) { logInline(triggerSessionId) { "Skip inline completion when deleting" } From bd8d1f72af73b631943c90ce014bd7ddea9c9aa7 Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Wed, 2 Jul 2025 13:58:01 -0700 Subject: [PATCH 4/6] separate implementation for 2024.2 and 2024.3+ --- .../jetbrains/services/codewhisperer/popup/QManualCall.kt | 2 ++ .../jetbrains/services/codewhisperer/popup/QManualCall.kt | 5 +++++ .../codewhisperer/popup/QInlineCompletionProvider.kt | 5 ++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src-242/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src-242/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt index 345078fe203..5e732c1a8c6 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src-242/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src-242/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt @@ -19,3 +19,5 @@ fun getManualCallEvent(editor: Editor, isIntelliSenseAccept: Boolean): InlineCom } return InlineCompletionEvent.DirectCall(editor, editor.caretModel.currentCaret, dataContext) } + +fun InlineCompletionEvent.isDeletion(): Boolean = false diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src-243+/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src-243+/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt index 1f6e8dd7c06..2fc642a4de0 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src-243+/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src-243+/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt @@ -5,6 +5,7 @@ package software.aws.toolkits.jetbrains.services.codewhisperer.popup import com.intellij.codeInsight.inline.completion.InlineCompletionEvent import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.UserDataHolderBase +import software.aws.toolkits.jetbrains.services.codewhisperer.popup.QInlineCompletionProvider.Companion.DATA_KEY_Q_AUTO_TRIGGER_INTELLISENSE import software.aws.toolkits.jetbrains.services.codewhisperer.popup.QInlineCompletionProvider.Companion.KEY_Q_AUTO_TRIGGER_INTELLISENSE import software.aws.toolkits.jetbrains.services.codewhisperer.popup.QInlineCompletionProvider.Companion.Q_INLINE_PROVIDER_ID @@ -15,3 +16,7 @@ fun getManualCallEvent(editor: Editor, isIntelliSenseAccept: Boolean): InlineCom val data = UserDataHolderBase().apply { this.putUserData(KEY_Q_AUTO_TRIGGER_INTELLISENSE, isIntelliSenseAccept) } return InlineCompletionEvent.ManualCall(editor, Q_INLINE_PROVIDER_ID, data) } + +fun InlineCompletionEvent.isDeletion(): Boolean = + this is InlineCompletionEvent.Backspace + diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt index 79b63ceb2eb..81c14fdf150 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QInlineCompletionProvider.kt @@ -404,9 +404,8 @@ class QInlineCompletionProvider(private val cs: CoroutineScope) : InlineCompleti CodeWhispererInvocationStatus.getInstance().setIsInvokingQInline(session, false) } - // ideally we want to use if (request.event is InlineCompletionEvent.Backspace) { - // but this API is marked as experimental and it will not compile on 2024.2 - if (request.startOffset == request.endOffset) { + // this is only available in 2024.3+ + if (request.event.isDeletion()) { logInline(triggerSessionId) { "Skip inline completion when deleting" } From 787276322aa0c55c8c9808534ef97b16752ae28e Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Wed, 2 Jul 2025 13:58:58 -0700 Subject: [PATCH 5/6] detekt --- .../jetbrains/services/codewhisperer/popup/QManualCall.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src-243+/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src-243+/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt index 2fc642a4de0..e3a0dc25bd1 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src-243+/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src-243+/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt @@ -5,7 +5,6 @@ package software.aws.toolkits.jetbrains.services.codewhisperer.popup import com.intellij.codeInsight.inline.completion.InlineCompletionEvent import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.UserDataHolderBase -import software.aws.toolkits.jetbrains.services.codewhisperer.popup.QInlineCompletionProvider.Companion.DATA_KEY_Q_AUTO_TRIGGER_INTELLISENSE import software.aws.toolkits.jetbrains.services.codewhisperer.popup.QInlineCompletionProvider.Companion.KEY_Q_AUTO_TRIGGER_INTELLISENSE import software.aws.toolkits.jetbrains.services.codewhisperer.popup.QInlineCompletionProvider.Companion.Q_INLINE_PROVIDER_ID @@ -19,4 +18,3 @@ fun getManualCallEvent(editor: Editor, isIntelliSenseAccept: Boolean): InlineCom fun InlineCompletionEvent.isDeletion(): Boolean = this is InlineCompletionEvent.Backspace - From 29a058306c5b5910f5b21a05eda1b458c1b07363 Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Wed, 2 Jul 2025 14:30:41 -0700 Subject: [PATCH 6/6] detekt --- .../jetbrains/services/codewhisperer/popup/QManualCall.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src-242/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src-242/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt index 5e732c1a8c6..018b047eb26 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src-242/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src-242/software/aws/toolkits/jetbrains/services/codewhisperer/popup/QManualCall.kt @@ -20,4 +20,5 @@ fun getManualCallEvent(editor: Editor, isIntelliSenseAccept: Boolean): InlineCom return InlineCompletionEvent.DirectCall(editor, editor.caretModel.currentCaret, dataContext) } +@Suppress("FunctionOnlyReturningConstant") fun InlineCompletionEvent.isDeletion(): Boolean = false