From 0d33ef6b2f53e4817deaf6185e301a9c94557c2a Mon Sep 17 00:00:00 2001 From: Anthony Kim Date: Fri, 6 Feb 2026 14:59:08 -0800 Subject: [PATCH 1/3] listen to change in python.terminal.useEnvFile --- src/features/terminal/terminalEnvVarInjector.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/features/terminal/terminalEnvVarInjector.ts b/src/features/terminal/terminalEnvVarInjector.ts index aeb1f97b..0a8d685e 100644 --- a/src/features/terminal/terminalEnvVarInjector.ts +++ b/src/features/terminal/terminalEnvVarInjector.ts @@ -84,9 +84,9 @@ export class TerminalEnvVarInjector implements Disposable { // Listen for changes to the python.envFile setting this.disposables.push( workspace.onDidChangeConfiguration((e) => { - if (e.affectsConfiguration('python.envFile')) { + if (e.affectsConfiguration('python.envFile') || e.affectsConfiguration('python.terminal.useEnvFile')) { traceVerbose( - 'TerminalEnvVarInjector: python.envFile setting changed, updating environment variables', + 'TerminalEnvVarInjector: python.envFile or python.terminal.useEnvFile setting changed, updating environment variables', ); this.updateEnvironmentVariables().catch((error) => { traceError('Failed to update environment variables:', error); From 2005c5988782aaca5dcbc04aeeee8990e21f9017 Mon Sep 17 00:00:00 2001 From: Anthony Kim Date: Fri, 6 Feb 2026 15:02:07 -0800 Subject: [PATCH 2/3] tests --- .../terminalEnvVarInjector.unit.test.ts | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/src/test/features/terminalEnvVarInjector.unit.test.ts b/src/test/features/terminalEnvVarInjector.unit.test.ts index b2998424..3ad4eaad 100644 --- a/src/test/features/terminalEnvVarInjector.unit.test.ts +++ b/src/test/features/terminalEnvVarInjector.unit.test.ts @@ -189,6 +189,75 @@ suite('TerminalEnvVarInjector', () => { }); }); + suite('Configuration change triggers updateEnvironmentVariables', () => { + let configChangeCallback: ((e: { affectsConfiguration(section: string): boolean }) => void) | undefined; + + setup(() => { + // Capture the onDidChangeConfiguration listener so we can fire it manually + Object.defineProperty(workspace, 'onDidChangeConfiguration', { + value: (listener: (e: { affectsConfiguration(section: string): boolean }) => void) => { + configChangeCallback = listener; + return new Disposable(() => {}); + }, + configurable: true, + }); + }); + + test('should call updateEnvironmentVariables when python.terminal.useEnvFile changes', async () => { + envVarManager + .setup((m) => m.getEnvironmentVariables(typeMoq.It.isAny())) + .returns(() => Promise.resolve({ VAR: 'value' })); + + injector = new TerminalEnvVarInjector(envVarCollection.object, envVarManager.object); + await new Promise((resolve) => setTimeout(resolve, 50)); + + // getEnvironmentVariables is called once during initialization + envVarManager.verify( + (m) => m.getEnvironmentVariables(typeMoq.It.isAny()), + typeMoq.Times.once(), + ); + + // Fire config change for python.terminal.useEnvFile + assert.ok(configChangeCallback, 'onDidChangeConfiguration listener should be registered'); + configChangeCallback!({ + affectsConfiguration: (section: string) => section === 'python.terminal.useEnvFile', + }); + + await new Promise((resolve) => setTimeout(resolve, 50)); + + // Should have been called again after the config change + envVarManager.verify( + (m) => m.getEnvironmentVariables(typeMoq.It.isAny()), + typeMoq.Times.exactly(2), + ); + }); + + test('should call updateEnvironmentVariables when python.envFile changes', async () => { + envVarManager + .setup((m) => m.getEnvironmentVariables(typeMoq.It.isAny())) + .returns(() => Promise.resolve({ VAR: 'value' })); + + injector = new TerminalEnvVarInjector(envVarCollection.object, envVarManager.object); + await new Promise((resolve) => setTimeout(resolve, 50)); + + envVarManager.verify( + (m) => m.getEnvironmentVariables(typeMoq.It.isAny()), + typeMoq.Times.once(), + ); + + // Fire config change for python.envFile + configChangeCallback!({ + affectsConfiguration: (section: string) => section === 'python.envFile', + }); + + await new Promise((resolve) => setTimeout(resolve, 50)); + + envVarManager.verify( + (m) => m.getEnvironmentVariables(typeMoq.It.isAny()), + typeMoq.Times.exactly(2), + ); + }); + suite('python.envFile compatibility', () => { test('python.envFile has no effect when useEnvFile is false', async () => { getConfigurationStub.returns( From ff8edb7fbebb9fa54252dfd949ee2421f070e72d Mon Sep 17 00:00:00 2001 From: Anthony Kim Date: Fri, 6 Feb 2026 15:03:18 -0800 Subject: [PATCH 3/3] lint --- src/test/features/terminalEnvVarInjector.unit.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/features/terminalEnvVarInjector.unit.test.ts b/src/test/features/terminalEnvVarInjector.unit.test.ts index 3ad4eaad..0d5a1050 100644 --- a/src/test/features/terminalEnvVarInjector.unit.test.ts +++ b/src/test/features/terminalEnvVarInjector.unit.test.ts @@ -257,6 +257,7 @@ suite('TerminalEnvVarInjector', () => { typeMoq.Times.exactly(2), ); }); + }); suite('python.envFile compatibility', () => { test('python.envFile has no effect when useEnvFile is false', async () => {