From ad0484d6d1c2d56ac2976f3d2fa8894c416f310c Mon Sep 17 00:00:00 2001 From: "vs-code-engineering[bot]" <122617954+vs-code-engineering[bot]@users.noreply.github.com> Date: Fri, 17 Jul 2026 15:17:20 +0000 Subject: [PATCH] fix: skip NES streamed edits for unknown target documents (fixes #326359) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../inlineEdits/node/nextEditProvider.ts | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/extensions/copilot/src/extension/inlineEdits/node/nextEditProvider.ts b/extensions/copilot/src/extension/inlineEdits/node/nextEditProvider.ts index 820a23eab04d9c..2023827c04719e 100644 --- a/extensions/copilot/src/extension/inlineEdits/node/nextEditProvider.ts +++ b/extensions/copilot/src/extension/inlineEdits/node/nextEditProvider.ts @@ -111,6 +111,8 @@ interface DocState { /** Arguments for {@link NextEditProvider._rebaseAndCacheStreamedEdit}. */ interface RebaseAndCacheStreamedEditArgs { readonly statePerDoc: CachedFunction; + /** Predicate identifying documents `statePerDoc` can resolve without throwing. */ + readonly isKnownDocument: (id: DocumentId) => boolean; readonly streamedEdit: StreamedEdit; /** Zero-based index of this edit within the stream. */ readonly ithEdit: number; @@ -127,7 +129,14 @@ interface RebaseAndCacheStreamedEditArgs { readonly logger: ILogger; } -function createDocStateLookupMap(projectedDocuments: readonly ProcessedDoc[], xtabEditHistory: readonly IXtabHistoryEntry[]): CachedFunction { +function createDocStateLookupMap(projectedDocuments: readonly ProcessedDoc[], xtabEditHistory: readonly IXtabHistoryEntry[]): { statePerDoc: CachedFunction; isKnownDocument: (id: DocumentId) => boolean } { + const isKnownDocument = (id: DocumentId): boolean => { + if (projectedDocuments.some(d => d.nextEditDoc.id === id)) { + return true; + } + return xtabEditHistory.some(entry => entry.docId === id && entry.kind === 'edit'); + }; + const statePerDoc = new CachedFunction((id: DocumentId) => { const doc = projectedDocuments.find(d => d.nextEditDoc.id === id); if (!doc) { @@ -158,7 +167,7 @@ function createDocStateLookupMap(projectedDocuments: readonly ProcessedDoc[], xt }); - return statePerDoc; + return { statePerDoc, isKnownDocument }; } /** @@ -771,7 +780,16 @@ export class NextEditProvider extends Disposable implements INextEditProvider