mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-26 11:38:51 +01:00
Allow invoking kernel picker for inactive notebook given NotebookEditor in notebook.selectKernel command args (#132879)
* Allow invoking kernel picker for inactive notebook `notebook.selectKernel` is now an API command that takes target `NotebookEditor` as an arg * move select kernel command to extHost Kernel. Co-authored-by: rebornix <penn.lv@gmail.com>
This commit is contained in:
@@ -151,7 +151,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
const extHostNotebook = rpcProtocol.set(ExtHostContext.ExtHostNotebook, new ExtHostNotebookController(rpcProtocol, extHostCommands, extHostDocumentsAndEditors, extHostDocuments, extensionStoragePaths));
|
||||
const extHostNotebookDocuments = rpcProtocol.set(ExtHostContext.ExtHostNotebookDocuments, new ExtHostNotebookDocuments(extHostLogService, extHostNotebook));
|
||||
const extHostNotebookEditors = rpcProtocol.set(ExtHostContext.ExtHostNotebookEditors, new ExtHostNotebookEditors(extHostLogService, rpcProtocol, extHostNotebook));
|
||||
const extHostNotebookKernels = rpcProtocol.set(ExtHostContext.ExtHostNotebookKernels, new ExtHostNotebookKernels(rpcProtocol, initData, extHostNotebook, extHostLogService));
|
||||
const extHostNotebookKernels = rpcProtocol.set(ExtHostContext.ExtHostNotebookKernels, new ExtHostNotebookKernels(rpcProtocol, initData, extHostNotebook, extHostCommands, extHostLogService));
|
||||
const extHostNotebookRenderers = rpcProtocol.set(ExtHostContext.ExtHostNotebookRenderers, new ExtHostNotebookRenderers(rpcProtocol, 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));
|
||||
|
||||
@@ -17,7 +17,7 @@ export class ExtHostInteractive implements ExtHostInteractiveShape {
|
||||
private _textDocumentsAndEditors: ExtHostDocumentsAndEditors,
|
||||
private _commands: ExtHostCommands
|
||||
) {
|
||||
const apiCommand = new ApiCommand(
|
||||
const openApiCommand = new ApiCommand(
|
||||
'interactive.open',
|
||||
'_interactive.open',
|
||||
'Open interactive window and return notebook editor and input URI',
|
||||
@@ -35,7 +35,7 @@ export class ExtHostInteractive implements ExtHostInteractiveShape {
|
||||
return { notebookUri: URI.revive(v.notebookUri), inputUri: URI.revive(v.inputUri) };
|
||||
})
|
||||
);
|
||||
this._commands.registerApiCommand(apiCommand);
|
||||
this._commands.registerApiCommand(openApiCommand);
|
||||
}
|
||||
|
||||
$willAddInteractiveDocument(uri: UriComponents, eol: string, modeId: string, notebookUri: UriComponents) {
|
||||
|
||||
@@ -13,6 +13,7 @@ import { URI, UriComponents } from 'vs/base/common/uri';
|
||||
import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { ExtHostNotebookKernelsShape, ICellExecuteUpdateDto, IMainContext, INotebookKernelDto2, MainContext, MainThreadNotebookKernelsShape, NotebookOutputDto } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { ApiCommand, ApiCommandArgument, ApiCommandResult, ExtHostCommands } from 'vs/workbench/api/common/extHostCommands';
|
||||
import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService';
|
||||
import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook';
|
||||
import { ExtHostCell, ExtHostNotebookDocument } from 'vs/workbench/api/common/extHostNotebookDocument';
|
||||
@@ -32,6 +33,11 @@ interface IKernelData {
|
||||
associatedNotebooks: ResourceMap<boolean>;
|
||||
}
|
||||
|
||||
type ExtHostSelectKernelArgs = ControllerInfo | { notebookEditor: vscode.NotebookEditor } | ControllerInfo & { notebookEditor: vscode.NotebookEditor } | undefined;
|
||||
export type SelectKernelReturnArgs = ControllerInfo | { notebookEditorId: string } | ControllerInfo & { notebookEditorId: string } | undefined;
|
||||
type ControllerInfo = { id: string, extension: string };
|
||||
|
||||
|
||||
export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
|
||||
|
||||
private readonly _proxy: MainThreadNotebookKernelsShape;
|
||||
@@ -44,9 +50,35 @@ export class ExtHostNotebookKernels implements ExtHostNotebookKernelsShape {
|
||||
mainContext: IMainContext,
|
||||
private readonly _initData: IExtHostInitDataService,
|
||||
private readonly _extHostNotebook: ExtHostNotebookController,
|
||||
private _commands: ExtHostCommands,
|
||||
@ILogService private readonly _logService: ILogService,
|
||||
) {
|
||||
this._proxy = mainContext.getProxy(MainContext.MainThreadNotebookKernels);
|
||||
|
||||
// todo@rebornix @joyceerhl: move to APICommands once stablized.
|
||||
const selectKernelApiCommand = new ApiCommand(
|
||||
'notebook.selectKernel',
|
||||
'_notebook.selectKernel',
|
||||
'Trigger kernel picker for specified notebook editor widget',
|
||||
[
|
||||
new ApiCommandArgument<ExtHostSelectKernelArgs, SelectKernelReturnArgs>('options', 'Select kernel options', v => true, (v: ExtHostSelectKernelArgs) => {
|
||||
if (v && 'notebookEditor' in v && 'id' in v) {
|
||||
const notebookEditorId = this._extHostNotebook.getIdByEditor(v.notebookEditor);
|
||||
return {
|
||||
id: v.id, extension: v.extension, notebookEditorId
|
||||
};
|
||||
} else if (v && 'notebookEditor' in v) {
|
||||
const notebookEditorId = this._extHostNotebook.getIdByEditor(v.notebookEditor);
|
||||
if (notebookEditorId === undefined) {
|
||||
throw new Error(`Cannot invoke 'notebook.selectKernel' for unrecognized notebook editor ${v.notebookEditor.document.uri.toString()}`);
|
||||
}
|
||||
return { notebookEditorId };
|
||||
}
|
||||
return v;
|
||||
})
|
||||
],
|
||||
ApiCommandResult.Void);
|
||||
this._commands.registerApiCommand(selectKernelApiCommand);
|
||||
}
|
||||
|
||||
createNotebookController(extension: IExtensionDescription, id: string, viewType: string, label: string, handler?: (cells: vscode.NotebookCell[], notebook: vscode.NotebookDocument, controller: vscode.NotebookController) => void | Thenable<void>, preloads?: vscode.NotebookRendererScript[]): vscode.NotebookController {
|
||||
|
||||
Reference in New Issue
Block a user