Skip to content

Commit 05144a3

Browse files
committed
new kernel provider works side by side
1 parent 4fc84b3 commit 05144a3

7 files changed

Lines changed: 65 additions & 36 deletions

File tree

src/vs/workbench/api/browser/mainThreadNotebook.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,8 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
469469
resolveKernel: (editorId: string, uri: URI, kernelId: string, token: CancellationToken) => {
470470
return that._proxy.$resolveNotebookKernel(handle, editorId, uri, kernelId, token);
471471
},
472-
executeNotebook: (viewType: string, uri: URI, kernelId: string, handle: number | undefined, token: CancellationToken) => {
473-
return that._proxy.$executeNotebook2(kernelId, viewType, uri, handle, token);
472+
executeNotebook: (uri: URI, kernelId: string, cellHandle: number | undefined, token: CancellationToken) => {
473+
return that._proxy.$executeNotebookKernelFromProvider(handle, uri, kernelId, cellHandle, token);
474474
}
475475
});
476476
this._notebookKernelProviders.set(handle, {
@@ -527,8 +527,8 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
527527
await controller?.spliceNotebookCellOutputs(resource, cellHandle, splices, renderers);
528528
}
529529

530-
async executeNotebook(viewType: string, uri: URI, useAttachedKernel: boolean, token: CancellationToken): Promise<void> {
531-
return this._proxy.$executeNotebook(viewType, uri, undefined, useAttachedKernel, token);
530+
async executeNotebookByAttachedKernel(viewType: string, uri: URI, token: CancellationToken): Promise<void> {
531+
return this._proxy.$executeNotebookByAttachedKernel(viewType, uri, undefined, token);
532532
}
533533

534534
async $postMessage(editorId: string, forRendererId: string | undefined, value: any): Promise<boolean> {
@@ -691,8 +691,8 @@ export class MainThreadNotebookController implements IMainNotebookController {
691691
await mainthreadNotebook?.spliceNotebookCellOutputs(cellHandle, splices);
692692
}
693693

694-
async executeNotebook(viewType: string, uri: URI, useAttachedKernel: boolean, token: CancellationToken): Promise<void> {
695-
return this._mainThreadNotebook.executeNotebook(viewType, uri, useAttachedKernel, token);
694+
async executeNotebookByAttachedKernel(viewType: string, uri: URI, token: CancellationToken): Promise<void> {
695+
return this._mainThreadNotebook.executeNotebookByAttachedKernel(viewType, uri, token);
696696
}
697697

698698
onDidReceiveMessage(editorId: string, rendererType: string | undefined, message: unknown): void {
@@ -739,8 +739,8 @@ export class MainThreadNotebookController implements IMainNotebookController {
739739
document?.textModel.updateNotebookCellMetadata(handle, metadata);
740740
}
741741

742-
async executeNotebookCell(uri: URI, handle: number, useAttachedKernel: boolean, token: CancellationToken): Promise<void> {
743-
return this._proxy.$executeNotebook(this._viewType, uri, handle, useAttachedKernel, token);
742+
async executeNotebookCell(uri: URI, handle: number, token: CancellationToken): Promise<void> {
743+
return this._proxy.$executeNotebookByAttachedKernel(this._viewType, uri, handle, token);
744744
}
745745

746746
async save(uri: URI, token: CancellationToken): Promise<boolean> {

src/vs/workbench/api/common/extHost.protocol.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1616,7 +1616,8 @@ export interface ExtHostNotebookShape {
16161616
$resolveNotebookEditor(viewType: string, uri: UriComponents, editorId: string): Promise<void>;
16171617
$provideNotebookKernels(handle: number, uri: UriComponents, token: CancellationToken): Promise<INotebookKernelInfoDto2[]>;
16181618
$resolveNotebookKernel(handle: number, editorId: string, uri: UriComponents, kernelId: string, token: CancellationToken): Promise<void>;
1619-
$executeNotebook(viewType: string, uri: UriComponents, cellHandle: number | undefined, useAttachedKernel: boolean, token: CancellationToken): Promise<void>;
1619+
$executeNotebookByAttachedKernel(viewType: string, uri: UriComponents, cellHandle: number | undefined, token: CancellationToken): Promise<void>;
1620+
$executeNotebookKernelFromProvider(handle: number, uri: UriComponents, kernelId: string, cellHandle: number | undefined, token: CancellationToken): Promise<void>;
16201621
$executeNotebook2(kernelId: string, viewType: string, uri: UriComponents, cellHandle: number | undefined, token: CancellationToken): Promise<void>;
16211622
$saveNotebook(viewType: string, uri: UriComponents, token: CancellationToken): Promise<boolean>;
16221623
$saveNotebookAs(viewType: string, uri: UriComponents, target: UriComponents, token: CancellationToken): Promise<boolean>;

src/vs/workbench/api/common/extHostNotebook.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export class ExtHostCell extends Disposable implements vscode.NotebookCell {
131131
start: diff.start,
132132
toInsert: diff.toInsert.map((output): IProcessedOutput => {
133133
if (output.outputKind === CellOutputKind.Rich) {
134-
const uuid = generateUuid();
134+
const uuid = UUID.generateUuid();
135135
this._outputMapping.set(output, uuid);
136136
return { ...output, outputId: uuid };
137137
}
@@ -816,6 +816,7 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
816816
id,
817817
label: kernel.label,
818818
extension: this._extension.identifier,
819+
extensionLocation: this._extension.extensionLocation,
819820
description: kernel.description,
820821
isPreferred: kernel.isPreferred,
821822
preloads: kernel.preloads
@@ -839,6 +840,20 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
839840
return this._provider.resolveKernel(kernel, document, webview, token);
840841
}
841842
}
843+
844+
async executeNotebook(kernelId: string, document: ExtHostNotebookDocument, cell: ExtHostCell | undefined, token: CancellationToken) {
845+
const kernel = this._idToKernel.get(kernelId);
846+
847+
if (!kernel) {
848+
return;
849+
}
850+
851+
if (cell) {
852+
return kernel.executeCell(document, cell, token);
853+
} else {
854+
return kernel.executeAllCells(document, token);
855+
}
856+
}
842857
}
843858

844859
export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostNotebookOutputRenderingHandler {
@@ -1214,7 +1229,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
12141229
}
12151230
}
12161231

1217-
async $executeNotebook(viewType: string, uri: UriComponents, cellHandle: number | undefined, useAttachedKernel: boolean, token: CancellationToken): Promise<void> {
1232+
async $executeNotebookByAttachedKernel(viewType: string, uri: UriComponents, cellHandle: number | undefined, token: CancellationToken): Promise<void> {
12181233
let document = this._documents.get(URI.revive(uri).toString());
12191234

12201235
if (!document) {
@@ -1225,7 +1240,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
12251240
const cell = cellHandle !== undefined ? document.getCell(cellHandle) : undefined;
12261241
const provider = this._notebookContentProviders.get(viewType)!.provider;
12271242

1228-
if (provider.kernel && useAttachedKernel) {
1243+
if (provider.kernel) {
12291244
if (cell) {
12301245
return provider.kernel.executeCell(document, cell, token);
12311246
} else {
@@ -1235,6 +1250,14 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
12351250
}
12361251
}
12371252

1253+
async $executeNotebookKernelFromProvider(handle: number, uri: UriComponents, kernelId: string, cellHandle: number | undefined, token: CancellationToken): Promise<void> {
1254+
await this._withAdapter(handle, uri, async (adapter, document) => {
1255+
let cell = cellHandle !== undefined ? document.getCell(cellHandle) : undefined;
1256+
1257+
return adapter.executeNotebook(kernelId, document, cell, token);
1258+
});
1259+
}
1260+
12381261
async $executeNotebook2(kernelId: string, viewType: string, uri: UriComponents, cellHandle: number | undefined, token: CancellationToken): Promise<void> {
12391262
let document = this._documents.get(URI.revive(uri).toString());
12401263

src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
577577
if (kernelsFromSameExtension.length) {
578578
const preferedKernel = kernelsFromSameExtension.find(kernel => kernel.isPreferred) || kernelsFromSameExtension[0];
579579
this.activeKernel = preferedKernel;
580-
await this.notebookService.resolveNotebookKernel(this.viewModel!.viewType, this.viewModel!.uri, this.getId(), preferedKernel.id);
580+
await preferedKernel.resolve(this.viewModel!.uri, this.getId());
581581
return;
582582
}
583583

@@ -1152,14 +1152,12 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
11521152
if (this._activeKernel) {
11531153
// TODO@rebornix temp any cast, should be removed once we remove legacy kernel support
11541154
if ((this._activeKernel as any).executeNotebook) {
1155-
await (this._activeKernel as INotebookKernelInfo2).executeNotebook(this._notebookViewModel!.viewType, this._notebookViewModel!.uri, undefined, tokenSource.token);
1155+
await (this._activeKernel as INotebookKernelInfo2).executeNotebook(this._notebookViewModel!.uri, undefined, tokenSource.token);
11561156
} else {
11571157
await this.notebookService.executeNotebook2(this._notebookViewModel!.viewType, this._notebookViewModel!.uri, this._activeKernel.id, tokenSource.token);
11581158
}
11591159
} else if (provider.kernel) {
1160-
return await this.notebookService.executeNotebook(viewType, notebookUri, true, tokenSource.token);
1161-
} else {
1162-
return await this.notebookService.executeNotebook(viewType, notebookUri, false, tokenSource.token);
1160+
return await this.notebookService.executeNotebook(viewType, notebookUri, tokenSource.token);
11631161
}
11641162
}
11651163

@@ -1207,11 +1205,15 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
12071205
const notebookUri = this._notebookViewModel!.uri;
12081206

12091207
if (this._activeKernel) {
1210-
return await this.notebookService.executeNotebookCell2(viewType, notebookUri, cell.handle, this._activeKernel.id, tokenSource.token);
1208+
// TODO@rebornix temp any cast, should be removed once we remove legacy kernel support
1209+
if ((this._activeKernel as any).executeNotebook) {
1210+
await (this._activeKernel as INotebookKernelInfo2).executeNotebook(this._notebookViewModel!.uri, cell.handle, tokenSource.token);
1211+
} else {
1212+
1213+
return await this.notebookService.executeNotebookCell2(viewType, notebookUri, cell.handle, this._activeKernel.id, tokenSource.token);
1214+
}
12111215
} else if (provider.kernel) {
1212-
return await this.notebookService.executeNotebookCell(viewType, notebookUri, cell.handle, true, tokenSource.token);
1213-
} else {
1214-
return await this.notebookService.executeNotebookCell(viewType, notebookUri, cell.handle, false, tokenSource.token);
1216+
return await this.notebookService.executeNotebookCell(viewType, notebookUri, cell.handle, tokenSource.token);
12151217
}
12161218
}
12171219
} finally {

src/vs/workbench/contrib/notebook/browser/notebookServiceImpl.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { notebookProviderExtensionPoint, notebookRendererExtensionPoint, INotebo
1010
import { NotebookProviderInfo, NotebookEditorDescriptor } from 'vs/workbench/contrib/notebook/common/notebookProvider';
1111
import { NotebookExtensionDescription } from 'vs/workbench/api/common/extHost.protocol';
1212
import { Emitter, Event } from 'vs/base/common/event';
13-
import { INotebookTextModel, INotebookRendererInfo, NotebookDocumentMetadata, ICellDto2, INotebookKernelInfo, CellOutputKind, ITransformedDisplayOutputDto, IDisplayOutput, ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, NOTEBOOK_DISPLAY_ORDER, sortMimeTypes, IOrderedMimeType, mimeTypeSupportedByCore, IOutputRenderRequestOutputInfo, IOutputRenderRequestCellInfo, NotebookCellOutputsSplice, ICellEditOperation, CellEditType, ICellInsertEdit, IOutputRenderResponse, IProcessedOutput, BUILTIN_RENDERER_ID, NotebookEditorPriority, INotebookKernelProvider, INotebookKernelInfoDto2, notebookDocumentFilterMatch, INotebookKernelInfo2 } from 'vs/workbench/contrib/notebook/common/notebookCommon';
13+
import { INotebookTextModel, INotebookRendererInfo, NotebookDocumentMetadata, ICellDto2, INotebookKernelInfo, CellOutputKind, ITransformedDisplayOutputDto, IDisplayOutput, ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, NOTEBOOK_DISPLAY_ORDER, sortMimeTypes, IOrderedMimeType, mimeTypeSupportedByCore, IOutputRenderRequestOutputInfo, IOutputRenderRequestCellInfo, NotebookCellOutputsSplice, ICellEditOperation, CellEditType, ICellInsertEdit, IOutputRenderResponse, IProcessedOutput, BUILTIN_RENDERER_ID, NotebookEditorPriority, INotebookKernelProvider, notebookDocumentFilterMatch, INotebookKernelInfo2 } from 'vs/workbench/contrib/notebook/common/notebookCommon';
1414
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
1515
import { NotebookOutputRendererInfo } from 'vs/workbench/contrib/notebook/common/notebookOutputRenderer';
1616
import { Iterable } from 'vs/base/common/iterator';
@@ -329,8 +329,8 @@ export class NotebookService extends Disposable implements INotebookService, ICu
329329
const tokenSource = new CancellationTokenSource();
330330
return provider.resolveKernel(editorId, uri, dto.id, tokenSource.token);
331331
},
332-
executeNotebook: async (viewType: string, uri: URI, handle: number | undefined, token: CancellationToken) => {
333-
return provider.executeNotebook(viewType, uri, dto.id, handle, token);
332+
executeNotebook: async (uri: URI, handle: number | undefined, token: CancellationToken) => {
333+
return provider.executeNotebook(uri, dto.id, handle, token);
334334
}
335335
};
336336
});
@@ -674,20 +674,20 @@ export class NotebookService extends Disposable implements INotebookService, ICu
674674
return this.notebookRenderersInfoStore.getContributedRenderer(mimeType);
675675
}
676676

677-
async executeNotebook(viewType: string, uri: URI, useAttachedKernel: boolean, token: CancellationToken): Promise<void> {
677+
async executeNotebook(viewType: string, uri: URI, token: CancellationToken): Promise<void> {
678678
let provider = this._notebookProviders.get(viewType);
679679

680680
if (provider) {
681-
return provider.controller.executeNotebook(viewType, uri, useAttachedKernel, token);
681+
return provider.controller.executeNotebookByAttachedKernel(viewType, uri, token);
682682
}
683683

684684
return;
685685
}
686686

687-
async executeNotebookCell(viewType: string, uri: URI, handle: number, useAttachedKernel: boolean, token: CancellationToken): Promise<void> {
687+
async executeNotebookCell(viewType: string, uri: URI, handle: number, token: CancellationToken): Promise<void> {
688688
const provider = this._notebookProviders.get(viewType);
689689
if (provider) {
690-
await provider.controller.executeNotebookCell(uri, handle, useAttachedKernel, token);
690+
await provider.controller.executeNotebookCell(uri, handle, token);
691691
}
692692
}
693693

src/vs/workbench/contrib/notebook/common/notebookCommon.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -648,13 +648,13 @@ export interface INotebookKernelInfoDto2 {
648648

649649
export interface INotebookKernelInfo2 extends INotebookKernelInfoDto2 {
650650
resolve(uri: URI, editorId: string): Promise<void>;
651-
executeNotebook(viewType: string, uri: URI, handle: number | undefined, token: CancellationToken): Promise<void>;
651+
executeNotebook(uri: URI, handle: number | undefined, token: CancellationToken): Promise<void>;
652652
}
653653

654654
export interface INotebookKernelProvider {
655655
selector: INotebookDocumentFilter;
656656
onDidChangeKernels: Event<void>;
657657
provideKernels(uri: URI, token: CancellationToken): Promise<INotebookKernelInfoDto2[]>;
658658
resolveKernel(editorId: string, uri: UriComponents, kernelId: string, token: CancellationToken): Promise<void>;
659-
executeNotebook(viewType: string, uri: URI, kernelId: string, handle: number | undefined, token: CancellationToken): Promise<void>;
659+
executeNotebook(uri: URI, kernelId: string, handle: number | undefined, token: CancellationToken): Promise<void>;
660660
}

src/vs/workbench/contrib/notebook/common/notebookService.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import { URI } from 'vs/base/common/uri';
88
import { NotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/notebookProvider';
99
import { NotebookExtensionDescription } from 'vs/workbench/api/common/extHost.protocol';
1010
import { Event } from 'vs/base/common/event';
11-
import { INotebookTextModel, INotebookRendererInfo, NotebookDocumentMetadata, ICellDto2, INotebookKernelInfo, INotebookKernelInfoDto, INotebookTextModelBackup, IEditor, ICellEditOperation, NotebookCellOutputsSplice, IOrderedMimeType, IProcessedOutput, INotebookKernelProvider, INotebookKernelInfoDto2 } from 'vs/workbench/contrib/notebook/common/notebookCommon';
11+
import {
12+
INotebookTextModel, INotebookRendererInfo, NotebookDocumentMetadata, ICellDto2, INotebookKernelInfo, INotebookKernelInfoDto, INotebookTextModelBackup,
13+
IEditor, ICellEditOperation, NotebookCellOutputsSplice, IOrderedMimeType, IProcessedOutput, INotebookKernelProvider, INotebookKernelInfo2
14+
} from 'vs/workbench/contrib/notebook/common/notebookCommon';
1215
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
1316
import { CancellationToken } from 'vs/base/common/cancellation';
1417
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
@@ -21,9 +24,9 @@ export interface IMainNotebookController {
2124
kernel: INotebookKernelInfoDto | undefined;
2225
createNotebook(viewType: string, uri: URI, backup: INotebookTextModelBackup | undefined, forceReload: boolean, editorId?: string, backupId?: string): Promise<NotebookTextModel | undefined>;
2326
resolveNotebookEditor(viewType: string, uri: URI, editorId: string): Promise<void>;
24-
executeNotebook(viewType: string, uri: URI, useAttachedKernel: boolean, token: CancellationToken): Promise<void>;
27+
executeNotebookByAttachedKernel(viewType: string, uri: URI, token: CancellationToken): Promise<void>;
2528
onDidReceiveMessage(editorId: string, rendererType: string | undefined, message: any): void;
26-
executeNotebookCell(uri: URI, handle: number, useAttachedKernel: boolean, token: CancellationToken): Promise<void>;
29+
executeNotebookCell(uri: URI, handle: number, token: CancellationToken): Promise<void>;
2730
removeNotebookDocument(notebook: INotebookTextModel): Promise<void>;
2831
save(uri: URI, token: CancellationToken): Promise<boolean>;
2932
saveAs(uri: URI, target: URI, token: CancellationToken): Promise<boolean>;
@@ -51,12 +54,12 @@ export interface INotebookService {
5154
unregisterNotebookKernel(id: string): void;
5255
registerNotebookKernelProvider(provider: INotebookKernelProvider): IDisposable;
5356
getContributedNotebookKernels(viewType: string, resource: URI): readonly INotebookKernelInfo[];
54-
getContributedNotebookKernels2(viewType: string, resource: URI, token: CancellationToken): Promise<INotebookKernelInfoDto2[]>;
57+
getContributedNotebookKernels2(viewType: string, resource: URI, token: CancellationToken): Promise<INotebookKernelInfo2[]>;
5558
getRendererInfo(id: string): INotebookRendererInfo | undefined;
5659
resolveNotebook(viewType: string, uri: URI, forceReload: boolean, editorId?: string, backupId?: string): Promise<NotebookTextModel | undefined>;
5760
createNotebookFromBackup(viewType: string, uri: URI, metadata: NotebookDocumentMetadata, languages: string[], cells: ICellDto2[], editorId?: string): Promise<NotebookTextModel | undefined>;
58-
executeNotebook(viewType: string, uri: URI, useAttachedKernel: boolean, token: CancellationToken): Promise<void>;
59-
executeNotebookCell(viewType: string, uri: URI, handle: number, useAttachedKernel: boolean, token: CancellationToken): Promise<void>;
61+
executeNotebook(viewType: string, uri: URI, token: CancellationToken): Promise<void>;
62+
executeNotebookCell(viewType: string, uri: URI, handle: number, token: CancellationToken): Promise<void>;
6063
executeNotebook2(viewType: string, uri: URI, kernelId: string, token: CancellationToken): Promise<void>;
6164
executeNotebookCell2(viewType: string, uri: URI, handle: number, kernelId: string, token: CancellationToken): Promise<void>;
6265
getContributedNotebookProviders(resource: URI): readonly NotebookProviderInfo[];

0 commit comments

Comments
 (0)