Skip to content

Commit d321061

Browse files
committed
merge moveEvent into CellsChangeEvent.
1 parent 369a91f commit d321061

8 files changed

Lines changed: 112 additions & 87 deletions

File tree

.eslintrc.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -810,8 +810,7 @@
810810
"terminate",
811811
"trigger",
812812
"unregister",
813-
"write",
814-
"move"
813+
"write"
815814
]
816815
}
817816
]

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

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,23 @@ suite('API tests', () => {
118118
]
119119
});
120120

121-
const moveCellEvent = getEventOncePromise<vscode.NotebookCellMoveEvent>(vscode.notebook.onDidMoveNotebookCell);
121+
const moveCellEvent = getEventOncePromise<vscode.NotebookCellMoveEvent>(vscode.notebook.onDidChangeNotebookCells);
122122
await vscode.commands.executeCommand('notebook.cell.moveUp');
123123
const moveCellEventRet = await moveCellEvent;
124124
assert.deepEqual(moveCellEventRet, {
125125
document: vscode.notebook.activeNotebookEditor!.document,
126-
index: 1,
127-
newIndex: 0
126+
changes: [
127+
{
128+
start: 1,
129+
deletedCount: 1,
130+
items: []
131+
},
132+
{
133+
start: 0,
134+
deletedCount: 0,
135+
items: [vscode.notebook.activeNotebookEditor?.document.cells[0]]
136+
}
137+
]
128138
});
129139

130140
const cellOutputChange = getEventOncePromise<vscode.NotebookCellOutputsChangeEvent>(vscode.notebook.onDidChangeCellOutputs);
@@ -158,6 +168,35 @@ suite('API tests', () => {
158168
await vscode.commands.executeCommand('workbench.action.closeAllEditors');
159169
});
160170

171+
test('editor move cell event', async function () {
172+
const resource = vscode.Uri.parse(join(vscode.workspace.rootPath || '', './first.vsctestnb'));
173+
await vscode.commands.executeCommand('vscode.openWith', resource, 'notebookCoreTest');
174+
await vscode.commands.executeCommand('notebook.cell.insertCodeCellBelow');
175+
await vscode.commands.executeCommand('notebook.cell.insertCodeCellAbove');
176+
await vscode.commands.executeCommand('notebook.focusTop');
177+
178+
const activeCell = vscode.notebook.activeNotebookEditor!.selection;
179+
assert.equal(vscode.notebook.activeNotebookEditor!.document.cells.indexOf(activeCell!), 0);
180+
const moveChange = getEventOncePromise(vscode.notebook.onDidChangeNotebookCells);
181+
await vscode.commands.executeCommand('notebook.cell.moveDown');
182+
const ret = await moveChange;
183+
assert.deepEqual(ret, {
184+
document: vscode.notebook.activeNotebookEditor?.document,
185+
changes: [
186+
{
187+
start: 0,
188+
deletedCount: 1,
189+
items: []
190+
},
191+
{
192+
start: 1,
193+
deletedCount: 0,
194+
items: [activeCell]
195+
}
196+
]
197+
});
198+
});
199+
161200
test('notebook editor active/visible', async function () {
162201
const resource = vscode.Uri.parse(join(vscode.workspace.rootPath || '', './first.vsctestnb'));
163202
await vscode.commands.executeCommand('vscode.openWith', resource, 'notebookCoreTest');

src/vs/vscode.proposed.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1950,7 +1950,6 @@ declare module 'vscode' {
19501950
export let activeNotebookEditor: NotebookEditor | undefined;
19511951
export const onDidChangeActiveNotebookEditor: Event<NotebookEditor | undefined>;
19521952
export const onDidChangeNotebookCells: Event<NotebookCellsChangeEvent>;
1953-
export const onDidMoveNotebookCell: Event<NotebookCellMoveEvent>;
19541953
export const onDidChangeCellOutputs: Event<NotebookCellOutputsChangeEvent>;
19551954
export const onDidChangeCellLanguage: Event<NotebookCellLanguageChangeEvent>;
19561955
/**

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -959,10 +959,6 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
959959
checkProposedApiEnabled(extension);
960960
return extHostNotebook.onDidChangeNotebookCells(listener, thisArgs, disposables);
961961
},
962-
onDidMoveNotebookCell(listener, thisArgs?, disposables?) {
963-
checkProposedApiEnabled(extension);
964-
return extHostNotebook.onDidMoveNotebookCell(listener, thisArgs, disposables);
965-
},
966962
onDidChangeCellOutputs(listener, thisArgs?, disposables?) {
967963
checkProposedApiEnabled(extension);
968964
return extHostNotebook.onDidChangeCellOutputs(listener, thisArgs, disposables);

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

Lines changed: 46 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ function getObservable<T extends Object>(obj: T): IObservable<T> {
4444

4545
interface INotebookEventEmitter {
4646
emitModelChange(events: vscode.NotebookCellsChangeEvent): void;
47-
emitMoveChange(event: vscode.NotebookCellMoveEvent): void;
4847
emitCellOutputsChange(event: vscode.NotebookCellOutputsChangeEvent): void;
4948
emitCellLanguageChange(event: vscode.NotebookCellLanguageChangeEvent): void;
5049
}
@@ -262,7 +261,7 @@ export class ExtHostNotebookDocument extends Disposable implements vscode.Notebo
262261
accpetModelChanged(event: NotebookCellsChangedEvent): void {
263262
this._versionId = event.versionId;
264263
if (event.kind === NotebookCellsChangeType.ModelChange) {
265-
this.$spliceNotebookCells(event.changes);
264+
this.$spliceNotebookCells(event.change);
266265
} else if (event.kind === NotebookCellsChangeType.Move) {
267266
this.$moveCell(event.index, event.newIdx);
268267
} else if (event.kind === NotebookCellsChangeType.CellClearOutput) {
@@ -274,56 +273,50 @@ export class ExtHostNotebookDocument extends Disposable implements vscode.Notebo
274273
}
275274
}
276275

277-
private $spliceNotebookCells(splices: NotebookCellsSplice2[]): void {
276+
private $spliceNotebookCells(splice: NotebookCellsSplice2): void {
278277
if (this._disposed) {
279278
return;
280279
}
281280

282-
if (!splices.length) {
283-
return;
284-
}
285-
286281
let contentChangeEvents: vscode.NotebookCellsChangeData[] = [];
287282

288-
splices.reverse().forEach(splice => {
289-
let cellDtos = splice[2];
290-
let newCells = cellDtos.map(cell => {
291-
const extCell = new ExtHostCell(this.viewType, this.uri, cell.handle, URI.revive(cell.uri), cell.source.join('\n'), cell.cellKind, cell.language, cell.outputs, cell.metadata, this._proxy);
292-
const documentData = this._documentsAndEditors.getDocument(URI.revive(cell.uri));
283+
let cellDtos = splice[2];
284+
let newCells = cellDtos.map(cell => {
285+
const extCell = new ExtHostCell(this.viewType, this.uri, cell.handle, URI.revive(cell.uri), cell.source.join('\n'), cell.cellKind, cell.language, cell.outputs, cell.metadata, this._proxy);
286+
const documentData = this._documentsAndEditors.getDocument(URI.revive(cell.uri));
293287

294-
if (documentData) {
295-
extCell.attachTextDocument(documentData);
296-
}
288+
if (documentData) {
289+
extCell.attachTextDocument(documentData);
290+
}
297291

298-
if (!this._cellDisposableMapping.has(extCell.handle)) {
299-
this._cellDisposableMapping.set(extCell.handle, new DisposableStore());
300-
}
292+
if (!this._cellDisposableMapping.has(extCell.handle)) {
293+
this._cellDisposableMapping.set(extCell.handle, new DisposableStore());
294+
}
301295

302-
let store = this._cellDisposableMapping.get(extCell.handle)!;
296+
let store = this._cellDisposableMapping.get(extCell.handle)!;
303297

304-
store.add(extCell.onDidChangeOutputs((diffs) => {
305-
this.eventuallyUpdateCellOutputs(extCell, diffs);
306-
}));
298+
store.add(extCell.onDidChangeOutputs((diffs) => {
299+
this.eventuallyUpdateCellOutputs(extCell, diffs);
300+
}));
307301

308-
return extCell;
309-
});
302+
return extCell;
303+
});
310304

311-
for (let j = splice[0]; j < splice[0] + splice[1]; j++) {
312-
this._cellDisposableMapping.get(this.cells[j].handle)?.dispose();
313-
this._cellDisposableMapping.delete(this.cells[j].handle);
305+
for (let j = splice[0]; j < splice[0] + splice[1]; j++) {
306+
this._cellDisposableMapping.get(this.cells[j].handle)?.dispose();
307+
this._cellDisposableMapping.delete(this.cells[j].handle);
314308

315-
}
309+
}
316310

317-
this.cells.splice(splice[0], splice[1], ...newCells);
311+
this.cells.splice(splice[0], splice[1], ...newCells);
318312

319-
const event: vscode.NotebookCellsChangeData = {
320-
start: splice[0],
321-
deletedCount: splice[1],
322-
items: newCells
323-
};
313+
const event: vscode.NotebookCellsChangeData = {
314+
start: splice[0],
315+
deletedCount: splice[1],
316+
items: newCells
317+
};
324318

325-
contentChangeEvents.push(event);
326-
});
319+
contentChangeEvents.push(event);
327320

328321
this._emitter.emitModelChange({
329322
document: this,
@@ -334,8 +327,19 @@ export class ExtHostNotebookDocument extends Disposable implements vscode.Notebo
334327
private $moveCell(index: number, newIdx: number): void {
335328
const cells = this.cells.splice(index, 1);
336329
this.cells.splice(newIdx, 0, ...cells);
337-
const event: vscode.NotebookCellMoveEvent = { document: this, index, newIndex: newIdx };
338-
this._emitter.emitMoveChange(event);
330+
const changes: vscode.NotebookCellsChangeData[] = [{
331+
start: index,
332+
deletedCount: 1,
333+
items: []
334+
}, {
335+
start: newIdx,
336+
deletedCount: 0,
337+
items: cells
338+
}];
339+
this._emitter.emitModelChange({
340+
document: this,
341+
changes
342+
});
339343
}
340344

341345
private $clearCellOutputs(index: number): void {
@@ -715,8 +719,6 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
715719
private readonly _notebookOutputRenderers = new Map<number, ExtHostNotebookOutputRenderer>();
716720
private readonly _onDidChangeNotebookCells = new Emitter<vscode.NotebookCellsChangeEvent>();
717721
readonly onDidChangeNotebookCells = this._onDidChangeNotebookCells.event;
718-
private readonly _onDidMoveNotebookCell = new Emitter<vscode.NotebookCellMoveEvent>();
719-
readonly onDidMoveNotebookCell = this._onDidMoveNotebookCell.event;
720722
private readonly _onDidChangeCellOutputs = new Emitter<vscode.NotebookCellOutputsChangeEvent>();
721723
readonly onDidChangeCellOutputs = this._onDidChangeCellOutputs.event;
722724
private readonly _onDidChangeCellLanguage = new Emitter<vscode.NotebookCellLanguageChangeEvent>();
@@ -849,9 +851,6 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
849851
emitModelChange(event: vscode.NotebookCellsChangeEvent): void {
850852
that._onDidChangeNotebookCells.fire(event);
851853
},
852-
emitMoveChange(event: vscode.NotebookCellMoveEvent): void {
853-
that._onDidMoveNotebookCell.fire(event);
854-
},
855854
emitCellOutputsChange(event: vscode.NotebookCellOutputsChangeEvent): void {
856855
that._onDidChangeCellOutputs.fire(event);
857856
},
@@ -1158,9 +1157,6 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
11581157
emitModelChange(event: vscode.NotebookCellsChangeEvent): void {
11591158
that._onDidChangeNotebookCells.fire(event);
11601159
},
1161-
emitMoveChange(event: vscode.NotebookCellMoveEvent): void {
1162-
that._onDidMoveNotebookCell.fire(event);
1163-
},
11641160
emitCellOutputsChange(event: vscode.NotebookCellOutputsChangeEvent): void {
11651161
that._onDidChangeCellOutputs.fire(event);
11661162
},
@@ -1180,12 +1176,10 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
11801176
document.accpetModelChanged({
11811177
kind: NotebookCellsChangeType.ModelChange,
11821178
versionId: modelData.versionId,
1183-
changes: [
1184-
[
1185-
0,
1186-
0,
1187-
modelData.cells
1188-
]
1179+
change: [
1180+
0,
1181+
0,
1182+
modelData.cells
11891183
]
11901184
});
11911185

src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
254254

255255
this._onDidModelChangeProxy.fire({
256256
kind: NotebookCellsChangeType.ModelChange,
257-
versionId: this._versionId, changes: [
257+
versionId: this._versionId, change:
258258
[
259259
0,
260260
0,
@@ -268,7 +268,6 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
268268
metadata: cell.metadata
269269
}]
270270
]
271-
]
272271
});
273272

274273
return;
@@ -291,7 +290,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
291290
this._increaseVersionId();
292291
this._onDidModelChangeProxy.fire({
293292
kind: NotebookCellsChangeType.ModelChange,
294-
versionId: this._versionId, changes: [
293+
versionId: this._versionId, change:
295294
[
296295
index,
297296
0,
@@ -305,7 +304,6 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
305304
metadata: cell.metadata
306305
}))
307306
]
308-
]
309307
});
310308

311309
return;
@@ -323,7 +321,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
323321
this._onDidChangeContent.fire();
324322

325323
this._increaseVersionId();
326-
this._onDidModelChangeProxy.fire({ kind: NotebookCellsChangeType.ModelChange, versionId: this._versionId, changes: [[index, count, []]] });
324+
this._onDidModelChangeProxy.fire({ kind: NotebookCellsChangeType.ModelChange, versionId: this._versionId, change: [index, count, []] });
327325
}
328326

329327
moveCellToIdx(index: number, newIdx: number) {

src/vs/workbench/contrib/notebook/common/notebookCommon.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ export enum NotebookCellsChangeType {
262262

263263
export interface NotebookCellsModelChangedEvent {
264264
readonly kind: NotebookCellsChangeType.ModelChange;
265-
readonly changes: NotebookCellsSplice2[];
265+
readonly change: NotebookCellsSplice2;
266266
readonly versionId: number;
267267
}
268268

0 commit comments

Comments
 (0)