diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 95c53f84dcb..c9d3c977bca 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -1484,7 +1484,7 @@ declare module 'vscode' { // invoked when Run, Run All, Run Selections is triggered, // command is invoked with [kernel, cells] as arguments - executeHandler: (notebook: NotebookDocument, cells: NotebookCell[]) => void + executeHandler: (executions: NotebookCellExecutionTask[]) => void; // optional kernel interrupt command interruptHandler?: (notebook: NotebookDocument) => void @@ -1500,7 +1500,7 @@ declare module 'vscode' { } export namespace notebook { - export function createNotebookKernel(id: string, label: string, selector: NotebookSelector, executeHandler: (notebook: NotebookDocument, cells: NotebookCell[]) => void): NotebookKernel2; + export function createNotebookKernel(id: string, label: string, selector: NotebookSelector, executeHandler: (executions: NotebookCellExecutionTask[]) => void): NotebookKernel2; } //#endregion diff --git a/src/vs/workbench/api/common/extHostNotebookKernels.ts b/src/vs/workbench/api/common/extHostNotebookKernels.ts index 48914996237..a813bb816b9 100644 --- a/src/vs/workbench/api/common/extHostNotebookKernels.ts +++ b/src/vs/workbench/api/common/extHostNotebookKernels.ts @@ -13,16 +13,15 @@ import { IExtensionDescription } from 'vs/platform/extensions/common/extensions' import { URI, UriComponents } from 'vs/base/common/uri'; import { ICellRange } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import { NotebookCellRange } from 'vs/workbench/api/common/extHostTypeConverters'; -import { flatten } from 'vs/base/common/arrays'; -type ExecuteHandler = (notebook: vscode.NotebookDocument, cells: vscode.NotebookCell[]) => void; +type ExecuteHandler = (executions: vscode.NotebookCellExecutionTask[]) => void; type InterruptHandler = (notebook: vscode.NotebookDocument) => void; export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape { private readonly _proxy: MainThreadNotebookKernelsShape; - private readonly _kernelData = new Map }>(); + private readonly _kernelData = new Map }>(); private _handlePool: number = 0; constructor( @@ -41,7 +40,7 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape { const commandDisposables = new DisposableStore(); const emitter = new Emitter(); - this._kernelData.set(handle, { executeHandler, selected: false, emitter }); + this._kernelData.set(handle, { id, executeHandler, selected: false, onDidChangeSelection: emitter }); const data: INotebookKernelDto2 = { id, @@ -131,7 +130,7 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape { const obj = this._kernelData.get(handle); if (obj) { obj.selected = value; - obj.emitter.fire(value); + obj.onDidChangeSelection.fire(value); } } @@ -146,8 +145,23 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape { throw new Error('MISSING notebook'); } - const all = ranges.map(range => document.notebookDocument.getCells(NotebookCellRange.to(range))); - obj.executeHandler(document.notebookDocument, flatten(all)); + const execs: vscode.NotebookCellExecutionTask[] = []; + for (let range of ranges) { + const cells = document.notebookDocument.getCells(NotebookCellRange.to(range)); + for (let cell of cells) { + const exec = this._extHostNotebook.createNotebookCellExecution(document.uri, cell.index, obj.id); + // todo@jrieken there should always be an exec-object + if (exec) { + execs.push(exec); + } + } + } + try { + obj.executeHandler(execs); + } catch (err) { + // + console.error(err); + } } $cancelCells(handle: number, uri: UriComponents, ranges: ICellRange[]): void {