Skip to content

Commit 7ffb51f

Browse files
authored
Avoid kernel picker progress when kernel extensions are disabled (microsoft#187210)
1 parent 13b9015 commit 7ffb51f

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

src/vs/workbench/contrib/notebook/browser/viewParts/notebookKernelQuickPickStrategy.ts

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { URI } from 'vs/base/common/uri';
3636
import { IOpenerService } from 'vs/platform/opener/common/opener';
3737
import { INotebookTextModel } from 'vs/workbench/contrib/notebook/common/notebookCommon';
3838
import { SELECT_KERNEL_ID } from 'vs/workbench/contrib/notebook/browser/controller/coreActions';
39+
import { EnablementState } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
3940

4041
type KernelPick = IQuickPickItem & { kernel: INotebookKernel };
4142
function isKernelPick(item: QuickPickInput<IQuickPickItem>): item is KernelPick {
@@ -287,17 +288,22 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
287288
) {
288289
// If extension id is provided attempt to install the extension as the user has requested the suggested ones be installed
289290
const extensionsToInstall: IExtension[] = [];
291+
const extensionsToEnable: IExtension[] = [];
290292

291293
for (const extId of extIds) {
292294
const extension = (await extensionWorkbenchService.getExtensions([{ id: extId }], CancellationToken.None))[0];
293-
const canInstall = await extensionWorkbenchService.canInstall(extension);
294-
if (canInstall) {
295-
extensionsToInstall.push(extension);
295+
if (extension.enablementState === EnablementState.DisabledGlobally || extension.enablementState === EnablementState.DisabledWorkspace || extension.enablementState === EnablementState.DisabledByEnvironment) {
296+
extensionsToEnable.push(extension);
297+
} else {
298+
const canInstall = await extensionWorkbenchService.canInstall(extension);
299+
if (canInstall) {
300+
extensionsToInstall.push(extension);
301+
}
296302
}
297303
}
298304

299-
if (extensionsToInstall.length) {
300-
await Promise.all(extensionsToInstall.map(async extension => {
305+
if (extensionsToInstall.length || extensionsToEnable.length) {
306+
await Promise.all([...extensionsToInstall.map(async extension => {
301307
await extensionWorkbenchService.install(
302308
extension,
303309
{
@@ -306,7 +312,21 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
306312
},
307313
ProgressLocation.Notification
308314
);
309-
}));
315+
}), ...extensionsToEnable.map(async extension => {
316+
switch (extension.enablementState) {
317+
case EnablementState.DisabledWorkspace:
318+
await extensionWorkbenchService.setEnablement([extension], EnablementState.EnabledWorkspace);
319+
return;
320+
case EnablementState.DisabledGlobally:
321+
await extensionWorkbenchService.setEnablement([extension], EnablementState.EnabledGlobally);
322+
return;
323+
case EnablementState.DisabledByEnvironment:
324+
await extensionWorkbenchService.setEnablement([extension], EnablementState.EnabledByEnvironment);
325+
return;
326+
default:
327+
break;
328+
}
329+
})]);
310330

311331
await extensionService.activateByEvent(`onNotebook:${viewType}`);
312332
return;
@@ -348,7 +368,11 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
348368
const suggestedExtension: INotebookExtensionRecommendation | undefined = language ? this.getSuggestedKernelFromLanguage(notebookTextModel.viewType, language) : undefined;
349369
if (suggestedExtension) {
350370
await extensionWorkbenchService.queryLocal();
351-
const extensions = extensionWorkbenchService.installed.filter(e => suggestedExtension.extensionIds.includes(e.identifier.id));
371+
372+
const extensions = extensionWorkbenchService.installed.filter(e =>
373+
(e.enablementState === EnablementState.EnabledByEnvironment || e.enablementState === EnablementState.EnabledGlobally || e.enablementState === EnablementState.EnabledWorkspace)
374+
&& suggestedExtension.extensionIds.includes(e.identifier.id)
375+
);
352376

353377
if (extensions.length === suggestedExtension.extensionIds.length) {
354378
// it's installed but might be detecting kernels
@@ -359,7 +383,7 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
359383
quickPickItems.push({
360384
id: 'installSuggested',
361385
description: suggestedExtension.displayName ?? suggestedExtension.extensionIds.join(', '),
362-
label: `$(${Codicon.lightbulb.id}) ` + localize('installSuggestedKernel', 'Install suggested extensions'),
386+
label: `$(${Codicon.lightbulb.id}) ` + localize('installSuggestedKernel', 'Install/Enable suggested extensions'),
363387
extensionIds: suggestedExtension.extensionIds
364388
} as InstallExtensionPick);
365389
}
@@ -605,7 +629,7 @@ export class KernelPickerMRUStrategy extends KernelPickerStrategyBase {
605629
selectedKernelPickItem.extensionIds,
606630
this._productService.quality !== 'stable'
607631
);
608-
return true;
632+
return this.displaySelectAnotherQuickPick(editor, false);
609633
}
610634
}
611635

0 commit comments

Comments
 (0)