From 4d0adf05842ecc766689dd5818a64de355ef0b0a Mon Sep 17 00:00:00 2001 From: mohityadav8 Date: Sat, 17 Oct 2026 03:33:50 +0530 Subject: [PATCH 1/2] Make python-envs.terminal.autoActivationType syncable via Settings Sync Change scope from machine to window so the setting syncs and applies to new remotes and dev containers. A remote's own settings still override it. Fixes #1640 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5830cc3e0..95c126555 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "%python-envs.terminal.autoActivationType.shellStartup%", "%python-envs.terminal.autoActivationType.off%" ], - "scope": "machine" + "scope": "window" }, "python.terminal.useEnvFile": { "type": "boolean", From c3f8010b11a4dc9df993cbc4d69cf597dbf75ca0 Mon Sep 17 00:00:00 2001 From: mohityadav8 Date: Tue, 27 Oct 2026 16:53:37 +0530 Subject: [PATCH 2/2] Honor workspace scope in getAutoActivationType --- src/features/terminal/utils.ts | 16 ++++++-- src/test/features/terminal/utils.unit.test.ts | 41 ++++++++++++++++++- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/features/terminal/utils.ts b/src/features/terminal/utils.ts index 241b19b74..099e7cf61 100644 --- a/src/features/terminal/utils.ts +++ b/src/features/terminal/utils.ts @@ -247,9 +247,11 @@ export type AutoActivationType = 'off' | 'command' | 'shellStartup'; * * Priority order: * 1. python-envs.terminal.autoActivationType - * a. globalRemoteValue - * b. globalLocalValue - * c. globalValue + * a. workspaceFolderValue + * b. workspaceValue + * c. globalRemoteValue + * d. globalLocalValue + * e. globalValue * 2. python.terminal.activateEnvironment setting (if false, returns 'off' & sets autoActivationType to 'off') * 3. Default to 'command' if no setting is found * @@ -260,9 +262,15 @@ export function getAutoActivationType(): AutoActivationType { const pyEnvsActivationType = pyEnvsConfig.inspect('terminal.autoActivationType'); if (pyEnvsActivationType) { - // Priority order: globalRemoteValue > globalLocalValue > globalValue + // Priority order: workspaceFolderValue > workspaceValue > globalRemoteValue > globalLocalValue > globalValue const activationType = pyEnvsActivationType as Record; + if (pyEnvsActivationType.workspaceFolderValue !== undefined) { + return pyEnvsActivationType.workspaceFolderValue; + } + if (pyEnvsActivationType.workspaceValue !== undefined) { + return pyEnvsActivationType.workspaceValue; + } if ('globalRemoteValue' in pyEnvsActivationType && activationType.globalRemoteValue !== undefined) { return activationType.globalRemoteValue as AutoActivationType; } diff --git a/src/test/features/terminal/utils.unit.test.ts b/src/test/features/terminal/utils.unit.test.ts index c95533527..f1f41795d 100644 --- a/src/test/features/terminal/utils.unit.test.ts +++ b/src/test/features/terminal/utils.unit.test.ts @@ -53,7 +53,46 @@ suite('Terminal Utils - getAutoActivationType', () => { }); suite('Priority Order Tests', () => { - test('should return globalRemoteValue when set (highest priority)', () => { + test('should return workspaceFolderValue when set (highest priority)', () => { + const mockInspectResult = { + workspaceFolderValue: ACT_TYPE_OFF, + workspaceValue: ACT_TYPE_SHELL, + globalRemoteValue: ACT_TYPE_COMMAND, + }; + pyEnvsConfig.inspect.withArgs('terminal.autoActivationType').returns(mockInspectResult); + + const result = getAutoActivationType(); + + assert.strictEqual(result, ACT_TYPE_OFF, 'Should return workspaceFolderValue when set'); + }); + + test('should return workspaceValue when workspaceFolderValue is undefined', () => { + const mockInspectResult = { + workspaceFolderValue: undefined, + workspaceValue: ACT_TYPE_SHELL, + globalRemoteValue: ACT_TYPE_COMMAND, + }; + pyEnvsConfig.inspect.withArgs('terminal.autoActivationType').returns(mockInspectResult); + + const result = getAutoActivationType(); + + assert.strictEqual(result, ACT_TYPE_SHELL, 'Should return workspaceValue when workspaceFolderValue is undefined'); + }); + + test('should ignore globalRemoteValue when workspaceValue exists', () => { + const mockInspectResult = { + workspaceValue: ACT_TYPE_OFF, + globalRemoteValue: ACT_TYPE_SHELL, + globalLocalValue: ACT_TYPE_COMMAND, + }; + pyEnvsConfig.inspect.withArgs('terminal.autoActivationType').returns(mockInspectResult); + + const result = getAutoActivationType(); + + assert.strictEqual(result, ACT_TYPE_OFF, 'Should prioritize workspaceValue over globalRemoteValue'); + }); + + test('should return globalRemoteValue when set and no workspace values exist', () => { // Mock - globalRemoteValue is set const mockInspectResult = { globalRemoteValue: ACT_TYPE_SHELL,