Skip to content

Commit 73a3c9d

Browse files
committed
1 parent 7e62739 commit 73a3c9d

File tree

5 files changed

+29
-25
lines changed

5 files changed

+29
-25
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,11 +690,18 @@ suite('notebook workflow', () => {
690690
await vscode.commands.executeCommand('notebook.focusTop');
691691
const cell = editor.document.cells[0];
692692
assert.equal(cell.outputs.length, 0);
693+
694+
let metadataChangeEvent = getEventOncePromise<vscode.NotebookCellMetadataChangeEvent>(vscode.notebook.onDidChangeCellMetadata);
693695
cell.metadata.runnable = false;
696+
await metadataChangeEvent;
697+
694698
await vscode.commands.executeCommand('notebook.cell.execute');
695699
assert.equal(cell.outputs.length, 0, 'should not execute'); // not runnable, didn't work
696700

701+
metadataChangeEvent = getEventOncePromise<vscode.NotebookCellMetadataChangeEvent>(vscode.notebook.onDidChangeCellMetadata);
697702
cell.metadata.runnable = true;
703+
await metadataChangeEvent;
704+
698705
await vscode.commands.executeCommand('notebook.cell.execute');
699706
assert.equal(cell.outputs.length, 1, 'should execute'); // runnable, it worked
700707

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

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { INotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookB
1818
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
1919
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
2020
import { INotebookCellStatusBarService } from 'vs/workbench/contrib/notebook/common/notebookCellStatusBarService';
21-
import { ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, CellEditType, DisplayOrderKey, ICellEditOperation, ICellRange, IEditor, IMainCellDto, INotebookDocumentFilter, NotebookCellMetadata, NotebookCellOutputsSplice, NotebookCellsChangeType, NotebookDocumentMetadata, NOTEBOOK_DISPLAY_ORDER, TransientMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
21+
import { ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, CellEditType, DisplayOrderKey, ICellEditOperation, ICellRange, IEditor, IMainCellDto, INotebookDocumentFilter, NotebookCellOutputsSplice, NotebookCellsChangeType, NotebookDocumentMetadata, NOTEBOOK_DISPLAY_ORDER, TransientMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
2222
import { IMainNotebookController, INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
2323
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
2424
import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService';
@@ -566,21 +566,6 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
566566
textModel?.updateNotebookMetadata(metadata);
567567
}
568568

569-
async $updateNotebookCellMetadata(viewType: string, resource: UriComponents, handle: number, metadata: NotebookCellMetadata): Promise<void> {
570-
this.logService.debug('MainThreadNotebooks#updateNotebookCellMetadata', resource.path, handle, metadata);
571-
const textModel = this._notebookService.getNotebookTextModel(URI.from(resource));
572-
if (!textModel) {
573-
return;
574-
}
575-
576-
const index = textModel.cells.findIndex(cell => cell.handle === handle);
577-
if (index < 0) {
578-
return;
579-
}
580-
581-
textModel.applyEdit(textModel.versionId, [{ editType: CellEditType.Metadata, index, metadata }], true);
582-
}
583-
584569
async $spliceNotebookCellOutputs(viewType: string, resource: UriComponents, cellHandle: number, splices: NotebookCellOutputsSplice[]): Promise<void> {
585570
this.logService.debug('MainThreadNotebooks#spliceNotebookCellOutputs', resource.path, cellHandle);
586571
const textModel = this._notebookService.getNotebookTextModel(URI.from(resource));

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -744,7 +744,6 @@ export interface MainThreadNotebookShape extends IDisposable {
744744
$tryApplyEdits(viewType: string, resource: UriComponents, modelVersionId: number, edits: ICellEditOperation[], metadata: NotebookDocumentMetadata | undefined): Promise<boolean>;
745745
$updateNotebookLanguages(viewType: string, resource: UriComponents, languages: string[]): Promise<void>;
746746
$updateNotebookMetadata(viewType: string, resource: UriComponents, metadata: NotebookDocumentMetadata): Promise<void>;
747-
$updateNotebookCellMetadata(viewType: string, resource: UriComponents, handle: number, metadata: NotebookCellMetadata | undefined): Promise<void>;
748747
$spliceNotebookCellOutputs(viewType: string, resource: UriComponents, cellHandle: number, splices: NotebookCellOutputsSplice[]): Promise<void>;
749748
$postMessage(editorId: string, forRendererId: string | undefined, value: any): Promise<boolean>;
750749
$setStatusBarEntry(id: number, statusBarEntry: INotebookCellStatusBarEntryDto): Promise<void>;

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
99
import { URI, UriComponents } from 'vs/base/common/uri';
1010
import * as UUID from 'vs/base/common/uuid';
1111
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
12-
import { ExtHostNotebookShape, ICommandDto, IMainContext, IModelAddedData, INotebookDocumentPropertiesChangeData, INotebookDocumentsAndEditorsDelta, INotebookEditorPropertiesChangeData, MainContext, MainThreadNotebookShape } from 'vs/workbench/api/common/extHost.protocol';
12+
import { ExtHostNotebookShape, ICommandDto, IMainContext, IModelAddedData, INotebookDocumentPropertiesChangeData, INotebookDocumentsAndEditorsDelta, INotebookEditorPropertiesChangeData, MainContext, MainThreadBulkEditsShape, MainThreadNotebookShape } from 'vs/workbench/api/common/extHost.protocol';
1313
import { ILogService } from 'vs/platform/log/common/log';
1414
import { CommandsConverter, ExtHostCommands } from 'vs/workbench/api/common/extHostCommands';
1515
import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors';
@@ -191,6 +191,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
191191
private static _notebookKernelProviderHandlePool: number = 0;
192192

193193
private readonly _proxy: MainThreadNotebookShape;
194+
private readonly _mainThreadBulkEdits: MainThreadBulkEditsShape;
194195
private readonly _notebookContentProviders = new Map<string, { readonly provider: vscode.NotebookContentProvider, readonly extension: IExtensionDescription; }>();
195196
private readonly _notebookKernels = new Map<string, { readonly kernel: vscode.NotebookKernel, readonly extension: IExtensionDescription; }>();
196197
private readonly _notebookKernelProviders = new Map<number, ExtHostNotebookKernelProviderAdapter>();
@@ -246,6 +247,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
246247
private readonly _extensionStoragePaths: IExtensionStoragePaths,
247248
) {
248249
this._proxy = mainContext.getProxy(MainContext.MainThreadNotebook);
250+
this._mainThreadBulkEdits = mainContext.getProxy(MainContext.MainThreadBulkEdits);
249251
this._commandsConverter = commands.converter;
250252

251253
commands.registerArgumentProcessor({
@@ -679,7 +681,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
679681
}
680682
const that = this;
681683

682-
const document = new ExtHostNotebookDocument(this._proxy, this._documentsAndEditors, {
684+
const document = new ExtHostNotebookDocument(this._proxy, this._documentsAndEditors, this._mainThreadBulkEdits, {
683685
emitModelChange(event: vscode.NotebookCellsChangeEvent): void {
684686
that._onDidChangeNotebookCells.fire(event);
685687
},

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

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ import { joinPath } from 'vs/base/common/resources';
1111
import { ISplice } from 'vs/base/common/sequence';
1212
import { URI } from 'vs/base/common/uri';
1313
import * as UUID from 'vs/base/common/uuid';
14-
import { CellKind, MainThreadNotebookShape, NotebookCellOutputsSplice } from 'vs/workbench/api/common/extHost.protocol';
14+
import { CellKind, IWorkspaceCellEditDto, MainThreadBulkEditsShape, MainThreadNotebookShape, NotebookCellOutputsSplice, WorkspaceEditType } from 'vs/workbench/api/common/extHost.protocol';
1515
import { ExtHostDocumentsAndEditors, IExtHostModelAddedData } from 'vs/workbench/api/common/extHostDocumentsAndEditors';
16-
import { CellOutputKind, diff, IMainCellDto, IProcessedOutput, NotebookCellMetadata, NotebookCellsChangedEventDto, NotebookCellsChangeType, NotebookCellsSplice2, notebookDocumentMetadataDefaults } from 'vs/workbench/contrib/notebook/common/notebookCommon';
16+
import { CellEditType, CellOutputKind, diff, IMainCellDto, IProcessedOutput, NotebookCellMetadata, NotebookCellsChangedEventDto, NotebookCellsChangeType, NotebookCellsSplice2, notebookDocumentMetadataDefaults } from 'vs/workbench/contrib/notebook/common/notebookCommon';
1717
import * as vscode from 'vscode';
1818
import { Cache } from './cache';
1919

@@ -86,7 +86,7 @@ export class ExtHostCell extends Disposable {
8686
private _cell: vscode.NotebookCell | undefined;
8787

8888
constructor(
89-
private readonly _proxy: MainThreadNotebookShape,
89+
private readonly _mainThreadBulkEdits: MainThreadBulkEditsShape,
9090
private readonly _notebook: ExtHostNotebookDocument,
9191
private readonly _extHostDocument: ExtHostDocumentsAndEditors,
9292
private readonly _cellData: IMainCellDto,
@@ -181,8 +181,18 @@ export class ExtHostCell extends Disposable {
181181
}));
182182
}
183183

184-
private _updateMetadata(): Promise<void> {
185-
return this._proxy.$updateNotebookCellMetadata(this._notebook.notebookDocument.viewType, this._notebook.uri, this.handle, this._metadata);
184+
private _updateMetadata(): Promise<boolean> {
185+
const index = this._notebook.notebookDocument.cells.indexOf(this.cell);
186+
const edit: IWorkspaceCellEditDto = {
187+
_type: WorkspaceEditType.Cell,
188+
metadata: undefined,
189+
resource: this._notebook.uri,
190+
notebookVersionId: this._notebook.notebookDocument.version,
191+
edit: { editType: CellEditType.Metadata, index, metadata: this._metadata }
192+
};
193+
194+
console.log('_updateMetadata', this._metadata);
195+
return this._mainThreadBulkEdits.$tryApplyWorkspaceEdit({ edits: [edit] });
186196
}
187197
}
188198

@@ -222,6 +232,7 @@ export class ExtHostNotebookDocument extends Disposable {
222232
constructor(
223233
private readonly _proxy: MainThreadNotebookShape,
224234
private readonly _documentsAndEditors: ExtHostDocumentsAndEditors,
235+
private readonly _mainThreadBulkEdits: MainThreadBulkEditsShape,
225236
private readonly _emitter: INotebookEventEmitter,
226237
private readonly _viewType: string,
227238
metadata: Required<vscode.NotebookDocumentMetadata>,
@@ -339,7 +350,7 @@ export class ExtHostNotebookDocument extends Disposable {
339350
const cellDtos = splice[2];
340351
const newCells = cellDtos.map(cell => {
341352

342-
const extCell = new ExtHostCell(this._proxy, this, this._documentsAndEditors, cell);
353+
const extCell = new ExtHostCell(this._mainThreadBulkEdits, this, this._documentsAndEditors, cell);
343354

344355
if (!initialization) {
345356
addedCellDocuments.push(ExtHostCell.asModelAddData(this.notebookDocument, cell));

0 commit comments

Comments
 (0)