Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"type" : "bugfix",
"description" : "Amazon Q /doc: close diff tab and open README file in preview mode after user accept changes"
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import com.intellij.diff.util.DiffUserDataKeys
import com.intellij.ide.BrowserUtil
import com.intellij.openapi.application.runInEdt
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.fileEditor.TextEditorWithPreview
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.wm.ToolWindowManager
import com.intellij.testFramework.LightVirtualFile
Expand Down Expand Up @@ -298,8 +300,11 @@ class DocController(
messenger.sendChatInputEnabledMessage(message.tabId, false)
}

private val diffVirtualFiles = mutableMapOf<String, ChainDiffVirtualFile>()

private suspend fun acceptChanges(message: IncomingDocMessage.FollowupClicked) {
insertCode(message.tabId)
previewReadmeFile(message.tabId)
}

private suspend fun promptForDocTarget(tabId: String) {
Expand Down Expand Up @@ -420,6 +425,8 @@ class DocController(
request.putUserData(DiffUserDataKeys.FORCE_READ_ONLY, true)

val newDiff = ChainDiffVirtualFile(SimpleDiffRequestChain(request), message.filePath)

diffVirtualFiles[message.filePath] = newDiff
DiffEditorTabFilesManager.getInstance(context.project).showDiffFile(newDiff, true)
}
}
Expand Down Expand Up @@ -1047,6 +1054,34 @@ class DocController(
session.sendDocTelemetryEvent(null, docAcceptanceEvent)
}

private fun previewReadmeFile(tabId: String) {
val session = getSessionInfo(tabId)
var filePaths: List<NewFileZipInfo> = emptyList()

when (val state = session.sessionState) {
is PrepareDocGenerationState -> {
filePaths = state.filePaths
}
}

if (filePaths.isNotEmpty()) {
val filePath = filePaths[0].zipFilePath
val existingDiff = diffVirtualFiles[filePath]

val newFilePath = session.context.addressableRoot.toNioPath().resolve(filePath)
val readmeVirtualFile = LocalFileSystem.getInstance().refreshAndFindFileByPath(newFilePath.toString())

runInEdt {
if (existingDiff != null) {
FileEditorManager.getInstance(getProject()).closeFile(existingDiff)
}
if (readmeVirtualFile != null) {
TextEditorWithPreview.openPreviewForFile(getProject(), readmeVirtualFile)
}
}
}
}

fun getProject() = context.project

private fun getSessionInfo(tabId: String) = chatSessionStorage.getSession(tabId, context.project)
Expand Down
Loading