From 7e41855f7a45acd7f8c7d74fdee8ba53f177059e Mon Sep 17 00:00:00 2001 From: Roo Code Date: Sat, 15 Nov 2025 16:39:03 +0000 Subject: [PATCH] fix: always center cursor position after closing diff view Changed from InCenterIfOutsideViewport to InCenter to ensure the cursor position is always properly centered when returning from the diff viewer, regardless of whether VS Code considers it "visible" or not. This fixes the issue where clicking reject would not properly scroll to the last viewed position in the diff viewer. --- src/integrations/editor/DiffViewProvider.ts | 8 ++++---- .../editor/__tests__/DiffViewProvider.spec.ts | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/integrations/editor/DiffViewProvider.ts b/src/integrations/editor/DiffViewProvider.ts index 859f8a1584..1d578240ab 100644 --- a/src/integrations/editor/DiffViewProvider.ts +++ b/src/integrations/editor/DiffViewProvider.ts @@ -232,12 +232,12 @@ export class DiffViewProvider { // Then reveal the range to ensure it's visible if (selection && !selection.isEmpty) { // If there's an actual selection, reveal it - editor.revealRange(selection, vscode.TextEditorRevealType.InCenterIfOutsideViewport) + editor.revealRange(selection, vscode.TextEditorRevealType.InCenter) } else if (selection) { // If just a cursor position, reveal that position editor.revealRange( new vscode.Range(selection.active, selection.active), - vscode.TextEditorRevealType.InCenterIfOutsideViewport, + vscode.TextEditorRevealType.InCenter, ) } else if (visibleRanges && visibleRanges.length > 0) { // Fallback to visible ranges if no selection @@ -462,12 +462,12 @@ export class DiffViewProvider { // Then reveal the range to ensure it's visible if (selection && !selection.isEmpty) { // If there's an actual selection, reveal it - editor.revealRange(selection, vscode.TextEditorRevealType.InCenterIfOutsideViewport) + editor.revealRange(selection, vscode.TextEditorRevealType.InCenter) } else if (selection) { // If just a cursor position, reveal that position editor.revealRange( new vscode.Range(selection.active, selection.active), - vscode.TextEditorRevealType.InCenterIfOutsideViewport, + vscode.TextEditorRevealType.InCenter, ) } else if (visibleRanges && visibleRanges.length > 0) { // Fallback to visible ranges if no selection diff --git a/src/integrations/editor/__tests__/DiffViewProvider.spec.ts b/src/integrations/editor/__tests__/DiffViewProvider.spec.ts index b106926a2a..7f8a078b78 100644 --- a/src/integrations/editor/__tests__/DiffViewProvider.spec.ts +++ b/src/integrations/editor/__tests__/DiffViewProvider.spec.ts @@ -600,7 +600,7 @@ describe("DiffViewProvider", () => { start: { line: 18, character: 10 }, end: { line: 18, character: 10 }, }), - vscode.TextEditorRevealType.InCenterIfOutsideViewport, + vscode.TextEditorRevealType.InCenter, ) expect(result.newProblemsMessage).toBe("") @@ -623,7 +623,7 @@ describe("DiffViewProvider", () => { // Verify the full selection range was revealed expect(mockEditor.revealRange).toHaveBeenCalledWith( selectionWithRange, - vscode.TextEditorRevealType.InCenterIfOutsideViewport, + vscode.TextEditorRevealType.InCenter, ) expect(result.newProblemsMessage).toBe("") @@ -665,7 +665,7 @@ describe("DiffViewProvider", () => { start: { line: 18, character: 10 }, end: { line: 18, character: 10 }, }), - vscode.TextEditorRevealType.InCenterIfOutsideViewport, + vscode.TextEditorRevealType.InCenter, ) }) @@ -682,7 +682,7 @@ describe("DiffViewProvider", () => { start: { line: 18, character: 10 }, end: { line: 18, character: 10 }, }), - vscode.TextEditorRevealType.InCenterIfOutsideViewport, + vscode.TextEditorRevealType.InCenter, ) expect(result.newProblemsMessage).toBe("") @@ -701,7 +701,7 @@ describe("DiffViewProvider", () => { start: { line: 18, character: 10 }, end: { line: 18, character: 10 }, }), - vscode.TextEditorRevealType.InCenterIfOutsideViewport, + vscode.TextEditorRevealType.InCenter, ) expect(result.newProblemsMessage).toBe("")