@@ -36,6 +36,7 @@ import { URI } from 'vs/base/common/uri';
36
36
import { IOpenerService } from 'vs/platform/opener/common/opener' ;
37
37
import { INotebookTextModel } from 'vs/workbench/contrib/notebook/common/notebookCommon' ;
38
38
import { SELECT_KERNEL_ID } from 'vs/workbench/contrib/notebook/browser/controller/coreActions' ;
39
+ import { EnablementState } from 'vs/workbench/services/extensionManagement/common/extensionManagement' ;
39
40
40
41
type KernelPick = IQuickPickItem & { kernel : INotebookKernel } ;
41
42
function isKernelPick ( item : QuickPickInput < IQuickPickItem > ) : item is KernelPick {
@@ -287,17 +288,22 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
287
288
) {
288
289
// If extension id is provided attempt to install the extension as the user has requested the suggested ones be installed
289
290
const extensionsToInstall : IExtension [ ] = [ ] ;
291
+ const extensionsToEnable : IExtension [ ] = [ ] ;
290
292
291
293
for ( const extId of extIds ) {
292
294
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
+ }
296
302
}
297
303
}
298
304
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 => {
301
307
await extensionWorkbenchService . install (
302
308
extension ,
303
309
{
@@ -306,7 +312,21 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
306
312
} ,
307
313
ProgressLocation . Notification
308
314
) ;
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
+ } ) ] ) ;
310
330
311
331
await extensionService . activateByEvent ( `onNotebook:${ viewType } ` ) ;
312
332
return ;
@@ -348,7 +368,11 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
348
368
const suggestedExtension : INotebookExtensionRecommendation | undefined = language ? this . getSuggestedKernelFromLanguage ( notebookTextModel . viewType , language ) : undefined ;
349
369
if ( suggestedExtension ) {
350
370
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
+ ) ;
352
376
353
377
if ( extensions . length === suggestedExtension . extensionIds . length ) {
354
378
// it's installed but might be detecting kernels
@@ -359,7 +383,7 @@ abstract class KernelPickerStrategyBase implements IKernelPickerStrategy {
359
383
quickPickItems . push ( {
360
384
id : 'installSuggested' ,
361
385
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' ) ,
363
387
extensionIds : suggestedExtension . extensionIds
364
388
} as InstallExtensionPick ) ;
365
389
}
@@ -605,7 +629,7 @@ export class KernelPickerMRUStrategy extends KernelPickerStrategyBase {
605
629
selectedKernelPickItem . extensionIds ,
606
630
this . _productService . quality !== 'stable'
607
631
) ;
608
- return true ;
632
+ return this . displaySelectAnotherQuickPick ( editor , false ) ;
609
633
}
610
634
}
611
635
0 commit comments