Skip to content

Commit 14db919

Browse files
authored
Move notebook diff class into its own file (microsoft#242380)
1 parent f884804 commit 14db919

File tree

3 files changed

+72
-59
lines changed

3 files changed

+72
-59
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { DisposableStore } from '../../../../../base/common/lifecycle.js';
7+
import { computeDiff } from '../../../notebook/browser/diff/notebookDiffViewModel.js';
8+
import { INotebookEditorModelResolverService } from '../../../notebook/common/notebookEditorModelResolverService.js';
9+
import { INotebookLoggingService } from '../../../notebook/common/notebookLoggingService.js';
10+
import { INotebookEditorWorkerService } from '../../../notebook/common/services/notebookWorkerService.js';
11+
import { IEditSessionEntryDiff } from '../../common/chatEditingService.js';
12+
import { ISnapshotEntry } from './chatEditingModifiedFileEntry.js';
13+
14+
export class ChatEditingModifiedNotebookDiff {
15+
static NewModelCounter: number = 0;
16+
constructor(
17+
private readonly original: ISnapshotEntry,
18+
private readonly modified: ISnapshotEntry,
19+
@INotebookEditorWorkerService private readonly notebookEditorWorkerService: INotebookEditorWorkerService,
20+
@INotebookLoggingService private readonly notebookLoggingService: INotebookLoggingService,
21+
@INotebookEditorModelResolverService private readonly notebookEditorModelService: INotebookEditorModelResolverService,
22+
) {
23+
24+
}
25+
26+
async computeDiff(): Promise<IEditSessionEntryDiff> {
27+
28+
let added = 0;
29+
let removed = 0;
30+
31+
const disposables = new DisposableStore();
32+
try {
33+
const [modifiedRef, originalRef] = await Promise.all([
34+
this.notebookEditorModelService.resolve(this.modified.snapshotUri),
35+
this.notebookEditorModelService.resolve(this.original.snapshotUri)
36+
]);
37+
disposables.add(modifiedRef);
38+
disposables.add(originalRef);
39+
const notebookDiff = await this.notebookEditorWorkerService.computeDiff(this.original.snapshotUri, this.modified.snapshotUri);
40+
const result = computeDiff(originalRef.object.notebook, modifiedRef.object.notebook, notebookDiff);
41+
result.cellDiffInfo.forEach(diff => {
42+
switch (diff.type) {
43+
case 'modified':
44+
case 'insert':
45+
added++;
46+
break;
47+
case 'delete':
48+
removed++;
49+
break;
50+
default:
51+
break;
52+
}
53+
});
54+
} catch (e) {
55+
this.notebookLoggingService.error('Notebook Chat', 'Error computing diff:\n' + e);
56+
} finally {
57+
disposables.dispose();
58+
}
59+
60+
return {
61+
added,
62+
removed,
63+
identical: added === 0 && removed === 0,
64+
quitEarly: false,
65+
modifiedURI: this.modified.snapshotUri,
66+
originalURI: this.original.snapshotUri,
67+
};
68+
}
69+
}

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

Lines changed: 1 addition & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ import { INotebookEditorModelResolverService } from '../../../notebook/common/no
5353
import { INotebookLoggingService } from '../../../notebook/common/notebookLoggingService.js';
5454
import { INotebookService } from '../../../notebook/common/notebookService.js';
5555
import { INotebookEditorWorkerService } from '../../../notebook/common/services/notebookWorkerService.js';
56-
import { ChatEditKind, IEditSessionEntryDiff, IModifiedFileEntryEditorIntegration, WorkingSetEntryState } from '../../common/chatEditingService.js';
56+
import { ChatEditKind, IModifiedFileEntryEditorIntegration, WorkingSetEntryState } from '../../common/chatEditingService.js';
5757
import { IChatResponseModel } from '../../common/chatModel.js';
5858
import { IChatService } from '../../common/chatService.js';
5959
import { IDocumentDiff2 } from './chatEditingCodeEditorIntegration.js';
@@ -67,63 +67,6 @@ const noopKeep = () => Promise.resolve(true);
6767
const noopUndo = () => Promise.resolve(true);
6868
const SnapshotLanguageId = 'VSCodeChatNotebookSnapshotLanguage';
6969

70-
export class ChatEditingModifiedNotebookDiff {
71-
static NewModelCounter: number = 0;
72-
constructor(
73-
private readonly original: ISnapshotEntry,
74-
private readonly modified: ISnapshotEntry,
75-
@INotebookEditorWorkerService private readonly notebookEditorWorkerService: INotebookEditorWorkerService,
76-
@INotebookLoggingService private readonly notebookLoggingService: INotebookLoggingService,
77-
@INotebookEditorModelResolverService private readonly notebookEditorModelService: INotebookEditorModelResolverService,
78-
) {
79-
80-
}
81-
82-
async computeDiff(): Promise<IEditSessionEntryDiff> {
83-
84-
let added = 0;
85-
let removed = 0;
86-
87-
const disposables = new DisposableStore();
88-
try {
89-
const [modifiedRef, originalRef] = await Promise.all([
90-
this.notebookEditorModelService.resolve(this.modified.snapshotUri),
91-
this.notebookEditorModelService.resolve(this.original.snapshotUri)
92-
]);
93-
disposables.add(modifiedRef);
94-
disposables.add(originalRef);
95-
const notebookDiff = await this.notebookEditorWorkerService.computeDiff(this.original.snapshotUri, this.modified.snapshotUri);
96-
const result = computeDiff(originalRef.object.notebook, modifiedRef.object.notebook, notebookDiff);
97-
result.cellDiffInfo.forEach(diff => {
98-
switch (diff.type) {
99-
case 'modified':
100-
case 'insert':
101-
added++;
102-
break;
103-
case 'delete':
104-
removed++;
105-
break;
106-
default:
107-
break;
108-
}
109-
});
110-
} catch (e) {
111-
this.notebookLoggingService.error('Notebook Chat', 'Error computing diff:\n' + e);
112-
} finally {
113-
disposables.dispose();
114-
}
115-
116-
return {
117-
added,
118-
removed,
119-
identical: added === 0 && removed === 0,
120-
quitEarly: false,
121-
modifiedURI: this.modified.snapshotUri,
122-
originalURI: this.original.snapshotUri,
123-
};
124-
}
125-
}
126-
12770
export class ChatEditingModifiedNotebookEntry extends AbstractChatEditingModifiedFileEntry {
12871
static NewModelCounter: number = 0;
12972
private readonly modifiedModel: NotebookTextModel;

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@ import { AbstractChatEditingModifiedFileEntry, IModifiedEntryTelemetryInfo, ISna
4949
import { ChatEditingModifiedDocumentEntry } from './chatEditingModifiedDocumentEntry.js';
5050
import { ChatEditingTextModelContentProvider } from './chatEditingTextModelContentProviders.js';
5151
import { CellUri, ICellEditOperation } from '../../../notebook/common/notebookCommon.js';
52-
import { ChatEditingModifiedNotebookDiff, ChatEditingModifiedNotebookEntry } from './chatEditingModifiedNotebookEntry.js';
52+
import { ChatEditingModifiedNotebookEntry } from './chatEditingModifiedNotebookEntry.js';
5353
import { CancellationToken } from '../../../../../base/common/cancellation.js';
54+
import { ChatEditingModifiedNotebookDiff } from './chatEditingModifiedNotebookDiff.js';
5455

5556
const STORAGE_CONTENTS_FOLDER = 'contents';
5657
const STORAGE_STATE_FILE = 'state.json';

0 commit comments

Comments
 (0)