Skip to content
Merged
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
69 changes: 9 additions & 60 deletions src/integrations/editor/DiffViewProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ export class DiffViewProvider {
originalContent: string | undefined
private createdDirs: string[] = []
private documentWasOpen = false
private originalViewColumn?: vscode.ViewColumn // Store the original view column
private relPath?: string
private newContent?: string
private activeDiffEditor?: vscode.TextEditor
Expand Down Expand Up @@ -66,22 +65,11 @@ export class DiffViewProvider {
.filter(
(tab) => tab.input instanceof vscode.TabInputText && arePathsEqual(tab.input.uri.fsPath, absolutePath),
)
// Check if the document is already open and store its state
// DO NOT close the original tab to preserve pin status
for (const tab of tabs) {
if (tab.input instanceof vscode.TabInputText && arePathsEqual(tab.input.uri.fsPath, absolutePath)) {
this.originalViewColumn = tab.group.viewColumn
this.documentWasOpen = true
// Ensure the tab is not dirty before proceeding, but don't close it
if (tab.isDirty) {
// Find the document associated with the tab and save it
const doc = vscode.workspace.textDocuments.find((d) => arePathsEqual(d.uri.fsPath, absolutePath))
if (doc) {
await doc.save()
}
}
break // Found the relevant tab, no need to check others
if (!tab.isDirty) {
await vscode.window.tabGroups.close(tab)
}
this.documentWasOpen = true
}
this.activeDiffEditor = await this.openDiffEditor()
this.fadedOverlayController = new DecorationController("fadedOverlay", this.activeDiffEditor)
Expand Down Expand Up @@ -168,31 +156,9 @@ export class DiffViewProvider {
await updatedDocument.save()
}

// Close the diff view first
await vscode.window.showTextDocument(vscode.Uri.file(absolutePath), { preview: false })
await this.closeAllDiffViews()

// If the original document was open, try to focus it.
// VS Code should handle showing the updated content automatically since the file was saved.
if (this.documentWasOpen && this.originalViewColumn) {
// Find the editor for the original document and reveal it
const originalEditor = vscode.window.visibleTextEditors.find(
(editor) =>
arePathsEqual(editor.document.uri.fsPath, absolutePath) &&
editor.viewColumn === this.originalViewColumn,
)
if (originalEditor) {
// Reveal a range (e.g., the start) to ensure focus
const position = new vscode.Position(0, 0)
originalEditor.revealRange(new vscode.Range(position, position), vscode.TextEditorRevealType.AtTop)
} else {
// Fallback if editor not found (shouldn't happen often if documentWasOpen is true)
await vscode.window.showTextDocument(vscode.Uri.file(absolutePath), {
preview: false,
viewColumn: this.originalViewColumn,
})
}
}

/*
Getting diagnostics before and after the file edit is a better approach than
automatically tracking problems in real-time. This method ensures we only
Expand Down Expand Up @@ -271,28 +237,12 @@ export class DiffViewProvider {
await vscode.workspace.applyEdit(edit)
await updatedDocument.save()
console.log(`File ${absolutePath} has been reverted to its original content.`)
// Close the diff view first
await this.closeAllDiffViews()

// If the document was originally open, ensure it's focused.
// The revert logic already applied the original content and saved.
if (this.documentWasOpen && this.originalViewColumn) {
const originalEditor = vscode.window.visibleTextEditors.find(
(editor) =>
arePathsEqual(editor.document.uri.fsPath, absolutePath) &&
editor.viewColumn === this.originalViewColumn,
)
if (originalEditor) {
const position = new vscode.Position(0, 0)
originalEditor.revealRange(new vscode.Range(position, position), vscode.TextEditorRevealType.AtTop)
} else {
// Fallback
await vscode.window.showTextDocument(vscode.Uri.file(absolutePath), {
preview: false,
viewColumn: this.originalViewColumn,
})
}
if (this.documentWasOpen) {
await vscode.window.showTextDocument(vscode.Uri.file(absolutePath), {
preview: false,
})
}
await this.closeAllDiffViews()
}

// edit is done
Expand Down Expand Up @@ -408,7 +358,6 @@ export class DiffViewProvider {
this.originalContent = undefined
this.createdDirs = []
this.documentWasOpen = false
this.originalViewColumn = undefined // Reset stored view column
this.activeDiffEditor = undefined
this.fadedOverlayController = undefined
this.activeLineController = undefined
Expand Down
Loading