Skip to content

Commit 2518d2c

Browse files
committed
update kernel per document.
1 parent 774e868 commit 2518d2c

8 files changed

Lines changed: 23 additions & 18 deletions

File tree

src/vs/vscode.proposed.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1662,7 +1662,7 @@ declare module 'vscode' {
16621662
}
16631663

16641664
export interface NotebookKernelProvider<T extends NotebookKernel = NotebookKernel> {
1665-
onDidChangeKernels?: Event<void>;
1665+
onDidChangeKernels?: Event<NotebookDocument | undefined>;
16661666
provideKernels(document: NotebookDocument, token: CancellationToken): ProviderResult<T[]>;
16671667
resolveKernel?(kernel: T, document: NotebookDocument, webview: NotebookCommunication, token: CancellationToken): ProviderResult<void>;
16681668
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class DocumentAndEditorState {
133133
export class MainThreadNotebooks extends Disposable implements MainThreadNotebookShape {
134134
private readonly _notebookProviders = new Map<string, IMainNotebookController>();
135135
private readonly _notebookKernels = new Map<string, MainThreadNotebookKernel>();
136-
private readonly _notebookKernelProviders = new Map<number, { extension: NotebookExtensionDescription, emitter: Emitter<void>, provider: IDisposable }>();
136+
private readonly _notebookKernelProviders = new Map<number, { extension: NotebookExtensionDescription, emitter: Emitter<URI | undefined>, provider: IDisposable }>();
137137
private readonly _proxy: ExtHostNotebookShape;
138138
private _toDisposeOnEditorRemove = new Map<string, IDisposable>();
139139
private _currentState?: DocumentAndEditorState;
@@ -504,7 +504,7 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
504504
}
505505

506506
async $registerNotebookKernelProvider(extension: NotebookExtensionDescription, handle: number, documentFilter: INotebookDocumentFilter): Promise<void> {
507-
const emitter = new Emitter<void>();
507+
const emitter = new Emitter<URI | undefined>();
508508
const that = this;
509509
const provider = this._notebookService.registerNotebookKernelProvider({
510510
providerExtensionId: extension.id.value,
@@ -551,10 +551,10 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
551551
}
552552
}
553553

554-
$onNotebookKernelChange(handle: number): void {
554+
$onNotebookKernelChange(handle: number, uriComponents: UriComponents): void {
555555
const entry = this._notebookKernelProviders.get(handle);
556556

557-
entry?.emitter.fire();
557+
entry?.emitter.fire(uriComponents ? URI.revive(uriComponents) : undefined);
558558
}
559559

560560
async $updateNotebookLanguages(viewType: string, resource: UriComponents, languages: string[]): Promise<void> {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ export interface MainThreadNotebookShape extends IDisposable {
735735
$registerNotebookKernel(extension: NotebookExtensionDescription, id: string, label: string, selectors: (string | IRelativePattern)[], preloads: UriComponents[]): Promise<void>;
736736
$registerNotebookKernelProvider(extension: NotebookExtensionDescription, handle: number, documentFilter: INotebookDocumentFilter): Promise<void>;
737737
$unregisterNotebookKernelProvider(handle: number): Promise<void>;
738-
$onNotebookKernelChange(handle: number): void;
738+
$onNotebookKernelChange(handle: number, uri: UriComponents | undefined): void;
739739
$unregisterNotebookKernel(id: string): Promise<void>;
740740
$tryApplyEdits(viewType: string, resource: UriComponents, modelVersionId: number, edits: ICellEditOperation[]): Promise<boolean>;
741741
$updateNotebookLanguages(viewType: string, resource: UriComponents, languages: string[]): Promise<void>;

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -795,8 +795,9 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
795795
super();
796796

797797
if (this._provider.onDidChangeKernels) {
798-
this._register(this._provider.onDidChangeKernels(() => {
799-
this._proxy.$onNotebookKernelChange(this._handle);
798+
this._register(this._provider.onDidChangeKernels((e: vscode.NotebookDocument | undefined) => {
799+
const uri = e?.uri;
800+
this._proxy.$onNotebookKernelChange(this._handle, uri);
800801
}));
801802
}
802803
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,11 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
638638
// we don't await for it, otherwise it will slow down the file opening
639639
this._setKernels(textModel, this._currentKernelTokenSource);
640640

641-
this._localStore.add(this.notebookService.onDidChangeKernels(async () => {
641+
this._localStore.add(this.notebookService.onDidChangeKernels(async (e) => {
642+
if (e && e.toString() !== this.textModel?.uri.toString()) {
643+
// kernel update is not for current document.
644+
return;
645+
}
642646
this._currentKernelTokenSource?.cancel();
643647
this._currentKernelTokenSource = new CancellationTokenSource();
644648
await this._setKernels(textModel, this._currentKernelTokenSource);

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,8 @@ export class NotebookService extends Disposable implements INotebookService, ICu
254254
private readonly _onDidChangeViewTypes = new Emitter<void>();
255255
onDidChangeViewTypes: Event<void> = this._onDidChangeViewTypes.event;
256256

257-
private readonly _onDidChangeKernels = new Emitter<void>();
258-
onDidChangeKernels: Event<void> = this._onDidChangeKernels.event;
257+
private readonly _onDidChangeKernels = new Emitter<URI | undefined>();
258+
onDidChangeKernels: Event<URI | undefined> = this._onDidChangeKernels.event;
259259
private readonly _onDidChangeNotebookActiveKernel = new Emitter<{ uri: URI, providerHandle: number | undefined, kernelId: string | undefined }>();
260260
onDidChangeNotebookActiveKernel: Event<{ uri: URI, providerHandle: number | undefined, kernelId: string | undefined }> = this._onDidChangeNotebookActiveKernel.event;
261261
private cutItems: NotebookCellTextModel[] | undefined;
@@ -558,21 +558,21 @@ export class NotebookService extends Disposable implements INotebookService, ICu
558558

559559
registerNotebookKernel(notebook: INotebookKernelInfo): void {
560560
this._notebookKernels.set(notebook.id, notebook);
561-
this._onDidChangeKernels.fire();
561+
this._onDidChangeKernels.fire(undefined);
562562
}
563563

564564
unregisterNotebookKernel(id: string): void {
565565
this._notebookKernels.delete(id);
566-
this._onDidChangeKernels.fire();
566+
this._onDidChangeKernels.fire(undefined);
567567
}
568568

569569
registerNotebookKernelProvider(provider: INotebookKernelProvider): IDisposable {
570570
const d = this.notebookKernelProviderInfoStore.add(provider);
571-
const kernelChangeEventListener = provider.onDidChangeKernels(() => {
572-
this._onDidChangeKernels.fire();
571+
const kernelChangeEventListener = provider.onDidChangeKernels((e) => {
572+
this._onDidChangeKernels.fire(e);
573573
});
574574

575-
this._onDidChangeKernels.fire();
575+
this._onDidChangeKernels.fire(undefined);
576576
return toDisposable(() => {
577577
kernelChangeEventListener.dispose();
578578
d.dispose();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,7 @@ export interface INotebookKernelProvider {
799799
providerExtensionId: string;
800800
providerDescription?: string;
801801
selector: INotebookDocumentFilter;
802-
onDidChangeKernels: Event<void>;
802+
onDidChangeKernels: Event<URI | undefined>;
803803
provideKernels(uri: URI, token: CancellationToken): Promise<INotebookKernelInfoDto2[]>;
804804
resolveKernel(editorId: string, uri: UriComponents, kernelId: string, token: CancellationToken): Promise<void>;
805805
executeNotebook(uri: URI, kernelId: string, handle: number | undefined): Promise<void>;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export interface INotebookService {
4444
onNotebookDocumentRemove: Event<URI[]>;
4545
onNotebookDocumentAdd: Event<URI[]>;
4646
onNotebookDocumentSaved: Event<URI>;
47-
onDidChangeKernels: Event<void>;
47+
onDidChangeKernels: Event<URI | undefined>;
4848
onDidChangeNotebookActiveKernel: Event<{ uri: URI, providerHandle: number | undefined, kernelId: string | undefined }>;
4949
registerNotebookController(viewType: string, extensionData: NotebookExtensionDescription, controller: IMainNotebookController): void;
5050
unregisterNotebookProvider(viewType: string): void;

0 commit comments

Comments
 (0)