Skip to content

Commit 39d1e71

Browse files
committed
feat(sketch): enhance patch repair UI and add editor retrieval
1 parent 96a1c55 commit 39d1e71

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

core/src/main/kotlin/cc/unitmesh/devti/sketch/ui/patch/DiffLangSketch.kt

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ import com.intellij.openapi.command.UndoConfirmationPolicy
1212
import com.intellij.openapi.command.undo.UndoManager
1313
import com.intellij.openapi.diff.impl.patch.PatchReader
1414
import com.intellij.openapi.diff.impl.patch.TextFilePatch
15+
import com.intellij.openapi.editor.Editor
1516
import com.intellij.openapi.fileEditor.FileEditorManager
1617
import com.intellij.openapi.fileEditor.FileEditorProvider
18+
import com.intellij.openapi.fileEditor.TextEditor
1719
import com.intellij.openapi.project.Project
1820
import com.intellij.openapi.ui.DialogWrapper
1921
import com.intellij.openapi.vcs.changes.patch.AbstractFilePatchInProgress
@@ -22,6 +24,7 @@ import com.intellij.openapi.vcs.changes.patch.MatchPatchPaths
2224
import com.intellij.openapi.vfs.VirtualFile
2325
import com.intellij.psi.PsiDocumentManager
2426
import com.intellij.testFramework.LightVirtualFile
27+
import com.intellij.ui.components.panels.HorizontalLayout
2528
import com.intellij.ui.components.panels.VerticalLayout
2629
import com.intellij.util.containers.MultiMap
2730
import com.intellij.util.ui.JBUI
@@ -57,14 +60,25 @@ class DiffLangSketch(private val myProject: Project, private var patchContent: S
5760
if (filePatches.isEmpty()) {
5861
val msg = "PatchProcessor: no valid patches found, please check the patch content"
5962
AutoDevNotifications.error(myProject, msg)
60-
val editor = FileEditorManager.getInstance(myProject).selectedTextEditor ?: return@invokeLater
61-
val repairButton = JButton("Repair Patch").apply {
63+
val repairButton = JButton("Repair").apply {
64+
icon = AllIcons.Actions.IntentionBulb
65+
toolTipText = "Try to repair the patch content"
66+
67+
val editor = tryGetEditor()
68+
if (editor == null) {
69+
AutoDevNotifications.error(myProject, "Failed to get editor")
70+
return@apply
71+
}
72+
6273
addActionListener {
6374
applyDiffRepairSuggestion(myProject, editor, editor.document.text, patchContent)
6475
}
6576
}
6677

67-
mainPanel.add(repairButton)
78+
val actionPanel = JPanel(HorizontalLayout(4))
79+
actionPanel.add(repairButton)
80+
81+
mainPanel.add(actionPanel)
6882

6983
return@invokeLater
7084
}
@@ -94,6 +108,18 @@ class DiffLangSketch(private val myProject: Project, private var patchContent: S
94108
}
95109
}
96110

111+
private fun tryGetEditor(): Editor? {
112+
var defaultEditor = FileEditorManager.getInstance(myProject).selectedTextEditor ?: return null
113+
114+
val fileRegex = Regex("/patch:(.*)")
115+
val matchResult = fileRegex.find(patchContent)
116+
val filePath = matchResult?.groupValues?.get(1) ?: ""
117+
val virtualFile = myProject.findFile(filePath) ?: return defaultEditor
118+
val fileEditor = FileEditorManager.getInstance(myProject).getSelectedEditor(virtualFile) as? TextEditor
119+
120+
return fileEditor?.editor ?: defaultEditor
121+
}
122+
97123
private fun createHeaderAction(): JComponent {
98124
val acceptButton = JButton(AllIcons.Actions.SetDefault).apply {
99125
toolTipText = AutoDevBundle.message("sketch.patch.action.accept.tooltip")

0 commit comments

Comments
 (0)