From e3662d8cc068c7e9f290b4797af2617eaa1aa1ca Mon Sep 17 00:00:00 2001 From: Alex Carney Date: Sat, 15 Nov 2025 17:00:46 +0000 Subject: [PATCH] code: potential fix for duplicate server instances --- code/package-lock.json | 4 ++-- code/src/node/client.ts | 19 ++++++++++++++++++- code/src/node/extension.ts | 3 +++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/code/package-lock.json b/code/package-lock.json index da208d41..f4142454 100644 --- a/code/package-lock.json +++ b/code/package-lock.json @@ -1,12 +1,12 @@ { "name": "esbonio", - "version": "0.96.6", + "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "esbonio", - "version": "0.96.6", + "version": "1.0.0", "license": "MIT", "dependencies": { "@vscode/python-extension": "^1.0.6", diff --git a/code/src/node/client.ts b/code/src/node/client.ts index 9dfdc809..ec6c4ff0 100644 --- a/code/src/node/client.ts +++ b/code/src/node/client.ts @@ -166,8 +166,17 @@ export class EsbonioClient { // React to environment changes in the Python extension python.addHandler(Events.PYTHON_ENV_CHANGE, (_event: ActiveEnvironmentPathChangeEvent) => { + if (!this.server) { + logger.debug("No current server, starting from Python environment change handler.") + this.start() + return + } + let states = [State.Running, State.Starting] - if (!this.server || !states.includes(this.server.state)) { + logger.debug(`Server state is ${State[this.server.state]}`) + + if (!states.includes(this.server.state)) { + logger.debug(`(Re)starting from Python environment change handler.`) this.start() } }) @@ -186,6 +195,12 @@ export class EsbonioClient { */ async start(): Promise { + let states = [State.Running, State.Starting] + if (this.server && states.includes(this.server.state)) { + this.logger.debug("Server is starting or already running, doing nothing.") + return + } + try { this.server = await this.getStdioClient() } catch (err) { @@ -225,8 +240,10 @@ export class EsbonioClient { async stop() { if (this.server && this.server.state === State.Running) { + this.logger.info("Stopping Language Server") this.callHandlers(Events.SERVER_STOP, undefined) await this.server.stop() + this.server = undefined } return diff --git a/code/src/node/extension.ts b/code/src/node/extension.ts index 56a8d446..8f2c3715 100644 --- a/code/src/node/extension.ts +++ b/code/src/node/extension.ts @@ -19,6 +19,7 @@ export async function activate(context: vscode.ExtensionContext): Promise('logging.level') logger = new OutputChannelLogger(channel, logLevel) + logger.debug('Extension activated') let python = await getPythonExtension() let pythonManager = new PythonManager(python, logger, context) @@ -31,6 +32,7 @@ export async function activate(context: vscode.ExtensionContext): Promise { } export function deactivate(): Thenable | undefined { + logger.debug('Extension deactivated') if (!esbonio) { return undefined }