From 723521b64d1adddfb6ccdac90092e4a0a8978ffd Mon Sep 17 00:00:00 2001 From: Dominik Jain Date: Mon, 31 Mar 2025 20:09:37 +0200 Subject: [PATCH] Log language server start command and [may or may not work] check for premature termination --- src/multilspy/lsp_protocol_handler/server.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/multilspy/lsp_protocol_handler/server.py b/src/multilspy/lsp_protocol_handler/server.py index a408686f..cc87c33c 100644 --- a/src/multilspy/lsp_protocol_handler/server.py +++ b/src/multilspy/lsp_protocol_handler/server.py @@ -31,6 +31,7 @@ SOFTWARE. import asyncio import dataclasses import json +import logging import os from typing import Any, Dict, List, Optional, Union @@ -41,6 +42,7 @@ StringDict = Dict[str, Any] PayloadLike = Union[List[StringDict], StringDict, None] CONTENT_LENGTH = "Content-Length: " ENCODING = "utf-8" +log = logging.getLogger(__name__) @dataclasses.dataclass @@ -203,6 +205,8 @@ class LanguageServerHandler: """ child_proc_env = os.environ.copy() child_proc_env.update(self.process_launch_info.env) + + log.info("Starting language server process via command: %s", self.process_launch_info.cmd) self.process = await asyncio.create_subprocess_shell( self.process_launch_info.cmd, stdout=asyncio.subprocess.PIPE, @@ -212,6 +216,14 @@ class LanguageServerHandler: cwd=self.process_launch_info.cwd, ) + # Check if process terminated immediately + if self.process.returncode is not None: + log.error("Language server has already terminated/could not be started") + # Process has already terminated + stderr_data = await self.process.stderr.read() + error_message = stderr_data.decode('utf-8', errors='replace') + raise RuntimeError(f"Process terminated immediately with code {self.process.returncode}. Error: {error_message}") + self.loop = asyncio.get_event_loop() self.tasks[self.task_counter] = self.loop.create_task(self.run_forever()) self.task_counter += 1