Skip to content

Commit 477bb18

Browse files
committed
feat(action): shortcut now runs commit generation instead of opening dropdown
Closes #370
1 parent d9e4769 commit 477bb18

File tree

6 files changed

+145
-30
lines changed

6 files changed

+145
-30
lines changed

CHANGELOG.md

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## [Unreleased]
44

5+
### Changed
6+
7+
- Generate commit action triggered via shortcut no longer opens the dropdown but instead runs the commit generation with the currently selected LLM client (#370).
8+
59
### Removed
610

711
- Remove deprecated Gemini models (#376).
@@ -399,7 +403,8 @@
399403
### Added
400404

401405
- Show notification when diff is empty.
402-
- - This allows to compute diff only from files and **lines** selected in the commit dialog.
406+
-
407+
- This allows to compute diff only from files and **lines** selected in the commit dialog.
403408

404409
## [0.2.0] - 2023-03-27
405410

@@ -410,46 +415,89 @@
410415
- Create commit message only for selected files.
411416

412417
[Unreleased]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.14.1...HEAD
418+
413419
[2.14.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.14.0...v2.14.1
420+
414421
[2.14.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.13.0...v2.14.0
422+
415423
[2.13.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.12.0...v2.13.0
424+
416425
[2.12.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.11.1...v2.12.0
426+
417427
[2.11.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.11.0...v2.11.1
428+
418429
[2.11.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.10.1...v2.11.0
430+
419431
[2.10.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.10.0...v2.10.1
432+
420433
[2.10.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.9.1...v2.10.0
434+
421435
[2.9.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.9.0...v2.9.1
436+
422437
[2.9.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.8.0...v2.9.0
438+
423439
[2.8.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.7.1...v2.8.0
440+
424441
[2.7.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.7.0...v2.7.1
442+
425443
[2.7.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.6.0...v2.7.0
444+
426445
[2.6.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.5.0...v2.6.0
446+
427447
[2.5.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.4.1...v2.5.0
448+
428449
[2.4.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.4.0...v2.4.1
450+
429451
[2.4.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.3.1...v2.4.0
452+
430453
[2.3.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.3.0...v2.3.1
454+
431455
[2.3.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.2.0...v2.3.0
456+
432457
[2.2.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.1.1...v2.2.0
458+
433459
[2.1.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.1.0...v2.1.1
460+
434461
[2.1.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v2.0.0...v2.1.0
462+
435463
[2.0.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v1.6.0...v2.0.0
464+
436465
[1.6.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v1.5.1...v1.6.0
466+
437467
[1.5.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v1.5.0...v1.5.1
468+
438469
[1.5.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v1.4.0...v1.5.0
470+
439471
[1.4.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v1.3.0...v1.4.0
472+
440473
[1.3.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v1.2.1...v1.3.0
474+
441475
[1.2.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v1.2.0...v1.2.1
476+
442477
[1.2.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v1.1.0...v1.2.0
478+
443479
[1.1.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v1.0.0...v1.1.0
480+
444481
[1.0.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v0.9.0...v1.0.0
482+
445483
[0.9.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v0.8.0...v0.9.0
484+
446485
[0.8.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v0.7.0...v0.8.0
486+
447487
[0.7.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v0.6.2...v0.7.0
488+
448489
[0.6.2]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v0.6.1...v0.6.2
490+
449491
[0.6.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v0.6.0...v0.6.1
492+
450493
[0.6.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v0.5.1...v0.6.0
494+
451495
[0.5.1]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v0.5.0...v0.5.1
496+
452497
[0.5.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v0.4.0...v0.5.0
498+
453499
[0.4.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v0.3.0...v0.4.0
500+
454501
[0.3.0]: https://github.com/Blarc/ai-commits-intellij-plugin/compare/v0.2.0...v0.3.0
502+
455503
[0.2.0]: https://github.com/Blarc/ai-commits-intellij-plugin/commits/v0.2.0
Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,40 @@
11
package com.github.blarc.ai.commits.intellij.plugin
22

3-
import com.github.blarc.ai.commits.intellij.plugin.settings.AppSettings2
4-
import com.github.blarc.ai.commits.intellij.plugin.settings.clients.LLMClientConfiguration
5-
import com.intellij.openapi.actionSystem.*
3+
import com.github.blarc.ai.commits.intellij.plugin.notifications.Notification
4+
import com.github.blarc.ai.commits.intellij.plugin.settings.ProjectSettings
5+
import com.intellij.openapi.actionSystem.ActionUpdateThread
6+
import com.intellij.openapi.actionSystem.AnAction
7+
import com.intellij.openapi.actionSystem.AnActionEvent
8+
import com.intellij.openapi.components.service
69
import com.intellij.openapi.project.DumbAware
10+
import com.intellij.openapi.vcs.VcsDataKeys
711

8-
class AICommitAction : SplitButtonAction(object : ActionGroup() {
9-
override fun getChildren(e: AnActionEvent?): Array<AnAction> {
10-
val configurations = AppSettings2.instance.llmClientConfigurations.sortedWith(
11-
compareBy<LLMClientConfiguration> {
12-
it.id != AppSettings2.instance.activeLlmClientId
13-
}.thenBy {
14-
it.name
15-
}
16-
)
17-
18-
val actions = mutableListOf<AnAction>()
19-
if (configurations.isNotEmpty()) {
20-
actions.add(configurations.first())
21-
22-
if (configurations.size > 1) {
23-
actions.add(Separator.getInstance())
24-
}
25-
26-
actions.addAll(configurations.drop(1))
27-
}
28-
29-
return actions.toTypedArray()
30-
}
31-
}), DumbAware {
12+
class AICommitAction : AnAction(), DumbAware {
3213

3314
override fun getActionUpdateThread(): ActionUpdateThread {
3415
return ActionUpdateThread.EDT
3516
}
17+
18+
override fun update(e: AnActionEvent) {
19+
// Only enable this action when the commit dialog is open (COMMIT_WORKFLOW_HANDLER is available)
20+
val commitWorkflowHandler = e.getData(VcsDataKeys.COMMIT_WORKFLOW_HANDLER)
21+
val hasActiveLlmClient = e.project?.service<ProjectSettings>()?.getSplitButtonActionSelectedOrActiveLLMClient() != null
22+
23+
e.presentation.isEnabledAndVisible = commitWorkflowHandler != null && hasActiveLlmClient
24+
}
25+
26+
override fun actionPerformed(e: AnActionEvent) {
27+
val project = e.project ?: return
28+
29+
val projectSettings = project.service<ProjectSettings>()
30+
val llmClient = projectSettings.getSplitButtonActionSelectedOrActiveLLMClient()
31+
32+
if (llmClient == null) {
33+
Notification.clientNotSet()
34+
return
35+
}
36+
37+
llmClient.actionPerformed(e)
38+
}
39+
3640
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.github.blarc.ai.commits.intellij.plugin
2+
3+
import com.github.blarc.ai.commits.intellij.plugin.settings.AppSettings2
4+
import com.github.blarc.ai.commits.intellij.plugin.settings.clients.LLMClientConfiguration
5+
import com.intellij.openapi.actionSystem.*
6+
import com.intellij.openapi.project.DumbAware
7+
8+
class AICommitSplitButtonAction : SplitButtonAction(object : ActionGroup() {
9+
10+
override fun getChildren(e: AnActionEvent?): Array<AnAction> {
11+
val configurations = AppSettings2.instance.llmClientConfigurations.sortedWith(
12+
compareBy<LLMClientConfiguration> {
13+
it.id != AppSettings2.instance.activeLlmClientId
14+
}.thenBy {
15+
it.name
16+
}
17+
)
18+
19+
val actions = mutableListOf<AnAction>()
20+
if (configurations.isNotEmpty()) {
21+
actions.add(configurations.first())
22+
23+
if (configurations.size > 1) {
24+
actions.add(Separator.getInstance())
25+
}
26+
27+
actions.addAll(configurations.drop(1))
28+
}
29+
30+
return actions.toTypedArray()
31+
}
32+
}), DumbAware {
33+
34+
override fun getActionUpdateThread(): ActionUpdateThread {
35+
return ActionUpdateThread.EDT
36+
}
37+
}

src/main/kotlin/com/github/blarc/ai/commits/intellij/plugin/settings/ProjectSettings.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ class ProjectSettings : PersistentStateComponent<ProjectSettings?> {
3333
@Attribute
3434
var isProjectSpecificLLMClient: Boolean = false
3535

36+
@Transient
37+
var splitButtonActionSelectedLLMClientId: String? = null
38+
3639
@Property
3740
var activePrompt = DefaultPrompts.BASIC.prompt
3841
get() = getActivePrompt(field)
@@ -61,6 +64,13 @@ class ProjectSettings : PersistentStateComponent<ProjectSettings?> {
6164
}
6265
}
6366

67+
fun getSplitButtonActionSelectedOrActiveLLMClient(): LLMClientConfiguration? {
68+
// First try to get the session client, then fall back to the active client
69+
return splitButtonActionSelectedLLMClientId?.let {
70+
AppSettings2.instance.getActiveLLMClientConfiguration(it)
71+
} ?: getActiveLLMClientConfiguration()
72+
}
73+
6474
private fun getActivePrompt(activePrompt: Prompt): Prompt {
6575
return if (isProjectSpecificPrompt) {
6676
activePrompt

src/main/kotlin/com/github/blarc/ai/commits/intellij/plugin/settings/clients/LLMClientConfiguration.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package com.github.blarc.ai.commits.intellij.plugin.settings.clients
33
import com.github.blarc.ai.commits.intellij.plugin.Icons
44
import com.github.blarc.ai.commits.intellij.plugin.notifications.Notification
55
import com.github.blarc.ai.commits.intellij.plugin.notifications.sendNotification
6+
import com.github.blarc.ai.commits.intellij.plugin.settings.ProjectSettings
67
import com.intellij.openapi.actionSystem.ActionUpdateThread
78
import com.intellij.openapi.actionSystem.AnAction
89
import com.intellij.openapi.actionSystem.AnActionEvent
10+
import com.intellij.openapi.components.service
911
import com.intellij.openapi.project.Project
1012
import com.intellij.openapi.vcs.VcsDataKeys
1113
import com.intellij.util.xmlb.annotations.Attribute
@@ -76,6 +78,10 @@ abstract class LLMClientConfiguration(
7678
return
7779
}
7880

81+
// Remember which LLM client was used for the shortcut action
82+
val projectSettings = project.service<ProjectSettings>()
83+
projectSettings.splitButtonActionSelectedLLMClientId = this.id
84+
7985
generateCommitMessage(commitWorkflowHandler, project)
8086
}
8187

src/main/resources/META-INF/plugin.xml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,29 @@
117117
</extensions>
118118

119119
<actions>
120+
<!-- Keyboard shortcut action that directly executes -->
120121
<action
121-
id="AICommit.Button"
122+
id="AICommit"
122123
text="AI Commit"
123124
description="Create commit message with AI"
124-
icon="/icons/aiCommits15.svg"
125125
class="com.github.blarc.ai.commits.intellij.plugin.AICommitAction">
126126

127127
<keyboard-shortcut
128128
keymap="$default"
129129
first-keystroke="control alt C"
130130
/>
131+
</action>
132+
133+
<!-- Button action with split dropdown -->
134+
<action
135+
id="AICommitSplitButton"
136+
text="AI Commit"
137+
description="Create commit message with AI"
138+
icon="/icons/aiCommits15.svg"
139+
class="com.github.blarc.ai.commits.intellij.plugin.AICommitSplitButtonAction">
131140

132141
<add-to-group group-id="Vcs.MessageActionGroup" anchor="last"/>
133142
</action>
134143
</actions>
144+
135145
</idea-plugin>

0 commit comments

Comments
 (0)