Skip to content

Commit 07025f0

Browse files
authored
Remove notebook editor edit api (microsoft#158988)
Fixes microsoft#149181
1 parent 86d5fc5 commit 07025f0

File tree

11 files changed

+38
-238
lines changed

11 files changed

+38
-238
lines changed

extensions/notebook-renderers/tsconfig.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
},
99
"include": [
1010
"src/**/*",
11-
"../../src/vscode-dts/vscode.d.ts",
12-
"../../src/vscode-dts/vscode.proposed.notebookEditorEdit.d.ts",
11+
"../../src/vscode-dts/vscode.d.ts"
1312
]
1413
}

extensions/vscode-api-tests/src/singlefolder-tests/notebook.api.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ const apiTestContentProvider: vscode.NotebookContentProvider = {
294294
await provideCalled;
295295

296296
const edit = new vscode.WorkspaceEdit();
297-
edit.replaceNotebookCellMetadata(notebook.uri, 0, { inputCollapsed: true });
297+
edit.set(notebook.uri, [vscode.NotebookEdit.updateCellMetadata(0, { inputCollapsed: true })]);
298298
await vscode.workspace.applyEdit(edit);
299299
await provideCalled;
300300
});

extensions/vscode-api-tests/src/singlefolder-tests/notebook.document.test.ts

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ suite('Notebook Document', function () {
173173
// inserting two new cells
174174
{
175175
const edit = new vscode.WorkspaceEdit();
176-
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, 0), [{
176+
edit.set(document.uri, [vscode.NotebookEdit.replaceCells(new vscode.NotebookRange(0, 0), [{
177177
kind: vscode.NotebookCellKind.Markup,
178178
languageId: 'markdown',
179179
metadata: undefined,
@@ -185,7 +185,7 @@ suite('Notebook Document', function () {
185185
metadata: undefined,
186186
outputs: [],
187187
value: 'new_code'
188-
}]);
188+
}])]);
189189

190190
const success = await vscode.workspace.applyEdit(edit);
191191
assert.strictEqual(success, true);
@@ -198,8 +198,10 @@ suite('Notebook Document', function () {
198198
// deleting cell 1 and 3
199199
{
200200
const edit = new vscode.WorkspaceEdit();
201-
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, 1), []);
202-
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(2, 3), []);
201+
edit.set(document.uri, [
202+
vscode.NotebookEdit.replaceCells(new vscode.NotebookRange(0, 1), []),
203+
vscode.NotebookEdit.replaceCells(new vscode.NotebookRange(2, 3), [])
204+
]);
203205
const success = await vscode.workspace.applyEdit(edit);
204206
assert.strictEqual(success, true);
205207
}
@@ -210,7 +212,7 @@ suite('Notebook Document', function () {
210212
// replacing all cells
211213
{
212214
const edit = new vscode.WorkspaceEdit();
213-
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, 1), [{
215+
edit.set(document.uri, [vscode.NotebookEdit.replaceCells(new vscode.NotebookRange(0, 1), [{
214216
kind: vscode.NotebookCellKind.Markup,
215217
languageId: 'markdown',
216218
metadata: undefined,
@@ -222,7 +224,7 @@ suite('Notebook Document', function () {
222224
metadata: undefined,
223225
outputs: [],
224226
value: 'new2_code'
225-
}]);
227+
}])]);
226228
const success = await vscode.workspace.applyEdit(edit);
227229
assert.strictEqual(success, true);
228230
}
@@ -233,7 +235,7 @@ suite('Notebook Document', function () {
233235
// remove all cells
234236
{
235237
const edit = new vscode.WorkspaceEdit();
236-
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, document.cellCount), []);
238+
edit.set(document.uri, [vscode.NotebookEdit.replaceCells(new vscode.NotebookRange(0, document.cellCount), [])]);
237239
const success = await vscode.workspace.applyEdit(edit);
238240
assert.strictEqual(success, true);
239241
}
@@ -246,7 +248,7 @@ suite('Notebook Document', function () {
246248
assert.strictEqual(document.cellCount, 1);
247249

248250
const edit = new vscode.WorkspaceEdit();
249-
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, 0), [{
251+
edit.set(document.uri, [vscode.NotebookEdit.replaceCells(new vscode.NotebookRange(0, 0), [{
250252
kind: vscode.NotebookCellKind.Markup,
251253
languageId: 'markdown',
252254
metadata: undefined,
@@ -258,7 +260,7 @@ suite('Notebook Document', function () {
258260
metadata: undefined,
259261
outputs: [],
260262
value: 'new_code'
261-
}]);
263+
}])]);
262264

263265
const event = utils.asPromise<vscode.NotebookDocumentChangeEvent>(vscode.workspace.onDidChangeNotebookDocument);
264266

@@ -287,7 +289,7 @@ suite('Notebook Document', function () {
287289
const document = await vscode.workspace.openNotebookDocument(uri);
288290

289291
const edit = new vscode.WorkspaceEdit();
290-
edit.replaceNotebookCellMetadata(document.uri, 0, { inputCollapsed: true });
292+
edit.set(document.uri, [vscode.NotebookEdit.updateCellMetadata(0, { inputCollapsed: true })]);
291293
const success = await vscode.workspace.applyEdit(edit);
292294
assert.strictEqual(success, true);
293295
assert.strictEqual(document.cellAt(0).metadata.inputCollapsed, true);
@@ -300,7 +302,7 @@ suite('Notebook Document', function () {
300302
const edit = new vscode.WorkspaceEdit();
301303
const event = utils.asPromise<vscode.NotebookDocumentChangeEvent>(vscode.workspace.onDidChangeNotebookDocument);
302304

303-
edit.replaceNotebookCellMetadata(document.uri, 0, { inputCollapsed: true });
305+
edit.set(document.uri, [vscode.NotebookEdit.updateCellMetadata(0, { inputCollapsed: true })]);
304306
const success = await vscode.workspace.applyEdit(edit);
305307
assert.strictEqual(success, true);
306308
const data = await event;
@@ -338,7 +340,7 @@ suite('Notebook Document', function () {
338340
assert.strictEqual(notebook.notebookType, 'notebook.nbdtest');
339341

340342
const edit = new vscode.WorkspaceEdit();
341-
edit.replaceNotebookCells(notebook.uri, new vscode.NotebookRange(0, 0), [{
343+
edit.set(notebook.uri, [vscode.NotebookEdit.replaceCells(new vscode.NotebookRange(0, 0), [{
342344
kind: vscode.NotebookCellKind.Markup,
343345
languageId: 'markdown',
344346
metadata: undefined,
@@ -350,7 +352,7 @@ suite('Notebook Document', function () {
350352
metadata: undefined,
351353
outputs: [],
352354
value: 'new_code'
353-
}]);
355+
}])]);
354356

355357
const success = await vscode.workspace.applyEdit(edit);
356358
assert.strictEqual(success, true);
@@ -399,7 +401,7 @@ suite('Notebook Document', function () {
399401
assert.strictEqual(document.isDirty, false);
400402

401403
const edit = new vscode.WorkspaceEdit();
402-
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, document.cellCount), []);
404+
edit.set(document.uri, [vscode.NotebookEdit.replaceCells(new vscode.NotebookRange(0, document.cellCount), [])]);
403405
assert.ok(await vscode.workspace.applyEdit(edit));
404406

405407
assert.strictEqual(document.isDirty, true);
@@ -414,7 +416,7 @@ suite('Notebook Document', function () {
414416
assert.strictEqual(document.isDirty, false);
415417

416418
const edit = new vscode.WorkspaceEdit();
417-
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, document.cellCount), []);
419+
edit.set(document.uri, [vscode.NotebookEdit.replaceCells(new vscode.NotebookRange(0, document.cellCount), [])]);
418420
assert.ok(await vscode.workspace.applyEdit(edit));
419421

420422
assert.strictEqual(document.isDirty, true);

extensions/vscode-api-tests/src/singlefolder-tests/notebook.kernel.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ const apiTestContentProvider: vscode.NotebookContentProvider = {
406406

407407
// Delete executing cell
408408
const edit = new vscode.WorkspaceEdit();
409-
edit.replaceNotebookCells(cell!.notebook.uri, new vscode.NotebookRange(cell!.index, cell!.index + 1), []);
409+
edit.set(cell!.notebook.uri, [vscode.NotebookEdit.replaceCells(new vscode.NotebookRange(cell!.index, cell!.index + 1), [])]);
410410
await vscode.workspace.applyEdit(edit);
411411

412412
assert.strictEqual(executionWasCancelled, true);

src/vs/workbench/api/browser/mainThreadNotebookEditors.ts

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,18 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { DisposableStore, dispose } from 'vs/base/common/lifecycle';
7+
import { equals } from 'vs/base/common/objects';
8+
import { URI, UriComponents } from 'vs/base/common/uri';
9+
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
10+
import { EditorActivation } from 'vs/platform/editor/common/editor';
711
import { getNotebookEditorFromEditorPane, INotebookEditor, INotebookEditorOptions } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
812
import { INotebookEditorService } from 'vs/workbench/contrib/notebook/browser/services/notebookEditorService';
9-
import { ExtHostContext, ExtHostNotebookEditorsShape, ICellEditOperationDto, INotebookDocumentShowOptions, INotebookEditorViewColumnInfo, MainThreadNotebookEditorsShape, NotebookEditorRevealType } from '../common/extHost.protocol';
1013
import { ICellRange } from 'vs/workbench/contrib/notebook/common/notebookRange';
11-
import { ILogService } from 'vs/platform/log/common/log';
12-
import { URI, UriComponents } from 'vs/base/common/uri';
13-
import { EditorActivation } from 'vs/platform/editor/common/editor';
14-
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
15-
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
1614
import { columnToEditorGroup, editorGroupToColumn } from 'vs/workbench/services/editor/common/editorGroupColumn';
17-
import { equals } from 'vs/base/common/objects';
18-
import { NotebookDto } from 'vs/workbench/api/browser/mainThreadNotebookDto';
15+
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
16+
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
1917
import { IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers';
20-
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
18+
import { ExtHostContext, ExtHostNotebookEditorsShape, INotebookDocumentShowOptions, INotebookEditorViewColumnInfo, MainThreadNotebookEditorsShape, NotebookEditorRevealType } from '../common/extHost.protocol';
2119

2220
class MainThreadNotebook {
2321

@@ -43,7 +41,6 @@ export class MainThreadNotebookEditors implements MainThreadNotebookEditorsShape
4341
constructor(
4442
extHostContext: IExtHostContext,
4543
@IEditorService private readonly _editorService: IEditorService,
46-
@ILogService private readonly _logService: ILogService,
4744
@INotebookEditorService private readonly _notebookEditorService: INotebookEditorService,
4845
@IEditorGroupsService private readonly _editorGroupService: IEditorGroupsService,
4946
@IConfigurationService private readonly _configurationService: IConfigurationService
@@ -99,23 +96,6 @@ export class MainThreadNotebookEditors implements MainThreadNotebookEditorsShape
9996
}
10097
}
10198

102-
async $tryApplyEdits(editorId: string, modelVersionId: number, cellEdits: ICellEditOperationDto[]): Promise<boolean> {
103-
const wrapper = this._mainThreadEditors.get(editorId);
104-
if (!wrapper) {
105-
return false;
106-
}
107-
const { editor } = wrapper;
108-
if (!editor.textModel) {
109-
this._logService.warn('Notebook editor has NO model', editorId);
110-
return false;
111-
}
112-
if (editor.textModel.versionId !== modelVersionId) {
113-
return false;
114-
}
115-
//todo@jrieken use proper selection logic!
116-
return editor.textModel.applyEdits(cellEdits.map(NotebookDto.fromCellEditOperationDto), true, undefined, () => undefined, undefined, true);
117-
}
118-
11999
async $tryShowNotebookDocument(resource: UriComponents, viewType: string, options: INotebookDocumentShowOptions): Promise<string> {
120100
const editorOptions: INotebookEditorOptions = {
121101
cellSelections: options.selections,

src/vs/workbench/api/common/extHost.protocol.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,6 @@ export interface MainThreadNotebookEditorsShape extends IDisposable {
978978
$tryShowNotebookDocument(uriComponents: UriComponents, viewType: string, options: INotebookDocumentShowOptions): Promise<string>;
979979
$tryRevealRange(id: string, range: ICellRange, revealType: NotebookEditorRevealType): Promise<void>;
980980
$trySetSelections(id: string, range: ICellRange[]): void;
981-
$tryApplyEdits(editorId: string, modelVersionId: number, cellEdits: ICellEditOperationDto[]): Promise<boolean>;
982981
}
983982

984983
export interface MainThreadNotebookDocumentsShape extends IDisposable {

src/vs/workbench/api/common/extHostNotebookEditor.ts

Lines changed: 3 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -3,74 +3,12 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { ICellEditOperationDto, MainThreadNotebookEditorsShape } from 'vs/workbench/api/common/extHost.protocol';
7-
import * as extHostTypes from 'vs/workbench/api/common/extHostTypes';
6+
import { illegalArgument } from 'vs/base/common/errors';
7+
import { MainThreadNotebookEditorsShape } from 'vs/workbench/api/common/extHost.protocol';
88
import * as extHostConverter from 'vs/workbench/api/common/extHostTypeConverters';
9-
import { CellEditType } from 'vs/workbench/contrib/notebook/common/notebookCommon';
9+
import * as extHostTypes from 'vs/workbench/api/common/extHostTypes';
1010
import * as vscode from 'vscode';
1111
import { ExtHostNotebookDocument } from './extHostNotebookDocument';
12-
import { illegalArgument } from 'vs/base/common/errors';
13-
14-
interface INotebookEditData {
15-
documentVersionId: number;
16-
cellEdits: ICellEditOperationDto[];
17-
}
18-
19-
class NotebookEditorCellEditBuilder implements vscode.NotebookEditorEdit {
20-
21-
private readonly _documentVersionId: number;
22-
23-
private _finalized: boolean = false;
24-
private _collectedEdits: ICellEditOperationDto[] = [];
25-
26-
constructor(documentVersionId: number) {
27-
this._documentVersionId = documentVersionId;
28-
}
29-
30-
finalize(): INotebookEditData {
31-
this._finalized = true;
32-
return {
33-
documentVersionId: this._documentVersionId,
34-
cellEdits: this._collectedEdits
35-
};
36-
}
37-
38-
private _throwIfFinalized() {
39-
if (this._finalized) {
40-
throw new Error('Edit is only valid while callback runs');
41-
}
42-
}
43-
44-
replaceMetadata(value: { [key: string]: any }): void {
45-
this._throwIfFinalized();
46-
this._collectedEdits.push({
47-
editType: CellEditType.DocumentMetadata,
48-
metadata: value
49-
});
50-
}
51-
52-
replaceCellMetadata(index: number, metadata: Record<string, any>): void {
53-
this._throwIfFinalized();
54-
this._collectedEdits.push({
55-
editType: CellEditType.PartialMetadata,
56-
index,
57-
metadata
58-
});
59-
}
60-
61-
replaceCells(from: number, to: number, cells: vscode.NotebookCellData[]): void {
62-
this._throwIfFinalized();
63-
if (from === to && cells.length === 0) {
64-
return;
65-
}
66-
this._collectedEdits.push({
67-
editType: CellEditType.Replace,
68-
index: from,
69-
count: to - from,
70-
cells: cells.map(extHostConverter.NotebookCellData.from)
71-
});
72-
}
73-
}
7412

7513
export class ExtHostNotebookEditor {
7614

@@ -136,11 +74,6 @@ export class ExtHostNotebookEditor {
13674
get viewColumn() {
13775
return that._viewColumn;
13876
},
139-
edit(callback) {
140-
const edit = new NotebookEditorCellEditBuilder(this.document.version);
141-
callback(edit);
142-
return that._applyEdit(edit.finalize());
143-
},
14477
};
14578

14679
ExtHostNotebookEditor.apiEditorsToExtHost.set(this._editor, this);
@@ -171,40 +104,4 @@ export class ExtHostNotebookEditor {
171104
_acceptViewColumn(value: vscode.ViewColumn | undefined) {
172105
this._viewColumn = value;
173106
}
174-
175-
private _applyEdit(editData: INotebookEditData): Promise<boolean> {
176-
177-
// return when there is nothing to do
178-
if (editData.cellEdits.length === 0) {
179-
return Promise.resolve(true);
180-
}
181-
182-
const compressedEdits: ICellEditOperationDto[] = [];
183-
let compressedEditsIndex = -1;
184-
185-
for (let i = 0; i < editData.cellEdits.length; i++) {
186-
if (compressedEditsIndex < 0) {
187-
compressedEdits.push(editData.cellEdits[i]);
188-
compressedEditsIndex++;
189-
continue;
190-
}
191-
192-
const prevIndex = compressedEditsIndex;
193-
const prev = compressedEdits[prevIndex];
194-
195-
const edit = editData.cellEdits[i];
196-
if (prev.editType === CellEditType.Replace && edit.editType === CellEditType.Replace) {
197-
if (prev.index === edit.index) {
198-
prev.cells.push(...(editData.cellEdits[i] as any).cells);
199-
prev.count += (editData.cellEdits[i] as any).count;
200-
continue;
201-
}
202-
}
203-
204-
compressedEdits.push(editData.cellEdits[i]);
205-
compressedEditsIndex++;
206-
}
207-
208-
return this._proxy.$tryApplyEdits(this.id, editData.documentVersionId, compressedEdits);
209-
}
210107
}

0 commit comments

Comments
 (0)