@@ -13,7 +13,10 @@ import com.intellij.diff.util.DiffUserDataKeys
1313import com.intellij.ide.BrowserUtil
1414import com.intellij.openapi.application.runInEdt
1515import com.intellij.openapi.fileEditor.FileEditorManager
16+ import com.intellij.openapi.fileEditor.TextEditorWithPreview
17+ import com.intellij.openapi.vfs.LocalFileSystem
1618import com.intellij.openapi.vfs.VfsUtil
19+ import com.intellij.openapi.vfs.originalFileOrSelf
1720import com.intellij.openapi.wm.ToolWindowManager
1821import com.intellij.testFramework.LightVirtualFile
1922import kotlinx.coroutines.withContext
@@ -296,8 +299,11 @@ class DocController(
296299 messenger.sendChatInputEnabledMessage(message.tabId, false )
297300 }
298301
302+ private val diffVirtualFiles = mutableMapOf<String , ChainDiffVirtualFile >()
303+
299304 private suspend fun acceptChanges (message : IncomingDocMessage .FollowupClicked ) {
300305 insertCode(message.tabId)
306+ previewReadmeFile(message.tabId)
301307 }
302308
303309 private suspend fun promptForDocTarget (tabId : String ) {
@@ -418,6 +424,8 @@ class DocController(
418424 request.putUserData(DiffUserDataKeys .FORCE_READ_ONLY , true )
419425
420426 val newDiff = ChainDiffVirtualFile (SimpleDiffRequestChain (request), message.filePath)
427+
428+ diffVirtualFiles[message.filePath] = newDiff
421429 DiffEditorTabFilesManager .getInstance(context.project).showDiffFile(newDiff, true )
422430 }
423431 }
@@ -1037,6 +1045,34 @@ class DocController(
10371045 session.sendDocTelemetryEvent(null , docAcceptanceEvent)
10381046 }
10391047
1048+ private fun previewReadmeFile (tabId : String ) {
1049+ val session = getSessionInfo(tabId)
1050+ var filePaths: List <NewFileZipInfo > = emptyList()
1051+
1052+ when (val state = session.sessionState) {
1053+ is PrepareDocGenerationState -> {
1054+ filePaths = state.filePaths
1055+ }
1056+ }
1057+ if (filePaths.isNotEmpty()) {
1058+ val filePath = filePaths[0 ].zipFilePath
1059+ val existingDiff = diffVirtualFiles[filePath]
1060+
1061+ val newFilePath = session.context.addressableRoot.toNioPath().resolve(filePath)
1062+ val readmeVirtualFile = LocalFileSystem .getInstance().refreshAndFindFileByPath(newFilePath.toString())
1063+
1064+ runInEdt {
1065+ if (existingDiff != null ) {
1066+ FileEditorManager .getInstance(getProject()).closeFile(existingDiff)
1067+ }
1068+ if (readmeVirtualFile != null ) {
1069+ TextEditorWithPreview .openPreviewForFile(getProject(), readmeVirtualFile.originalFileOrSelf())
1070+
1071+ }
1072+ }
1073+ }
1074+ }
1075+
10401076 fun getProject () = context.project
10411077
10421078 private fun getSessionInfo (tabId : String ) = chatSessionStorage.getSession(tabId, context.project)
0 commit comments