Skip to content

Commit 2579b15

Browse files
author
Kartik Raj
authored
Fire active environment change event if selected environment is deleted (#22113)
Closes #22066
1 parent c3214c0 commit 2579b15

1 file changed

Lines changed: 25 additions & 4 deletions

File tree

src/client/interpreter/interpreterService.ts

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)