add NotebookKernelOptions so that createNotebookKernel is simpler

上级 015d5565
......@@ -1470,9 +1470,13 @@ declare module 'vscode' {
// select notebook of a type and/or by file-pattern
readonly selector: NotebookSelector;
// selection is tricky/bogous because a kernel can be selected for
// different notebook documents. A handler-approach might be the better
// fit here, e.g:
// selectionHandler?: (notebook: NotebookDocument, selected: boolean) => void;
// is this kernel selected
readonly selected: boolean;
// fired when kernel is selected/unselected
readonly onDidChangeSelection: Event<boolean>;
......@@ -1489,15 +1493,26 @@ declare module 'vscode' {
// optional kernel interrupt command
interruptHandler?: (notebook: NotebookDocument) => void
// // kernels can establish IPC channels to (visible) notebook editors
// kernels can establish IPC channels to (visible) notebook editors
// createNotebookCommunication(editor: vscode.NotebookEditor): vscode.NotebookCommunication;
// remove kernel
dispose(): void;
}
export interface NotebookKernelOptions {
id: string;
label: string;
description?: string;
selector: NotebookSelector;
supportedLanguages: string[];
hasExecutionOrder?: boolean;
executeHandler: (executions: NotebookCellExecutionTask[]) => void;
interruptHandler?: (notebook: NotebookDocument) => void
}
export namespace notebook {
export function createNotebookKernel(id: string, label: string, selector: NotebookSelector, executeHandler: (executions: NotebookCellExecutionTask[]) => void): NotebookKernel2;
export function createNotebookKernel(options: NotebookKernelOptions): NotebookKernel2;
}
//#endregion
......
......@@ -1108,9 +1108,9 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
checkProposedApiEnabled(extension);
return extHostNotebook.createNotebookCellExecution(uri, index, kernelId);
},
createNotebookKernel(id, label, selector, executeCommand) {
createNotebookKernel(options) {
checkProposedApiEnabled(extension);
return extHostNotebookKernels.createKernel(extension, id, label, selector, executeCommand);
return extHostNotebookKernels.createKernel(extension, options);
}
};
......
......@@ -7,7 +7,6 @@ import { Emitter } from 'vs/base/common/event';
import { DisposableStore } from 'vs/base/common/lifecycle';
import { ExtHostNotebookKernelsShape, IMainContext, INotebookKernelDto2, MainContext, MainThreadNotebookKernelsShape } from 'vs/workbench/api/common/extHost.protocol';
import * as vscode from 'vscode';
import { NotebookSelector } from 'vs/workbench/contrib/notebook/common/notebookSelector';
import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook';
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
import { URI, UriComponents } from 'vs/base/common/uri';
......@@ -31,7 +30,7 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
this._proxy = mainContext.getProxy(MainContext.MainThreadNotebookKernels);
}
createKernel(extension: IExtensionDescription, id: string, label: string, selector: NotebookSelector, executeHandler: ExecuteHandler): vscode.NotebookKernel2 {
createKernel(extension: IExtensionDescription, options: vscode.NotebookKernelOptions): vscode.NotebookKernel2 {
const handle = this._handlePool++;
const that = this;
......@@ -40,16 +39,16 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
const commandDisposables = new DisposableStore();
const emitter = new Emitter<boolean>();
this._kernelData.set(handle, { id, executeHandler, selected: false, onDidChangeSelection: emitter });
this._kernelData.set(handle, { id: options.id, executeHandler: options.executeHandler, selected: false, onDidChangeSelection: emitter });
const data: INotebookKernelDto2 = {
id,
selector,
id: options.id,
selector: options.selector,
extensionId: extension.identifier,
extensionLocation: extension.extensionLocation,
label,
supportedLanguages: [],
supportsInterrupt: false
label: options.label,
supportedLanguages: options.supportedLanguages,
supportsInterrupt: Boolean(options.interruptHandler)
};
this._proxy.$addKernel(handle, data);
......@@ -103,7 +102,7 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
_update();
},
get executeHandler() {
return executeHandler;
return that._kernelData.get(handle)!.executeHandler;
},
get interruptHandler() {
return that._kernelData.get(handle)!.interruptHandler;
......
......@@ -48,7 +48,7 @@ suite('NotebookKernel', function () {
test('create/dispose kernel', async function () {
const kernel = extHostNotebookKernels.createKernel(nullExtensionDescription, 'foo', 'Foo', '*', () => { });
const kernel = extHostNotebookKernels.createKernel(nullExtensionDescription, { id: 'foo', label: 'Foo', selector: '*', executeHandler: () => { }, supportedLanguages: ['plaintext'] });
assert.ok(kernel);
assert.strictEqual(kernel.id, 'foo');
......@@ -71,7 +71,7 @@ suite('NotebookKernel', function () {
test('update kernel', async function () {
const kernel = extHostNotebookKernels.createKernel(nullExtensionDescription, 'foo', 'Foo', '*', () => { });
const kernel = extHostNotebookKernels.createKernel(nullExtensionDescription, { id: 'foo', label: 'Foo', selector: '*', executeHandler: () => { }, supportedLanguages: ['plaintext'] });
await rpcProtocol.sync();
assert.ok(kernel);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册