Skip to content

Commit e16039a

Browse files
Merge master into feature/LSP-gamma
2 parents 2836aca + 38aed6e commit e16039a

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'
@@ -664,31 +651,42 @@ export function registerMessageListeners(
664651
)
665652

666653
languageClient.onNotification(openFileDiffNotificationType.method, async (params: OpenFileDiffParams) => {
667-
const ecc = new EditorContentController()
668-
const uri = params.originalFileUri
669-
const doc = await vscode.workspace.openTextDocument(uri)
670-
const entireDocumentSelection = new vscode.Selection(
671-
new vscode.Position(0, 0),
672-
new vscode.Position(doc.lineCount - 1, doc.lineAt(doc.lineCount - 1).text.length)
673-
)
674-
const viewDiffMessage: ViewDiffMessage = {
675-
context: {
676-
activeFileContext: {
677-
filePath: params.originalFileUri,
678-
fileText: params.originalFileContent ?? '',
679-
fileLanguage: undefined,
680-
matchPolicy: undefined,
681-
},
682-
focusAreaContext: {
683-
selectionInsideExtendedCodeBlock: entireDocumentSelection,
684-
codeBlock: '',
685-
extendedCodeBlock: '',
686-
names: undefined,
687-
},
688-
},
689-
code: params.fileContent ?? '',
654+
const currentFileUri = vscode.Uri.parse(params.originalFileUri)
655+
const originalContent = params.originalFileContent ?? ''
656+
const fileName = path.basename(currentFileUri.fsPath)
657+
658+
// Use custom scheme to avoid adding to recent files
659+
const originalFileUri = vscode.Uri.parse(`amazonq-diff:${fileName}_original_${Date.now()}`)
660+
661+
// Register content provider for the custom scheme
662+
const disposable = vscode.workspace.registerTextDocumentContentProvider('amazonq-diff', {
663+
provideTextDocumentContent: () => originalContent,
664+
})
665+
666+
try {
667+
// Open diff view with custom scheme URI (left) vs current file (right)
668+
await vscode.commands.executeCommand(
669+
'vscode.diff',
670+
originalFileUri,
671+
currentFileUri,
672+
`${vscode.workspace.asRelativePath(currentFileUri)} (Original ↔ Current, Editable)`,
673+
{ preview: false }
674+
)
675+
676+
// Clean up content provider when diff view is closed
677+
const cleanupDisposable = vscode.window.onDidChangeVisibleTextEditors(() => {
678+
const isDiffViewOpen = vscode.window.visibleTextEditors.some(
679+
(editor) => editor.document.uri.toString() === originalFileUri.toString()
680+
)
681+
if (!isDiffViewOpen) {
682+
disposable.dispose()
683+
cleanupDisposable.dispose()
684+
}
685+
})
686+
} catch (error) {
687+
disposable.dispose()
688+
languageClient.error(`[VSCode Client] Failed to open diff view: ${error}`)
690689
}
691-
await ecc.viewDiff(viewDiffMessage, amazonQDiffScheme)
692690
})
693691

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

0 commit comments

Comments
 (0)