Skip to content

Commit c7a5cfe

Browse files
authored
chat: fix some state handling with modified notebook entries (microsoft#242356)
- Fix creation not `await`ed allowing errors to bubble - Fix notebooks delete/move not being angled (make the entry kind correct and listen to delete events for the notebook) cc @DonJayamanne
1 parent 0119b6a commit c7a5cfe

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

.github/workflows/telemetry.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ jobs:
1414
node-version: 'lts/*'
1515

1616
- name: 'Run vscode-telemetry-extractor'
17-
run: 'npx --package=@vscode/telemetry-extractor --yes vscode-telemetry-extractor -s .'
17+
run: 'npx --package=@vscode/telemetry-extractor@1.14.0 --yes vscode-telemetry-extractor -s .'
1818
env:
1919
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,16 @@ export class ChatEditingModifiedNotebookEntry extends AbstractChatEditingModifie
260260
this.initialContent = initialContent;
261261
this._register(this.modifiedModel.onDidChangeContent(this.mirrorNotebookEdits, this));
262262
this._maxModifiedLineNumbers.set(this.modifiedModel.cells.map(() => 0), undefined);
263+
264+
if (this.modifiedURI.scheme !== Schemas.untitled) {
265+
this._register(this._fileService.watch(this.modifiedURI));
266+
this._register(this._fileService.onDidFilesChange(e => {
267+
if (e.affects(this.modifiedURI) && kind === ChatEditKind.Created && e.gotDeleted()) {
268+
this._onDidDelete.fire();
269+
}
270+
}));
271+
}
272+
263273
const diffs = cellDiffInfo.map((diff, i) => {
264274
switch (diff.type) {
265275
case 'unchanged': {

src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,15 @@ import { IEditorService } from '../../../../services/editor/common/editorService
4141
import { ITextFileService } from '../../../../services/textfile/common/textfiles.js';
4242
import { MultiDiffEditor } from '../../../multiDiffEditor/browser/multiDiffEditor.js';
4343
import { MultiDiffEditorInput } from '../../../multiDiffEditor/browser/multiDiffEditorInput.js';
44+
import { CellUri, ICellEditOperation } from '../../../notebook/common/notebookCommon.js';
4445
import { INotebookService } from '../../../notebook/common/notebookService.js';
4546
import { ChatEditingSessionChangeType, ChatEditingSessionState, ChatEditKind, getMultiDiffSourceUri, IChatEditingSession, IEditSessionEntryDiff, IModifiedFileEntry, IStreamingEdits, WorkingSetDisplayMetadata, WorkingSetEntryRemovalReason, WorkingSetEntryState } from '../../common/chatEditingService.js';
4647
import { IChatRequestDisablement, IChatResponseModel } from '../../common/chatModel.js';
4748
import { IChatService } from '../../common/chatService.js';
48-
import { AbstractChatEditingModifiedFileEntry, IModifiedEntryTelemetryInfo, ISnapshotEntry } from './chatEditingModifiedFileEntry.js';
4949
import { ChatEditingModifiedDocumentEntry } from './chatEditingModifiedDocumentEntry.js';
50-
import { ChatEditingTextModelContentProvider } from './chatEditingTextModelContentProviders.js';
51-
import { CellUri, ICellEditOperation } from '../../../notebook/common/notebookCommon.js';
50+
import { AbstractChatEditingModifiedFileEntry, IModifiedEntryTelemetryInfo, ISnapshotEntry } from './chatEditingModifiedFileEntry.js';
5251
import { ChatEditingModifiedNotebookDiff, ChatEditingModifiedNotebookEntry } from './chatEditingModifiedNotebookEntry.js';
52+
import { ChatEditingTextModelContentProvider } from './chatEditingTextModelContentProviders.js';
5353

5454
const STORAGE_CONTENTS_FOLDER = 'contents';
5555
const STORAGE_STATE_FILE = 'state.json';
@@ -1049,7 +1049,7 @@ export class ChatEditingSession extends Disposable implements IChatEditingSessio
10491049
try {
10501050
// If a notebook isn't open, then use the old synchronization approach.
10511051
if (this._notebookService.hasSupportedNotebooks(notebookUri) && (this._notebookService.getNotebookTextModel(notebookUri) || ChatEditingModifiedNotebookEntry.canHandleSnapshotContent(initialContent))) {
1052-
return ChatEditingModifiedNotebookEntry.create(notebookUri, multiDiffEntryDelegate, telemetryInfo, chatKind, initialContent, this._instantiationService);
1052+
return await ChatEditingModifiedNotebookEntry.create(notebookUri, multiDiffEntryDelegate, telemetryInfo, chatKind, initialContent, this._instantiationService);
10531053
} else {
10541054
const ref = await this._textModelService.createModelReference(resource);
10551055
return this._instantiationService.createInstance(ChatEditingModifiedDocumentEntry, ref, multiDiffEntryDelegate, telemetryInfo, chatKind, initialContent);
@@ -1062,7 +1062,7 @@ export class ChatEditingSession extends Disposable implements IChatEditingSessio
10621062
await this._bulkEditService.apply({ edits: [{ newResource: resource }] });
10631063
this._editorService.openEditor({ resource, options: { inactive: true, preserveFocus: true, pinned: true } });
10641064
if (this._notebookService.hasSupportedNotebooks(notebookUri)) {
1065-
return ChatEditingModifiedNotebookEntry.create(resource, multiDiffEntryDelegate, telemetryInfo, chatKind, initialContent, this._instantiationService);
1065+
return ChatEditingModifiedNotebookEntry.create(resource, multiDiffEntryDelegate, telemetryInfo, ChatEditKind.Created, initialContent, this._instantiationService);
10661066
} else {
10671067
return this._createModifiedFileEntry(resource, telemetryInfo, true, initialContent);
10681068
}

0 commit comments

Comments
 (0)