diff --git a/src/integrations/editor/DiffViewProvider.ts b/src/integrations/editor/DiffViewProvider.ts index 5acf09ea789c..d42eba082cb3 100644 --- a/src/integrations/editor/DiffViewProvider.ts +++ b/src/integrations/editor/DiffViewProvider.ts @@ -54,8 +54,8 @@ export class DiffViewProvider { // If the file is already open, ensure it's not dirty before getting its // contents. if (fileExists) { - const existingDocument = vscode.workspace.textDocuments.find((doc) => - arePathsEqual(doc.uri.fsPath, absolutePath), + const existingDocument = vscode.workspace.textDocuments.find( + (doc) => doc.uri.scheme === "file" && arePathsEqual(doc.uri.fsPath, absolutePath), ) if (existingDocument && existingDocument.isDirty) { @@ -91,7 +91,10 @@ export class DiffViewProvider { .map((tg) => tg.tabs) .flat() .filter( - (tab) => tab.input instanceof vscode.TabInputText && arePathsEqual(tab.input.uri.fsPath, absolutePath), + (tab) => + tab.input instanceof vscode.TabInputText && + tab.input.uri.scheme === "file" && + arePathsEqual(tab.input.uri.fsPath, absolutePath), ) for (const tab of tabs) { @@ -509,13 +512,14 @@ export class DiffViewProvider { // Listen for document open events - more efficient than scanning all tabs disposables.push( vscode.workspace.onDidOpenTextDocument(async (document) => { - if (arePathsEqual(document.uri.fsPath, uri.fsPath)) { + // Only match file:// scheme documents to avoid git diffs + if (document.uri.scheme === "file" && arePathsEqual(document.uri.fsPath, uri.fsPath)) { // Wait a tick for the editor to be available await new Promise((r) => setTimeout(r, 0)) // Find the editor for this document - const editor = vscode.window.visibleTextEditors.find((e) => - arePathsEqual(e.document.uri.fsPath, uri.fsPath), + const editor = vscode.window.visibleTextEditors.find( + (e) => e.document.uri.scheme === "file" && arePathsEqual(e.document.uri.fsPath, uri.fsPath), ) if (editor) { @@ -529,7 +533,11 @@ export class DiffViewProvider { // Also listen for visible editor changes as a fallback disposables.push( vscode.window.onDidChangeVisibleTextEditors((editors) => { - const editor = editors.find((e) => arePathsEqual(e.document.uri.fsPath, uri.fsPath)) + const editor = editors.find((e) => { + const isFileScheme = e.document.uri.scheme === "file" + const pathMatches = arePathsEqual(e.document.uri.fsPath, uri.fsPath) + return isFileScheme && pathMatches + }) if (editor) { cleanup() resolve(editor) diff --git a/src/integrations/editor/__tests__/DiffViewProvider.spec.ts b/src/integrations/editor/__tests__/DiffViewProvider.spec.ts index 0737b143cda2..e99f7bf9c867 100644 --- a/src/integrations/editor/__tests__/DiffViewProvider.spec.ts +++ b/src/integrations/editor/__tests__/DiffViewProvider.spec.ts @@ -187,7 +187,7 @@ describe("DiffViewProvider", () => { // Setup const mockEditor = { document: { - uri: { fsPath: `${mockCwd}/test.md` }, + uri: { fsPath: `${mockCwd}/test.md`, scheme: "file" }, getText: vi.fn().mockReturnValue(""), lineCount: 0, }, @@ -220,7 +220,7 @@ describe("DiffViewProvider", () => { vi.mocked(vscode.workspace.onDidOpenTextDocument).mockImplementation((callback) => { // Trigger the callback immediately with the document setTimeout(() => { - callback({ uri: { fsPath: `${mockCwd}/test.md` } } as any) + callback({ uri: { fsPath: `${mockCwd}/test.md`, scheme: "file" } } as any) }, 0) return { dispose: vi.fn() } })