@@ -36,6 +36,7 @@ import { URI } from 'vs/base/common/uri';
3636import { IOpenerService } from 'vs/platform/opener/common/opener' ;
3737import { INotebookTextModel } from 'vs/workbench/contrib/notebook/common/notebookCommon' ;
3838import { SELECT_KERNEL_ID } from 'vs/workbench/contrib/notebook/browser/controller/coreActions' ;
39+ import { EnablementState } from 'vs/workbench/services/extensionManagement/common/extensionManagement' ;
3940
4041type KernelPick = IQuickPickItem & { kernel : INotebookKernel } ;
4142function 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