@@ -85,6 +85,11 @@ export class InterpreterService implements Disposable, IInterpreterService {
8585
8686 private readonly didChangeInterpreterInformation = new EventEmitter < PythonEnvironment > ( ) ;
8787
88+ private readonly activeInterpreterPaths = new Map <
89+ string ,
90+ { path : string ; workspaceFolder : WorkspaceFolder | undefined }
91+ > ( ) ;
92+
8893 constructor (
8994 @inject ( IServiceContainer ) private serviceContainer : IServiceContainer ,
9095 @inject ( IComponentAdapter ) private readonly pyenvs : IComponentAdapter ,
@@ -100,10 +105,12 @@ export class InterpreterService implements Disposable, IInterpreterService {
100105 const workspaceFolder = this . serviceContainer
101106 . get < IWorkspaceService > ( IWorkspaceService )
102107 . getWorkspaceFolder ( resource ) ;
103- this . ensureEnvironmentContainsPython (
104- this . configService . getSettings ( resource ) . pythonPath ,
105- workspaceFolder ,
106- ) . ignoreErrors ( ) ;
108+ const path = this . configService . getSettings ( resource ) . pythonPath ;
109+ const workspaceKey = this . serviceContainer
110+ . get < IWorkspaceService > ( IWorkspaceService )
111+ . getWorkspaceFolderIdentifier ( resource ) ;
112+ this . activeInterpreterPaths . set ( workspaceKey , { path, workspaceFolder } ) ;
113+ this . ensureEnvironmentContainsPython ( path , workspaceFolder ) . ignoreErrors ( ) ;
107114 }
108115
109116 public initialize ( ) : void {
@@ -155,6 +162,16 @@ export class InterpreterService implements Disposable, IInterpreterService {
155162 const interpreter = e . old ?? e . new ;
156163 if ( interpreter ) {
157164 this . didChangeInterpreterInformation . fire ( interpreter ) ;
165+ for ( const { path, workspaceFolder } of this . activeInterpreterPaths . values ( ) ) {
166+ if ( path === interpreter . path && ! e . new ) {
167+ // If the active environment got deleted, notify it.
168+ this . didChangeInterpreterEmitter . fire ( workspaceFolder ?. uri ) ;
169+ reportActiveInterpreterChanged ( {
170+ path,
171+ resource : workspaceFolder ,
172+ } ) ;
173+ }
174+ }
158175 }
159176 } ) ,
160177 ) ;
@@ -246,6 +263,10 @@ export class InterpreterService implements Disposable, IInterpreterService {
246263 path : pySettings . pythonPath ,
247264 resource : workspaceFolder ,
248265 } ) ;
266+ const workspaceKey = this . serviceContainer
267+ . get < IWorkspaceService > ( IWorkspaceService )
268+ . getWorkspaceFolderIdentifier ( resource ) ;
269+ this . activeInterpreterPaths . set ( workspaceKey , { path : pySettings . pythonPath , workspaceFolder } ) ;
249270 const interpreterDisplay = this . serviceContainer . get < IInterpreterDisplay > ( IInterpreterDisplay ) ;
250271 interpreterDisplay . refresh ( ) . catch ( ( ex ) => traceError ( 'Python Extension: display.refresh' , ex ) ) ;
251272 await this . ensureEnvironmentContainsPython ( this . _pythonPathSetting , workspaceFolder ) ;
0 commit comments