new kernel provider works side by side

This commit is contained in:
rebornix
2020-07-15 17:01:48 -07:00
parent 4fc84b3a11
commit 05144a3d4e
7 changed files with 65 additions and 36 deletions

View File

@@ -469,8 +469,8 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
resolveKernel: (editorId: string, uri: URI, kernelId: string, token: CancellationToken) => {
return that._proxy.$resolveNotebookKernel(handle, editorId, uri, kernelId, token);
},
executeNotebook: (viewType: string, uri: URI, kernelId: string, handle: number | undefined, token: CancellationToken) => {
return that._proxy.$executeNotebook2(kernelId, viewType, uri, handle, token);
executeNotebook: (uri: URI, kernelId: string, cellHandle: number | undefined, token: CancellationToken) => {
return that._proxy.$executeNotebookKernelFromProvider(handle, uri, kernelId, cellHandle, token);
}
});
this._notebookKernelProviders.set(handle, {
@@ -527,8 +527,8 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
await controller?.spliceNotebookCellOutputs(resource, cellHandle, splices, renderers);
}
async executeNotebook(viewType: string, uri: URI, useAttachedKernel: boolean, token: CancellationToken): Promise<void> {
return this._proxy.$executeNotebook(viewType, uri, undefined, useAttachedKernel, token);
async executeNotebookByAttachedKernel(viewType: string, uri: URI, token: CancellationToken): Promise<void> {
return this._proxy.$executeNotebookByAttachedKernel(viewType, uri, undefined, token);
}
async $postMessage(editorId: string, forRendererId: string | undefined, value: any): Promise<boolean> {
@@ -691,8 +691,8 @@ export class MainThreadNotebookController implements IMainNotebookController {
await mainthreadNotebook?.spliceNotebookCellOutputs(cellHandle, splices);
}
async executeNotebook(viewType: string, uri: URI, useAttachedKernel: boolean, token: CancellationToken): Promise<void> {
return this._mainThreadNotebook.executeNotebook(viewType, uri, useAttachedKernel, token);
async executeNotebookByAttachedKernel(viewType: string, uri: URI, token: CancellationToken): Promise<void> {
return this._mainThreadNotebook.executeNotebookByAttachedKernel(viewType, uri, token);
}
onDidReceiveMessage(editorId: string, rendererType: string | undefined, message: unknown): void {
@@ -739,8 +739,8 @@ export class MainThreadNotebookController implements IMainNotebookController {
document?.textModel.updateNotebookCellMetadata(handle, metadata);
}
async executeNotebookCell(uri: URI, handle: number, useAttachedKernel: boolean, token: CancellationToken): Promise<void> {
return this._proxy.$executeNotebook(this._viewType, uri, handle, useAttachedKernel, token);
async executeNotebookCell(uri: URI, handle: number, token: CancellationToken): Promise<void> {
return this._proxy.$executeNotebookByAttachedKernel(this._viewType, uri, handle, token);
}
async save(uri: URI, token: CancellationToken): Promise<boolean> {

View File

@@ -1616,7 +1616,8 @@ export interface ExtHostNotebookShape {
$resolveNotebookEditor(viewType: string, uri: UriComponents, editorId: string): Promise<void>;
$provideNotebookKernels(handle: number, uri: UriComponents, token: CancellationToken): Promise<INotebookKernelInfoDto2[]>;
$resolveNotebookKernel(handle: number, editorId: string, uri: UriComponents, kernelId: string, token: CancellationToken): Promise<void>;
$executeNotebook(viewType: string, uri: UriComponents, cellHandle: number | undefined, useAttachedKernel: boolean, token: CancellationToken): Promise<void>;
$executeNotebookByAttachedKernel(viewType: string, uri: UriComponents, cellHandle: number | undefined, token: CancellationToken): Promise<void>;
$executeNotebookKernelFromProvider(handle: number, uri: UriComponents, kernelId: string, cellHandle: number | undefined, token: CancellationToken): Promise<void>;
$executeNotebook2(kernelId: string, viewType: string, uri: UriComponents, cellHandle: number | undefined, token: CancellationToken): Promise<void>;
$saveNotebook(viewType: string, uri: UriComponents, token: CancellationToken): Promise<boolean>;
$saveNotebookAs(viewType: string, uri: UriComponents, target: UriComponents, token: CancellationToken): Promise<boolean>;

View File

@@ -131,7 +131,7 @@ export class ExtHostCell extends Disposable implements vscode.NotebookCell {
start: diff.start,
toInsert: diff.toInsert.map((output): IProcessedOutput => {
if (output.outputKind === CellOutputKind.Rich) {
const uuid = generateUuid();
const uuid = UUID.generateUuid();
this._outputMapping.set(output, uuid);
return { ...output, outputId: uuid };
}
@@ -816,6 +816,7 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
id,
label: kernel.label,
extension: this._extension.identifier,
extensionLocation: this._extension.extensionLocation,
description: kernel.description,
isPreferred: kernel.isPreferred,
preloads: kernel.preloads
@@ -839,6 +840,20 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
return this._provider.resolveKernel(kernel, document, webview, token);
}
}
async executeNotebook(kernelId: string, document: ExtHostNotebookDocument, cell: ExtHostCell | undefined, token: CancellationToken) {
const kernel = this._idToKernel.get(kernelId);
if (!kernel) {
return;
}
if (cell) {
return kernel.executeCell(document, cell, token);
} else {
return kernel.executeAllCells(document, token);
}
}
}
export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostNotebookOutputRenderingHandler {
@@ -1214,7 +1229,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
}
}
async $executeNotebook(viewType: string, uri: UriComponents, cellHandle: number | undefined, useAttachedKernel: boolean, token: CancellationToken): Promise<void> {
async $executeNotebookByAttachedKernel(viewType: string, uri: UriComponents, cellHandle: number | undefined, token: CancellationToken): Promise<void> {
let document = this._documents.get(URI.revive(uri).toString());
if (!document) {
@@ -1225,7 +1240,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
const cell = cellHandle !== undefined ? document.getCell(cellHandle) : undefined;
const provider = this._notebookContentProviders.get(viewType)!.provider;
if (provider.kernel && useAttachedKernel) {
if (provider.kernel) {
if (cell) {
return provider.kernel.executeCell(document, cell, token);
} else {
@@ -1235,6 +1250,14 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
}
}
async $executeNotebookKernelFromProvider(handle: number, uri: UriComponents, kernelId: string, cellHandle: number | undefined, token: CancellationToken): Promise<void> {
await this._withAdapter(handle, uri, async (adapter, document) => {
let cell = cellHandle !== undefined ? document.getCell(cellHandle) : undefined;
return adapter.executeNotebook(kernelId, document, cell, token);
});
}
async $executeNotebook2(kernelId: string, viewType: string, uri: UriComponents, cellHandle: number | undefined, token: CancellationToken): Promise<void> {
let document = this._documents.get(URI.revive(uri).toString());