diff --git a/src/client/pythonEnvironments/index.ts b/src/client/pythonEnvironments/index.ts index 0c20bf803bc2..c1e4f6f510fa 100644 --- a/src/client/pythonEnvironments/index.ts +++ b/src/client/pythonEnvironments/index.ts @@ -54,6 +54,7 @@ export function initialize(ext: ExtensionState): PythonEnvironments { ext.legacyIOC.serviceManager, api, environmentsSecurity, + ext.disposables ); return api; diff --git a/src/client/pythonEnvironments/legacyIOC.ts b/src/client/pythonEnvironments/legacyIOC.ts index 20828fa18d29..272c72ed1461 100644 --- a/src/client/pythonEnvironments/legacyIOC.ts +++ b/src/client/pythonEnvironments/legacyIOC.ts @@ -5,6 +5,7 @@ import { injectable } from 'inversify'; import * as vscode from 'vscode'; import { IExtensionSingleActivationService } from '../activation/types'; import { DiscoveryVariants } from '../common/experiments/groups'; +import { IDisposableRegistry } from '../common/types'; import { getVersionString, parseVersion } from '../common/utils/version'; import { CONDA_ENV_FILE_SERVICE, @@ -152,6 +153,7 @@ class ComponentAdapter implements IComponentAdapter, IExtensionSingleActivationS // The adapter only wraps one thing: the component API. private readonly api: IPythonEnvironments, private readonly environmentsSecurity: IEnvironmentsSecurity, + private readonly disposables: IDisposableRegistry, ) {} public async activate(): Promise { @@ -161,6 +163,14 @@ class ComponentAdapter implements IComponentAdapter, IExtensionSingleActivationS inExperiment(DiscoveryVariants.discoveryWithoutFileWatching), ], )).includes(true); + this.disposables.push(this.api.onChanged((e) => { + const query = { + kinds: e.kind ? [e.kind] : undefined, + searchLocations: e.searchLocation ? { roots: [e.searchLocation] } : undefined + }; + // Trigger a background refresh of the environments. + getEnvs(this.api.iterEnvs(query)).ignoreErrors(); + })); } // IInterpreterLocatorProgressHandler @@ -409,10 +419,11 @@ export function registerNewDiscoveryForIOC( serviceManager: IServiceManager, api: IPythonEnvironments, environmentsSecurity: EnvironmentsSecurity, + disposables: IDisposableRegistry ): void { serviceManager.addSingletonInstance( IComponentAdapter, - new ComponentAdapter(api, environmentsSecurity), + new ComponentAdapter(api, environmentsSecurity, disposables), ); serviceManager.addBinding(IComponentAdapter, IExtensionSingleActivationService); } diff --git a/src/test/pythonEnvironments/legacyIOC.ts b/src/test/pythonEnvironments/legacyIOC.ts index 9ea0a9231103..ab3f73661ae1 100644 --- a/src/test/pythonEnvironments/legacyIOC.ts +++ b/src/test/pythonEnvironments/legacyIOC.ts @@ -23,5 +23,6 @@ export function registerForIOC( serviceManager, instance(mock(PythonEnvironments)), instance(mock(EnvironmentsSecurity)), + [] ); }