Code change:
Currently when there is one suggested kernel and that's the one users are using in current document, its presentation in kernel picker is weird <img width="601" alt="image" src="https://user-"This can be simplified as a single "Selected" group at the very top <img width="601" alt="image" src="https://user-"

Related discussion:
text: } } if (!newKernel) { <del> logService.warn(`wanted kernel DOES NOT EXIST, wanted: ${wantedId}, all: ${all.map(k => k.id)}`); </del> <ins> this._logService.warn(`wanted kernel DOES NOT EXIST, wanted: ${wantedId}, all: ${all.map(k => k.id)}`); </ins> return false; } } if (newKernel) { <del> notebookKernelService.selectKernelForNotebook(newKernel, notebook); </del> <ins> this._notebookKernelService.selectKernelForNotebook(newKernel, notebook); </ins> return true; } <del> const quickPick = quickInputService.createQuickPick<KernelQuickPickItem>(); const quickPickItems = this._getKernelPickerQuickPickItems(notebook, matchResult, notebookKernelService, scopedContextKeyService); </del> <ins> const quickPick = this._quickInputService.createQuickPick<KernelQuickPickItem>(); const quickPickItems = this._getKernelPickerQuickPickItems(notebook, matchResult, this._notebookKernelService, scopedContextKeyService); </ins> quickPick.items = quickPickItems; quickPick.canSelectMany = false; quickPick.placeholder = selected <del> ? localize('prompt.placeholder.change', "Change kernel for '{0}'", labelService.getUriLabel(notebook.uri, { relative: true })) : localize('prompt.placeholder.select', "Select kernel for '{0}'", labelService.getUriLabel(notebook.uri, { relative: true })); </del> <ins> ? localize('prompt.placeholder.change', "Change kernel for '{0}'", this._labelService.getUriLabel(notebook.uri, { relative: true })) : localize('prompt.placeholder.select', "Select kernel for '{0}'", this._labelService.getUriLabel(notebook.uri, { relative: true })); </ins> <del> quickPick.busy = notebookKernelService.getKernelDetectionTasks(notebook).length > 0; </del> <ins> quickPick.busy = this._notebookKernelService.getKernelDetectionTasks(notebook).length > 0; </ins> <del> const kernelDetectionTaskListener = notebookKernelService.onDidChangeKernelDetectionTasks(() => { quickPick.busy = notebookKernelService.getKernelDetectionTasks(notebook).length > 0; </del> <ins> const kernelDetectionTaskListener = this._notebookKernelService.onDidChangeKernelDetectionTasks(() => { quickPick.busy = this._notebookKernelService.getKernelDetectionTasks(notebook).length > 0; </ins> }); // run extension recommendataion task if quickPickItems is empty const extensionRecommendataionPromise = quickPickItems.length === 0 <del> ? createCancelablePromise(token => this._showInstallKernelExtensionRecommendation(notebook, quickPick, extensionWorkbenchService, token)) </del> <ins> ? createCancelablePromise(token => this._showInstallKernelExtensionRecommendation(notebook, quickPick, this._extensionWorkbenchService, token)) </ins> : undefined; const kernelChangeEventListener = Event.debounce<void, void>( Event.any( <del> notebookKernelService.onDidChangeSourceActions, notebookKernelService.onDidAddKernel, notebookKernelService.onDidRemoveKernel, notebookKernelService.onDidChangeNotebookAffinity </del> <ins> this._notebookKernelService.onDidChangeSourceActions, this._notebookKernelService.onDidAddKernel, this._notebookKernelService.onDidRemoveKernel, this._notebookKernelService.onDidChangeNotebookAffinity </ins> ), (last, _current) => last, KERNEL_PICKER_UPDATE_DEBOUNCE