Skip to content

Commit fc3f8ab

Browse files
Merge master into feature/code-diff
2 parents 6264e17 + 38aed6e commit fc3f8ab

File tree

1 file changed

+38
-40
lines changed

1 file changed

+38
-40
lines changed

packages/amazonq/src/lsp/chat/messages.ts

Lines changed: 38 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ import {
6969
} from '@aws/language-server-runtimes/protocol'
7070
import { v4 as uuidv4 } from 'uuid'
7171
import * as vscode from 'vscode'
72+
import * as path from 'path'
7273
import { Disposable, LanguageClient, Position, TextDocumentIdentifier } from 'vscode-languageclient'
7374
import { AmazonQChatViewProvider } from './webviewProvider'
7475
import {
@@ -81,22 +82,8 @@ import {
8182
SecurityIssueTreeViewProvider,
8283
CodeWhispererConstants,
8384
} from 'aws-core-vscode/codewhisperer'
84-
import {
85-
amazonQDiffScheme,
86-
AmazonQPromptSettings,
87-
messages,
88-
openUrl,
89-
isTextEditor,
90-
globals,
91-
setContext,
92-
} from 'aws-core-vscode/shared'
93-
import {
94-
DefaultAmazonQAppInitContext,
95-
messageDispatcher,
96-
EditorContentController,
97-
ViewDiffMessage,
98-
referenceLogText,
99-
} from 'aws-core-vscode/amazonq'
85+
import { AmazonQPromptSettings, messages, openUrl, isTextEditor, globals, setContext } from 'aws-core-vscode/shared'
86+
import { DefaultAmazonQAppInitContext, messageDispatcher, referenceLogText } from 'aws-core-vscode/amazonq'
10087
import { telemetry } from 'aws-core-vscode/telemetry'
10188
import { isValidResponseError } from './error'
10289
import { decryptResponse, encryptRequest } from '../encryption'
@@ -696,31 +683,42 @@ export function registerMessageListeners(
696683
)
697684

698685
languageClient.onNotification(openFileDiffNotificationType.method, async (params: OpenFileDiffParams) => {
699-
const ecc = new EditorContentController()
700-
const uri = params.originalFileUri
701-
const doc = await vscode.workspace.openTextDocument(uri)
702-
const entireDocumentSelection = new vscode.Selection(
703-
new vscode.Position(0, 0),
704-
new vscode.Position(doc.lineCount - 1, doc.lineAt(doc.lineCount - 1).text.length)
705-
)
706-
const viewDiffMessage: ViewDiffMessage = {
707-
context: {
708-
activeFileContext: {
709-
filePath: params.originalFileUri,
710-
fileText: params.originalFileContent ?? '',
711-
fileLanguage: undefined,
712-
matchPolicy: undefined,
713-
},
714-
focusAreaContext: {
715-
selectionInsideExtendedCodeBlock: entireDocumentSelection,
716-
codeBlock: '',
717-
extendedCodeBlock: '',
718-
names: undefined,
719-
},
720-
},
721-
code: params.fileContent ?? '',
686+
const currentFileUri = vscode.Uri.parse(params.originalFileUri)
687+
const originalContent = params.originalFileContent ?? ''
688+
const fileName = path.basename(currentFileUri.fsPath)
689+
690+
// Use custom scheme to avoid adding to recent files
691+
const originalFileUri = vscode.Uri.parse(`amazonq-diff:${fileName}_original_${Date.now()}`)
692+
693+
// Register content provider for the custom scheme
694+
const disposable = vscode.workspace.registerTextDocumentContentProvider('amazonq-diff', {
695+
provideTextDocumentContent: () => originalContent,
696+
})
697+
698+
try {
699+
// Open diff view with custom scheme URI (left) vs current file (right)
700+
await vscode.commands.executeCommand(
701+
'vscode.diff',
702+
originalFileUri,
703+
currentFileUri,
704+
`${vscode.workspace.asRelativePath(currentFileUri)} (Original ↔ Current, Editable)`,
705+
{ preview: false }
706+
)
707+
708+
// Clean up content provider when diff view is closed
709+
const cleanupDisposable = vscode.window.onDidChangeVisibleTextEditors(() => {
710+
const isDiffViewOpen = vscode.window.visibleTextEditors.some(
711+
(editor) => editor.document.uri.toString() === originalFileUri.toString()
712+
)
713+
if (!isDiffViewOpen) {
714+
disposable.dispose()
715+
cleanupDisposable.dispose()
716+
}
717+
})
718+
} catch (error) {
719+
disposable.dispose()
720+
languageClient.error(`[VSCode Client] Failed to open diff view: ${error}`)
722721
}
723-
await ecc.viewDiff(viewDiffMessage, amazonQDiffScheme)
724722
})
725723

726724
languageClient.onNotification(chatUpdateNotificationType.method, async (params: ChatUpdateParams) => {

0 commit comments

Comments
 (0)