From 8db7ee64cc2ee281771dd2e98b569eb27715717f Mon Sep 17 00:00:00 2001 From: Johannes Date: Tue, 1 Apr 2025 11:48:22 +0200 Subject: [PATCH] document entry cannot assume it's always back by something on disk --- .../chatEditingModifiedDocumentEntry.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.ts b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.ts index 2bb67456864..876e96165ba 100644 --- a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.ts +++ b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.ts @@ -38,7 +38,7 @@ import { editorSelectionBackground } from '../../../../../platform/theme/common/ import { IUndoRedoElement, IUndoRedoService } from '../../../../../platform/undoRedo/common/undoRedo.js'; import { SaveReason, IEditorPane } from '../../../../common/editor.js'; import { IFilesConfigurationService } from '../../../../services/filesConfiguration/common/filesConfigurationService.js'; -import { IResolvedTextFileEditorModel, ITextFileService, stringToSnapshot } from '../../../../services/textfile/common/textfiles.js'; +import { isTextFileEditorModel, ITextFileService, stringToSnapshot } from '../../../../services/textfile/common/textfiles.js'; import { ICellEditOperation } from '../../../notebook/common/notebookCommon.js'; import { IModifiedFileEntry, ChatEditKind, ModifiedFileEntryState, IModifiedFileEntryEditorIntegration } from '../../common/chatEditingService.js'; import { IChatResponseModel } from '../../common/chatModel.js'; @@ -76,7 +76,7 @@ export class ChatEditingModifiedDocumentEntry extends AbstractChatEditingModifie private readonly originalModel: ITextModel; private readonly modifiedModel: ITextModel; - readonly docFileEditorModel: IResolvedTextFileEditorModel; + private readonly _docFileEditorModel: IResolvedTextEditorModel; private _edit: OffsetEdit = OffsetEdit.empty; private _isEditFromUs: boolean = false; @@ -128,7 +128,7 @@ export class ChatEditingModifiedDocumentEntry extends AbstractChatEditingModifie instantiationService ); - this.docFileEditorModel = this._register(resourceRef).object as IResolvedTextFileEditorModel; + this._docFileEditorModel = this._register(resourceRef).object; this.modifiedModel = resourceRef.object.textEditorModel; this.originalURI = ChatEditingTextModelContentProvider.getFileURI(telemetryInfo.sessionId, this.entryId, this.modifiedURI.path); @@ -451,15 +451,17 @@ export class ChatEditingModifiedDocumentEntry extends AbstractChatEditingModifie protected override async _doReject(tx: ITransaction | undefined): Promise { if (this.createdInRequestId === this._telemetryInfo.requestId) { - await this.docFileEditorModel.revert({ soft: true }); - await this._fileService.del(this.modifiedURI); + if (isTextFileEditorModel(this._docFileEditorModel)) { + await this._docFileEditorModel.revert({ soft: true }); + await this._fileService.del(this.modifiedURI); + } this._onDidDelete.fire(); } else { this._setDocValue(this.originalModel.getValue()); - if (this._allEditsAreFromUs) { + if (this._allEditsAreFromUs && isTextFileEditorModel(this._docFileEditorModel)) { // save the file after discarding so that the dirty indicator goes away // and so that an intermediate saved state gets reverted - await this.docFileEditorModel.save({ reason: SaveReason.EXPLICIT, skipSaveParticipants: true }); + await this._docFileEditorModel.save({ reason: SaveReason.EXPLICIT, skipSaveParticipants: true }); } await this._collapse(tx); }