Revert "Fix: Preserve editor state and prevent tab unpinning during diffs" (#2956)

Revert "Fix: Preserve editor state and prevent tab unpinning during diffs (#2…"

This reverts commit c2dd743aeb.
This commit is contained in:
Matt Rubens 2025-04-25 16:04:38 -04:00 committed by GitHub
parent 06db547308
commit 547874eed7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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
@ -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)
@ -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
@ -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
@ -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