From a72c1181f73bc2dc2987fd57ea64820dd1a95791 Mon Sep 17 00:00:00 2001 From: Zoe Lin Date: Tue, 29 Oct 2024 13:47:32 -0700 Subject: [PATCH 1/7] fix(amazonq): default keybinding for inline chat conflicts --- gradle/libs.versions.toml | 2 ++ .../chat/jetbrains-community/build.gradle.kts | 1 + .../resources/META-INF/plugin-chat.xml | 1 + .../cwc/inline/InlineChatActionPromoter.kt | 32 +++++++++++++++++++ .../cwc/inline/InlineChatEditorHint.kt | 3 +- 5 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index eacfb8ffffa..229723c03ff 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,7 @@ [versions] apache-commons-collections = "4.4" apache-commons-io = "2.16.0" +apache-commons-text = "1.12.0" assertJ = "3.26.3" # match with /settings.gradle.kts awsSdk = "2.26.25" @@ -70,6 +71,7 @@ aws-sts = { module = "software.amazon.awssdk:sts", version.ref = "awsSdk" } commonmark = { module = "org.commonmark:commonmark", version.ref = "commonmark" } commons-collections = { module = "org.apache.commons:commons-collections4", version.ref = "apache-commons-collections" } commons-io = { module = "commons-io:commons-io", version.ref = "apache-commons-io" } +commons-text = {module = "org.apache.commons:commons-text", version.ref = "apache-commons-text"} detekt-api = { module = "io.gitlab.arturbosch.detekt:detekt-api", version.ref = "detekt" } detekt-formattingRules = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } diff-util = { module = "io.github.java-diff-utils:java-diff-utils", version.ref = "diff-util" } diff --git a/plugins/amazonq/chat/jetbrains-community/build.gradle.kts b/plugins/amazonq/chat/jetbrains-community/build.gradle.kts index 43f35d4e981..147d481b482 100644 --- a/plugins/amazonq/chat/jetbrains-community/build.gradle.kts +++ b/plugins/amazonq/chat/jetbrains-community/build.gradle.kts @@ -20,6 +20,7 @@ dependencies { // everything references codewhisperer, which is not ideal implementation(project(":plugin-amazonq:codewhisperer:jetbrains-community")) implementation(libs.diff.util) + implementation(libs.commons.text) compileOnly(project(":plugin-core:jetbrains-community")) diff --git a/plugins/amazonq/chat/jetbrains-community/resources/META-INF/plugin-chat.xml b/plugins/amazonq/chat/jetbrains-community/resources/META-INF/plugin-chat.xml index 3272dc35bfc..d08356231f7 100644 --- a/plugins/amazonq/chat/jetbrains-community/resources/META-INF/plugin-chat.xml +++ b/plugins/amazonq/chat/jetbrains-community/resources/META-INF/plugin-chat.xml @@ -20,6 +20,7 @@ factoryClass="software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindowFactory" icon="AwsIcons.Logos.AWS_Q" /> + diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt new file mode 100644 index 00000000000..2e5063d0d42 --- /dev/null +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt @@ -0,0 +1,32 @@ +// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.cwc.inline + +import com.intellij.openapi.actionSystem.ActionPromoter +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.DataContext +import com.intellij.openapi.keymap.KeymapUtil +import com.intellij.openapi.util.SystemInfo + +class InlineChatActionPromoter : ActionPromoter { + override fun promote(actions: MutableList, context: DataContext): MutableList { + val results = actions.toMutableList() + val shortCut = KeymapUtil.getShortcutText("aws.toolkit.jetbrains.core.services.cwc.inline.openChat") + // only promote for the default key bindings + if (SystemInfo.isMac && shortCut != "⌘I") return results + if (!SystemInfo.isMac && shortCut != "Ctrl+I") return results + + results.sortWith { a, b -> + when { + isOpenChatInputAction(a) -> -1 + isOpenChatInputAction(b) -> 1 + else -> 0 + } + } + return results + } + + private fun isOpenChatInputAction(action: AnAction): Boolean = + action is OpenChatInputAction +} diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt index a8ffc1bb3b6..703bfe6131e 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt @@ -8,7 +8,6 @@ import com.intellij.codeInsight.hint.HintUtil import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.VisualPosition import com.intellij.openapi.keymap.KeymapUtil -import com.intellij.openapi.util.SystemInfo import com.intellij.ui.LightweightHint import com.intellij.ui.SimpleColoredText import com.intellij.ui.SimpleTextAttributes @@ -68,7 +67,7 @@ class InlineChatEditorHint { coloredText.appendToComponent(component) val shortcutComponent = HintUtil.createInformationComponent() val shortCut = KeymapUtil.getShortcutText("aws.toolkit.jetbrains.core.services.cwc.inline.openChat") - if (!SystemInfo.isWindows && shortCut == "⌃I") { + if (shortCut == "⌘I") { val shortCutIcon = AwsIcons.Resources.InlineChat.AWS_Q_INLINECHAT_SHORTCUT shortcutComponent.isIconOnTheRight = true shortcutComponent.icon = shortCutIcon From 600c97adf5f65f9e39a8c3b42c4ddaf2d9531709 Mon Sep 17 00:00:00 2001 From: Zoe Lin Date: Tue, 29 Oct 2024 14:28:10 -0700 Subject: [PATCH 2/7] pr feedback --- .../services/cwc/inline/InlineChatActionPromoter.kt | 1 + .../services/cwc/inline/InlineChatEditorHint.kt | 12 +++--------- .../inlinechat/amazonq_inline_chat_shortcut.svg | 4 ---- .../core/jetbrains-community/src/icons/AwsIcons.kt | 4 ---- 4 files changed, 4 insertions(+), 17 deletions(-) delete mode 100644 plugins/core/jetbrains-community/resources/icons/resources/inlinechat/amazonq_inline_chat_shortcut.svg diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt index 2e5063d0d42..df933d0ff10 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt @@ -10,6 +10,7 @@ import com.intellij.openapi.keymap.KeymapUtil import com.intellij.openapi.util.SystemInfo class InlineChatActionPromoter : ActionPromoter { + // temporary until we find a better key binding override fun promote(actions: MutableList, context: DataContext): MutableList { val results = actions.toMutableList() val shortCut = KeymapUtil.getShortcutText("aws.toolkit.jetbrains.core.services.cwc.inline.openChat") diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt index 703bfe6131e..21e33ab3df1 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatEditorHint.kt @@ -67,15 +67,9 @@ class InlineChatEditorHint { coloredText.appendToComponent(component) val shortcutComponent = HintUtil.createInformationComponent() val shortCut = KeymapUtil.getShortcutText("aws.toolkit.jetbrains.core.services.cwc.inline.openChat") - if (shortCut == "⌘I") { - val shortCutIcon = AwsIcons.Resources.InlineChat.AWS_Q_INLINECHAT_SHORTCUT - shortcutComponent.isIconOnTheRight = true - shortcutComponent.icon = shortCutIcon - } else { - val shortcutText = - SimpleColoredText(shortCut, SimpleTextAttributes.REGULAR_ATTRIBUTES) - shortcutText.appendToComponent(shortcutComponent) - } + val shortcutText = + SimpleColoredText(shortCut, SimpleTextAttributes.REGULAR_ATTRIBUTES) + shortcutText.appendToComponent(shortcutComponent) val panel = JPanel(BorderLayout()).apply { add(component, BorderLayout.WEST) diff --git a/plugins/core/jetbrains-community/resources/icons/resources/inlinechat/amazonq_inline_chat_shortcut.svg b/plugins/core/jetbrains-community/resources/icons/resources/inlinechat/amazonq_inline_chat_shortcut.svg deleted file mode 100644 index c2cbaab7289..00000000000 --- a/plugins/core/jetbrains-community/resources/icons/resources/inlinechat/amazonq_inline_chat_shortcut.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/plugins/core/jetbrains-community/src/icons/AwsIcons.kt b/plugins/core/jetbrains-community/src/icons/AwsIcons.kt index 9a4703ce28b..024c57f80ce 100644 --- a/plugins/core/jetbrains-community/src/icons/AwsIcons.kt +++ b/plugins/core/jetbrains-community/src/icons/AwsIcons.kt @@ -125,10 +125,6 @@ object AwsIcons { @JvmField val SEVERITY_CRITICAL = load("/icons/resources/codewhisperer/severity-critical.svg") } - - object InlineChat { - @JvmField val AWS_Q_INLINECHAT_SHORTCUT = load("/icons/resources/inlinechat/amazonq_inline_chat_shortcut.svg") - } } object Actions { From 4d7ef6745b43b8d0bd896e99573aa5f729ff9d1b Mon Sep 17 00:00:00 2001 From: Zoe Lin Date: Tue, 29 Oct 2024 14:31:33 -0700 Subject: [PATCH 3/7] add change log --- .../bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json diff --git a/.changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json b/.changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json new file mode 100644 index 00000000000..04e0852fb19 --- /dev/null +++ b/.changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json @@ -0,0 +1,4 @@ +{ + "type" : "bugfix", + "description" : "inline chat default key binding might not work on windows and linux" +} \ No newline at end of file From c3c01cd7e3eec6da9dd65c9e6ae83d678099e60b Mon Sep 17 00:00:00 2001 From: Zoe Lin Date: Tue, 29 Oct 2024 16:17:48 -0700 Subject: [PATCH 4/7] add editor and project check --- .../jetbrains/services/cwc/inline/InlineChatActionPromoter.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt index df933d0ff10..4b7d5d04086 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt @@ -5,6 +5,7 @@ package software.aws.toolkits.jetbrains.services.cwc.inline import com.intellij.openapi.actionSystem.ActionPromoter import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.keymap.KeymapUtil import com.intellij.openapi.util.SystemInfo @@ -13,6 +14,7 @@ class InlineChatActionPromoter : ActionPromoter { // temporary until we find a better key binding override fun promote(actions: MutableList, context: DataContext): MutableList { val results = actions.toMutableList() + if (context.getData(CommonDataKeys.EDITOR) == null || context.getData(CommonDataKeys.PROJECT) == null) return results val shortCut = KeymapUtil.getShortcutText("aws.toolkit.jetbrains.core.services.cwc.inline.openChat") // only promote for the default key bindings if (SystemInfo.isMac && shortCut != "⌘I") return results From c497a3efd0a931ee0b1e3f444c5a6689503f8087 Mon Sep 17 00:00:00 2001 From: Zoe Lin <60411978+zixlin7@users.noreply.github.com> Date: Tue, 29 Oct 2024 16:37:20 -0700 Subject: [PATCH 5/7] Update .changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json Co-authored-by: manodnyab <66754471+manodnyab@users.noreply.github.com> --- .../bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json b/.changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json index 04e0852fb19..3b8b1dd9fce 100644 --- a/.changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json +++ b/.changes/next-release/bugfix-cfa2c364-8910-4dd8-ac1a-09da6690720e.json @@ -1,4 +1,4 @@ { "type" : "bugfix", - "description" : "inline chat default key binding might not work on windows and linux" + "description" : "Fix inline chat default key binding not working on windows and linux" } \ No newline at end of file From 259f0903fa9256068f24908ef8c3c942d5609987 Mon Sep 17 00:00:00 2001 From: Zoe Lin <60411978+zixlin7@users.noreply.github.com> Date: Tue, 29 Oct 2024 16:55:26 -0700 Subject: [PATCH 6/7] Update plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt Co-authored-by: Richard Li <742829+rli@users.noreply.github.com> --- .../jetbrains/services/cwc/inline/InlineChatActionPromoter.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt index 4b7d5d04086..acbcb90d229 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt @@ -20,14 +20,13 @@ class InlineChatActionPromoter : ActionPromoter { if (SystemInfo.isMac && shortCut != "⌘I") return results if (!SystemInfo.isMac && shortCut != "Ctrl+I") return results - results.sortWith { a, b -> + return actions.sortedBy { a, b -> when { isOpenChatInputAction(a) -> -1 isOpenChatInputAction(b) -> 1 else -> 0 } } - return results } private fun isOpenChatInputAction(action: AnAction): Boolean = From af5070431c6414dbb4dd485cb5e96d962854eaf4 Mon Sep 17 00:00:00 2001 From: Zoe Lin Date: Tue, 29 Oct 2024 17:11:13 -0700 Subject: [PATCH 7/7] fix --- .../services/cwc/inline/InlineChatActionPromoter.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt index acbcb90d229..aa5212267f6 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/inline/InlineChatActionPromoter.kt @@ -14,19 +14,24 @@ class InlineChatActionPromoter : ActionPromoter { // temporary until we find a better key binding override fun promote(actions: MutableList, context: DataContext): MutableList { val results = actions.toMutableList() - if (context.getData(CommonDataKeys.EDITOR) == null || context.getData(CommonDataKeys.PROJECT) == null) return results + if (context.getData(CommonDataKeys.EDITOR) == null || + context.getData(CommonDataKeys.PROJECT) == null + ) { + return results + } val shortCut = KeymapUtil.getShortcutText("aws.toolkit.jetbrains.core.services.cwc.inline.openChat") // only promote for the default key bindings if (SystemInfo.isMac && shortCut != "⌘I") return results if (!SystemInfo.isMac && shortCut != "Ctrl+I") return results - return actions.sortedBy { a, b -> + results.sortWith { a, b -> when { isOpenChatInputAction(a) -> -1 isOpenChatInputAction(b) -> 1 else -> 0 } } + return results } private fun isOpenChatInputAction(action: AnAction): Boolean =