diff --git a/src/client/extension.ts b/src/client/extension.ts index 2abbf7d8658e..a7407ac9d241 100644 --- a/src/client/extension.ts +++ b/src/client/extension.ts @@ -36,7 +36,7 @@ import { IAsyncDisposableRegistry, IExtensionContext } from './common/types'; import { createDeferred } from './common/utils/async'; import { Common } from './common/utils/localize'; import { activateComponents } from './extensionActivation'; -import { initializeComponents, initializeGlobals } from './extensionInit'; +import { initializeCommon, initializeComponents, initializeGlobals } from './extensionInit'; import { IServiceContainer } from './ioc/types'; import { sendErrorTelemetry, sendStartupTelemetry } from './startupTelemetry'; @@ -101,6 +101,7 @@ async function activateUnsafe( const [serviceManager, serviceContainer] = initializeGlobals(context); activatedServiceContainer = serviceContainer; + initializeCommon(context, serviceManager, serviceContainer); initializeComponents(context, serviceManager, serviceContainer); const { activationPromise } = await activateComponents(context, serviceManager, serviceContainer); diff --git a/src/client/extensionActivation.ts b/src/client/extensionActivation.ts index b2c7704812c5..e0f61ae7bfca 100644 --- a/src/client/extensionActivation.ts +++ b/src/client/extensionActivation.ts @@ -19,7 +19,6 @@ import { traceError } from './common/logger'; import { registerTypes as platformRegisterTypes } from './common/platform/serviceRegistry'; import { IFileSystem } from './common/platform/types'; import { registerTypes as processRegisterTypes } from './common/process/serviceRegistry'; -import { registerTypes as commonRegisterTypes } from './common/serviceRegistry'; import { IConfigurationService, IDisposableRegistry, @@ -102,7 +101,6 @@ async function activateLegacy( serviceManager.addSingletonInstance(IOutputChannel, jupyterOutputChannel, JUPYTER_OUTPUT_CHANNEL); // Core registrations (non-feature specific). - commonRegisterTypes(serviceManager); platformRegisterTypes(serviceManager); processRegisterTypes(serviceManager); diff --git a/src/client/extensionInit.ts b/src/client/extensionInit.ts index 471da8d12af8..43336cef3229 100644 --- a/src/client/extensionInit.ts +++ b/src/client/extensionInit.ts @@ -8,6 +8,7 @@ import { Container } from 'inversify'; import { Disposable, Memento } from 'vscode'; +import { registerTypes as commonRegisterTypes } from './common/serviceRegistry'; import { GLOBAL_MEMENTO, IDisposableRegistry, IExtensionContext, IMemento, WORKSPACE_MEMENTO } from './common/types'; import { ServiceContainer } from './ioc/container'; import { ServiceManager } from './ioc/serviceManager'; @@ -35,11 +36,21 @@ export function initializeGlobals(context: IExtensionContext): [IServiceManager, return [serviceManager, serviceContainer]; } +export function initializeCommon( + _context: IExtensionContext, + serviceManager: IServiceManager, + _serviceContainer: IServiceContainer +): void { + // Core registrations (non-feature specific). + commonRegisterTypes(serviceManager); + + // We will be pulling other code over from activateLegacy(). +} + export function initializeComponents( _context: IExtensionContext, serviceManager: IServiceManager, serviceContainer: IServiceContainer ) { activatePythonEnvironments(serviceManager, serviceContainer); - // We will be pulling code over from activateLegacy(). } diff --git a/src/client/pythonEnvironments/index.ts b/src/client/pythonEnvironments/index.ts index d461d93ebb90..34089990d5fc 100644 --- a/src/client/pythonEnvironments/index.ts +++ b/src/client/pythonEnvironments/index.ts @@ -3,6 +3,7 @@ import * as vscode from 'vscode'; import { IServiceContainer, IServiceManager } from '../ioc/types'; +import { PythonEnvInfoCache } from './base/envsCache'; import { PythonEnvInfo } from './base/info'; import { ILocator, IPythonEnvsIterator, PythonLocatorQuery } from './base/locator'; import { PythonEnvsChangedEvent } from './base/watcher'; @@ -50,11 +51,15 @@ export class PythonEnvironments implements ILocator { export function createAPI(): [PythonEnvironments, () => void] { const [locators, activateLocators] = initLocators(); + // Update this to pass in an actual function that checks for env info completeness. + const envsCache = new PythonEnvInfoCache(() => true); + return [ new PythonEnvironments(locators), () => { activateLocators(); // Any other activation needed for the API will go here later. + envsCache.initialize(); }, ]; }