Skip to content

Commit f56d7de

Browse files
committed
feat(gui): add auto dev insert to code action
Added a new file `AutoDevInsertToCodeAction.kt` in the `cc.unitmesh.devti.gui.snippet` package. This action allows users to insert selected or all text into the editor. It handles both selection and non-selection scenarios and inserts text at the correct offset. The action is enabled and visible only if the selected text editor is writable.
1 parent 062a352 commit f56d7de

File tree

5 files changed

+62
-0
lines changed

5 files changed

+62
-0
lines changed

java/src/main/kotlin/cc/unitmesh/idea/provider/JavaVersionProvider.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import cc.unitmesh.devti.provider.context.ChatContextProvider
55
import cc.unitmesh.devti.provider.context.ChatCreationContext
66
import cc.unitmesh.idea.detectLanguageLevel
77
import com.intellij.lang.java.JavaLanguage
8+
import com.intellij.openapi.application.runReadAction
89
import com.intellij.openapi.module.Module
910
import com.intellij.openapi.module.ModuleUtilCore
1011
import com.intellij.openapi.project.Project

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,9 @@
291291
<action id="AutoDev.ToolWindow.Snippet.CopyToClipboard"
292292
icon="AllIcons.Actions.Copy"
293293
class="cc.unitmesh.devti.gui.snippet.AutoDevCopyToClipboardAction"/>
294+
<action id="AutoDev.ToolWindow.Snippet.InsertFile"
295+
icon="cc.unitmesh.devti.AutoDevIcons.InsertCode"
296+
class="cc.unitmesh.devti.gui.snippet.AutoDevInsertFileAction"/>
294297
</group>
295298

296299
<group id="AutoDev.ToolWindow.Chat.TitleActions">

src/main/kotlin/cc/unitmesh/devti/AutoDevIcons.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,7 @@ object AutoDevIcons {
3737

3838
@JvmField
3939
val Disliked: Icon = IconLoader.getIcon("/icons/disliked.svg", AutoDevIcons::class.java)
40+
41+
@JvmField
42+
val InsertCode: Icon = IconLoader.getIcon("/icons/insert-code.svg", AutoDevIcons::class.java)
4043
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package cc.unitmesh.devti.gui.snippet
2+
3+
import com.intellij.openapi.actionSystem.ActionUpdateThread
4+
import com.intellij.openapi.actionSystem.AnActionEvent
5+
import com.intellij.openapi.command.WriteCommandAction
6+
import com.intellij.openapi.fileEditor.FileEditorManager
7+
import com.intellij.openapi.project.DumbAwareAction
8+
import com.intellij.openapi.util.TextRange
9+
10+
class AutoDevInsertFileAction : DumbAwareAction() {
11+
override fun actionPerformed(e: AnActionEvent) {
12+
val editor = e.getData(com.intellij.openapi.actionSystem.PlatformDataKeys.EDITOR) ?: return
13+
val selectionModel = if (editor.selectionModel.hasSelection()) editor.selectionModel else null
14+
val textToPaste = selectionModel?.selectedText ?: editor.document.text.trimEnd()
15+
16+
val project = e.project ?: return
17+
18+
val selectedTextEditor = FileEditorManager.getInstance(project).selectedTextEditor
19+
WriteCommandAction.writeCommandAction(project).compute<TextRange, RuntimeException> {
20+
val offset = selectionModel?.selectionStart ?: selectedTextEditor?.document?.textLength ?: return@compute null
21+
selectedTextEditor?.document?.insertString(offset, textToPaste)
22+
TextRange.from(offset, textToPaste.length)
23+
}
24+
}
25+
26+
override fun update(e: AnActionEvent) {
27+
val project = e.project
28+
if (project == null) {
29+
e.presentation.isEnabled = false
30+
return
31+
}
32+
33+
val selectedTextEditor = FileEditorManager.getInstance(project).selectedTextEditor
34+
if (selectedTextEditor == null || !selectedTextEditor.document.isWritable) {
35+
e.presentation.isEnabled = false
36+
} else {
37+
e.presentation.isEnabledAndVisible = true
38+
}
39+
}
40+
41+
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
42+
}
Lines changed: 13 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)