diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 7f67768c806..816001ae1ab 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -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; + + 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; + + // 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 diff --git a/src/vs/workbench/api/browser/mainThreadNotebookKernels.ts b/src/vs/workbench/api/browser/mainThreadNotebookKernels.ts index 6ce0727bfcb..0443cdc9291 100644 --- a/src/vs/workbench/api/browser/mainThreadNotebookKernels.ts +++ b/src/vs/workbench/api/browser/mainThreadNotebookKernels.ts @@ -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; diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index fd5c3bdfb29..b873a89d3ff 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -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); } }; diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 75fe1f234be..4329d4af20c 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -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[]; diff --git a/src/vs/workbench/api/common/extHostNotebookKernels.ts b/src/vs/workbench/api/common/extHostNotebookKernels.ts index 63a22dfee7d..38d8e144410 100644 --- a/src/vs/workbench/api/common/extHostNotebookKernels.ts +++ b/src/vs/workbench/api/common/extHostNotebookKernels.ts @@ -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; - - // 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); } } - }