add kernel push to proposed API

上级 0791b3d4
......@@ -1452,6 +1452,59 @@ declare module 'vscode' {
//#endregion
//#region https://github.com/microsoft/vscode/issues/119949
export interface NotebookFilter {
readonly viewType?: string;
readonly scheme?: string;
readonly pattern?: GlobPattern;
}
export type NotebookSelector = NotebookFilter | string | ReadonlyArray<NotebookFilter | string>;
export interface NotebookKernel2 {
readonly id: string;
// select notebook of a type and/or by file-pattern
readonly selector: NotebookSelector;
// is this kernel selected
readonly selected: boolean;
// fired when kernel is selected/unselected
readonly onDidChangeSelection: Event<boolean>;
// UI properties (get/set)
label: string;
description: string;
supportedLanguages: string[];
hasExecutionOrder: boolean;
// invoked when Run, Run All, Run Selections is triggered,
// command is invoked with [kernel, cells] as arguments
executeCommand: Command;
// optional kernel interrupt command
interruptCommand?: Command;
// // kernels (and _only_ they) can create executions
createNotebookCellExecutionTask(uri: Uri, index: number): NotebookCellExecutionTask;
// // kernels can establish IPC channels to (visible) notebook editors
// createNotebookCommunication(editor: vscode.NotebookEditor): vscode.NotebookCommunication;
// remove kernel
dispose(): void;
}
export namespace notebook {
export function createNotebookKernel(id: string, label: string, selector: NotebookSelector, executeCommand: Command): NotebookKernel2;
}
//#endregion
//#region https://github.com/microsoft/vscode/issues/106744, NotebookContentProvider
......
......@@ -20,9 +20,9 @@ abstract class MainThreadKernel implements INotebookKernel2 {
readonly id: string;
readonly selector: NotebookSelector;
readonly detail: string;
label: string;
detail?: string;
description?: string;
isPreferred?: boolean;
supportedLanguages: string[];
......@@ -32,8 +32,8 @@ abstract class MainThreadKernel implements INotebookKernel2 {
constructor(data: INotebookKernelDto2) {
this.id = data.id;
this.selector = data.selector;
this.detail = data.displayName;
this.label = data.label;
this.detail = data.detail;
this.description = data.description;
this.isPreferred = data.isPreferred;
this.supportedLanguages = data.supportedLanguages;
......@@ -48,10 +48,6 @@ abstract class MainThreadKernel implements INotebookKernel2 {
this.label = data.label;
event.label = true;
}
if (data.detail !== undefined) {
this.detail = data.detail;
event.detail = true;
}
if (data.description !== undefined) {
this.description = data.description;
event.description = true;
......
......@@ -142,7 +142,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
const extHostDocumentContentProviders = rpcProtocol.set(ExtHostContext.ExtHostDocumentContentProviders, new ExtHostDocumentContentProvider(rpcProtocol, extHostDocumentsAndEditors, extHostLogService));
const extHostDocumentSaveParticipant = rpcProtocol.set(ExtHostContext.ExtHostDocumentSaveParticipant, new ExtHostDocumentSaveParticipant(extHostLogService, extHostDocuments, rpcProtocol.getProxy(MainContext.MainThreadBulkEdits)));
const extHostNotebook = rpcProtocol.set(ExtHostContext.ExtHostNotebook, new ExtHostNotebookController(rpcProtocol, extHostCommands, extHostDocumentsAndEditors, extHostDocuments, initData.environment, extHostLogService, extensionStoragePaths));
rpcProtocol.set(ExtHostContext.ExtHostNotebookKernels, new ExtHostNotebookKernels(rpcProtocol, extHostCommands));
const extHostNotebookKernels = rpcProtocol.set(ExtHostContext.ExtHostNotebookKernels, new ExtHostNotebookKernels(rpcProtocol, extHostCommands, extHostNotebook));
const extHostEditors = rpcProtocol.set(ExtHostContext.ExtHostEditors, new ExtHostEditors(rpcProtocol, extHostDocumentsAndEditors));
const extHostTreeViews = rpcProtocol.set(ExtHostContext.ExtHostTreeViews, new ExtHostTreeViews(rpcProtocol.getProxy(MainContext.MainThreadTreeViews), extHostCommands, extHostLogService));
const extHostEditorInsets = rpcProtocol.set(ExtHostContext.ExtHostEditorInsets, new ExtHostEditorInsets(rpcProtocol.getProxy(MainContext.MainThreadEditorInsets), extHostEditors, initData.environment));
......@@ -1107,6 +1107,10 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
createNotebookCellExecutionTask(uri: vscode.Uri, index: number, kernelId: string): vscode.NotebookCellExecutionTask | undefined {
checkProposedApiEnabled(extension);
return extHostNotebook.createNotebookCellExecution(uri, index, kernelId);
},
createNotebookKernel(id, label, selector, executeCommand) {
checkProposedApiEnabled(extension);
return extHostNotebookKernels.createKernel(extension, id, label, selector, executeCommand);
}
};
......
......@@ -902,10 +902,10 @@ export interface MainThreadNotebookDocumentsShape extends IDisposable {
export interface INotebookKernelDto2 {
id: string;
selector: NotebookSelector;
displayName: string;
label: string;
executeCommand: ICommandDto;
interruptCommand?: ICommandDto;
detail?: string;
description?: string;
isPreferred?: boolean;
supportedLanguages: string[];
......
......@@ -3,49 +3,14 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Emitter, Event } from 'vs/base/common/event';
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 { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands';
import * as vscode from 'vscode';
import { NotebookSelector } from 'vs/workbench/contrib/notebook/common/notebookSelector';
import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook';
export interface VsCodeNotebookKernel {
readonly id: string;
// select notebook of a type and/or by file-pattern
readonly selector: NotebookSelector;
// is this kernel selected
readonly selected: boolean;
// fired when kernel is selected/unselected
readonly onDidChangeSelection: Event<boolean>;
// UI properties (get/set)
label: string;
description: string;
supportedLanguages: string[];
hasExecutionOrder: boolean;
// invoked when Run, Run All, Run Selections is triggered,
// command is invoked with [kernel, cells] as arguments
executeCommand: vscode.Command;
// optional kernel interrupt command
interruptCommand?: vscode.Command;
// // kernels (and _only_ they) can create executions
createNotebookCellExecutionTask(uri: vscode.Uri, index: number): vscode.NotebookCellExecutionTask;
// // kernels can establish IPC channels to (visible) notebook editors
// createNotebookCommunication(editor: vscode.NotebookEditor): vscode.NotebookCommunication;
// remove kernel
dispose(): void;
}
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
......@@ -62,7 +27,7 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
this._proxy = mainContext.getProxy(MainContext.MainThreadNotebookKernels);
}
createKernel(id: string, label: string, selector: NotebookSelector, executeCommand: vscode.Command): VsCodeNotebookKernel {
createKernel(extension: IExtensionDescription, id: string, label: string, selector: NotebookSelector, executeCommand: vscode.Command): vscode.NotebookKernel2 {
const handle = this._handlePool++;
const that = this;
......@@ -75,6 +40,7 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
const data: INotebookKernelDto2 = {
id,
selector,
displayName: extension.displayName ?? extension.name,
label,
executeCommand: this._extHostCommands.converter.toInternal(executeCommand, commandDisposables),
supportedLanguages: [],
......@@ -83,7 +49,7 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
// update: all setters write directly into the dto object
// and trigger an update. the actual update will only happen
// once per event loop
// once per event loop execution
let tokenPool = 0;
const _update = () => {
const myToken = ++tokenPool;
......@@ -160,5 +126,4 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
obj.emitter.fire(value);
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册