Skip to content

Commit 581e56d

Browse files
author
Jia Liu
committed
feat: change inlay complete code trigger: use shortcut key instead of automatic
1 parent 30b9757 commit 581e56d

File tree

6 files changed

+68
-7
lines changed

6 files changed

+68
-7
lines changed

src/233/main/resources/META-INF/autodev-core.xml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@
2929

3030
<applicationService serviceImplementation="cc.unitmesh.devti.settings.AutoDevSettingsState"/>
3131

32+
<applicationService
33+
serviceInterface="cc.unitmesh.devti.editor.inlay.LLMInlayManager"
34+
serviceImplementation="cc.unitmesh.devti.editor.inlay.LLMInlayManagerImpl"/>
35+
36+
<typedHandler order="first, before completionAutoPopup"
37+
implementation="cc.unitmesh.devti.editor.inlay.TypeOverHandler"/>
38+
39+
3240
<statusBarWidgetFactory id="AIAssistant"
3341
implementation="cc.unitmesh.devti.statusbar.AutoDevStatusBarWidgetFactory"/>
3442

@@ -173,6 +181,11 @@
173181
</applicationListeners>
174182

175183
<extensions defaultExtensionNs="cc.unitmesh">
184+
<autoDevIntention>
185+
<className>cc.unitmesh.devti.intentions.action.CodeCompletionInlayIntention</className>
186+
<bundleName>messages.AutoDevBundle</bundleName>
187+
<categoryKey>intention.category.llm</categoryKey>
188+
</autoDevIntention>
176189
<autoDevIntention>
177190
<className>cc.unitmesh.devti.intentions.action.NewChatWithCodeBaseIntention</className>
178191
<bundleName>messages.AutoDevBundle</bundleName>
@@ -198,6 +211,23 @@
198211
</extensions>
199212

200213
<actions>
214+
<action id="llm.applyInlays"
215+
class="cc.unitmesh.devti.actions.LLMApplyInlaysAction">
216+
<keyboard-shortcut first-keystroke="TAB" keymap="$default"/>
217+
<override-text place="MainMenu" text="Apply Completions to Editor"/>
218+
<override-text place="EditorPopup" text="Accept"/>
219+
</action>
220+
221+
<action id="cc.unitmesh.devti.inlayCompleteCode"
222+
class="cc.unitmesh.devti.actions.InlayCompleteCodeAction"
223+
text="Inlay Complete Code"
224+
description="Inlay complete code!"
225+
>
226+
<keyboard-shortcut keymap="$default" first-keystroke="control PERIOD"/>
227+
228+
<add-to-group group-id="ShowIntentionsGroup" relative-to-action="ShowIntentionActions" anchor="after"/>
229+
</action>
230+
201231
<group id="AutoDevIntentionsActionGroup" class="cc.unitmesh.devti.intentions.IntentionsActionGroup"
202232
icon="cc.unitmesh.devti.AutoDevIcons.AI_COPILOT" searchable="false">
203233

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package cc.unitmesh.devti.actions
2+
3+
import cc.unitmesh.devti.editor.inlay.LLMInlayManager
4+
import com.intellij.openapi.actionSystem.AnAction
5+
import com.intellij.openapi.actionSystem.AnActionEvent
6+
import com.intellij.openapi.actionSystem.CommonDataKeys
7+
import com.intellij.openapi.command.CommandProcessor
8+
9+
/**
10+
* A quick insight action is an action that can be triggered by a user,
11+
* user can input custom text to call with LLM.
12+
*/
13+
class InlayCompleteCodeAction : AnAction() {
14+
override fun actionPerformed(e: AnActionEvent) {
15+
val dataContext = e.dataContext
16+
val editor = dataContext.getData(CommonDataKeys.EDITOR) ?: return
17+
val project = dataContext.getData(CommonDataKeys.PROJECT) ?: return
18+
if (project.isDisposed) return;
19+
20+
val commandProcessor = CommandProcessor.getInstance()
21+
if (commandProcessor.isUndoTransparentActionInProgress) return
22+
23+
val llmInlayManager = LLMInlayManager.getInstance()
24+
llmInlayManager.editorModified(editor)
25+
}
26+
}
27+

src/main/kotlin/cc/unitmesh/devti/editor/inlay/AutoDevEditorListener.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.intellij.openapi.editor.event.*
66
import com.intellij.openapi.editor.ex.util.EditorUtil
77
import com.intellij.openapi.util.Disposer
88

9+
@Deprecated("This listener is for automatic code completion triggering. Due to incomplete user interaction logic and massive development workload, it will be replaced by shortcut key triggering which implement by InlayCodeAction")
910
class AutoDevEditorListener : EditorFactoryListener {
1011
override fun editorCreated(event: EditorFactoryEvent) {
1112
val editor = event.editor

src/main/kotlin/cc/unitmesh/devti/intentions/action/CodeCompletionInlayIntention.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package cc.unitmesh.devti.intentions.action
22

33
import cc.unitmesh.devti.AutoDevBundle
44
import cc.unitmesh.devti.editor.inlay.LLMInlayManager
5-
import cc.unitmesh.devti.intentions.action.base.AbstractChatIntention
5+
import cc.unitmesh.devti.intentions.action.base.ChatBaseIntention
66
import com.intellij.openapi.editor.Editor
77
import com.intellij.openapi.project.Project
88
import com.intellij.psi.PsiFile
99

10-
class CodeCompletionInlayIntention : AbstractChatIntention() {
10+
class CodeCompletionInlayIntention : ChatBaseIntention() {
1111
override fun priority(): Int = 980
1212
override fun getText(): String = AutoDevBundle.message("intentions.chat.inlay.complete.name")
1313
override fun getFamilyName(): String = AutoDevBundle.message("intentions.chat.inlay.complete.family.name")

src/main/kotlin/com/intellij/temporary/inlay/presentation/LLMTextInlayPainter.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
package com.intellij.temporary.inlay.presentation
22

33
import com.intellij.codeInsight.codeVision.CodeVisionEntry
4-
import com.intellij.temporary.inlay.presentation.PresentationUtil.fontMetrics
5-
import com.intellij.temporary.inlay.presentation.PresentationUtil.getFont
6-
import com.intellij.temporary.inlay.presentation.PresentationUtil.getThemeInfoProvider
74
import com.intellij.codeInsight.codeVision.ui.model.RangeCodeVisionModel
85
import com.intellij.codeInsight.codeVision.ui.renderers.painters.ICodeVisionEntryBasePainter
96
import com.intellij.openapi.editor.Editor
107
import com.intellij.openapi.editor.impl.EditorImpl
118
import com.intellij.openapi.editor.markup.TextAttributes
9+
import com.intellij.temporary.inlay.presentation.PresentationUtil.fontMetrics
10+
import com.intellij.temporary.inlay.presentation.PresentationUtil.getFont
11+
import com.intellij.temporary.inlay.presentation.PresentationUtil.getThemeInfoProvider
1212
import com.intellij.ui.paint.EffectPainter2D
1313
import com.intellij.util.ui.GraphicsUtil
1414
import java.awt.*
1515
import java.awt.geom.Rectangle2D
16-
import javax.swing.Icon
1716
import javax.swing.text.StyleConstants
1817
import kotlin.math.ceil
1918

@@ -27,7 +26,7 @@ class LLMTextInlayPainter : ICodeVisionEntryBasePainter<String> {
2726
point: Point,
2827
state: RangeCodeVisionModel.InlayState,
2928
hovered: Boolean,
30-
// hoveredEntry: CodeVisionEntry?
29+
hoveredEntry: CodeVisionEntry?
3130
) {
3231
renderCodeBlock(
3332
editor,

src/main/resources/messages/AutoDevBundle.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,7 @@ autoarkui.name=AutoArkUi
144144
autoarkui.generate=Auto Generate ArkUI
145145
autoarkui.generate.clarify=Clarify Requirements
146146
autoarkui.generate.design=Design Page
147+
148+
# Inlay
149+
intentions.chat.inlay.complete.name = Inlay Complete Code
150+
intentions.chat.inlay.complete.family.name = Inlay Complete code

0 commit comments

Comments
 (0)