@@ -69,6 +69,7 @@ import {
69
69
} from '@aws/language-server-runtimes/protocol'
70
70
import { v4 as uuidv4 } from 'uuid'
71
71
import * as vscode from 'vscode'
72
+ import * as path from 'path'
72
73
import { Disposable , LanguageClient , Position , TextDocumentIdentifier } from 'vscode-languageclient'
73
74
import { AmazonQChatViewProvider } from './webviewProvider'
74
75
import {
@@ -81,22 +82,8 @@ import {
81
82
SecurityIssueTreeViewProvider ,
82
83
CodeWhispererConstants ,
83
84
} 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'
100
87
import { telemetry } from 'aws-core-vscode/telemetry'
101
88
import { isValidResponseError } from './error'
102
89
import { decryptResponse , encryptRequest } from '../encryption'
@@ -664,31 +651,42 @@ export function registerMessageListeners(
664
651
)
665
652
666
653
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 } ` )
690
689
}
691
- await ecc . viewDiff ( viewDiffMessage , amazonQDiffScheme )
692
690
} )
693
691
694
692
languageClient . onNotification ( chatUpdateNotificationType . method , ( params : ChatUpdateParams ) => {
0 commit comments