diff --git a/src/client/envExt/api.internal.ts b/src/client/envExt/api.internal.ts index 5edfb712072e..44fa9640b220 100644 --- a/src/client/envExt/api.internal.ts +++ b/src/client/envExt/api.internal.ts @@ -55,14 +55,19 @@ export function shouldEnvExtHandleActivation(): boolean { } let _useExt: boolean | undefined; +export function shouldUseEnvExtension(): boolean { + const config = getConfiguration('python'); + const inExpSetting = config?.get('useEnvironmentsExtension', false) ?? false; + return inExpSetting && shouldEnvExtHandleActivation(); +} + export function useEnvExtension(): boolean { if (_useExt !== undefined) { return _useExt; } - const config = getConfiguration('python'); - const inExpSetting = config?.get('useEnvironmentsExtension', false) ?? false; - // If extension is installed and in experiment, then use it. - _useExt = !!getExtension(ENVS_EXTENSION_ID) && inExpSetting; + // Use the extension only when it is enabled and its own activation logic + // will expose the API. + _useExt = shouldUseEnvExtension(); return _useExt; } diff --git a/src/test/common/terminals/activator/index.unit.test.ts b/src/test/common/terminals/activator/index.unit.test.ts index 34d1cf8f1bcd..ef6a9492acd2 100644 --- a/src/test/common/terminals/activator/index.unit.test.ts +++ b/src/test/common/terminals/activator/index.unit.test.ts @@ -174,6 +174,15 @@ suite('shouldEnvExtHandleActivation', () => { assert.strictEqual(extapi.shouldEnvExtHandleActivation(), false); }); + test('Does not use envs extension when workspace enables it but user settings disable activation', () => { + getExtensionStub.returns({ id: extapi.ENVS_EXTENSION_ID }); + getConfigurationStub.returns({ + get: () => true, + inspect: () => ({ globalValue: false, workspaceValue: true }), + }); + assert.strictEqual(extapi.shouldUseEnvExtension(), false); + }); + test('Returns false when envs extension is installed but workspaceValue is false', () => { getExtensionStub.returns({ id: extapi.ENVS_EXTENSION_ID }); getConfigurationStub.returns({