From 0a1d9b9d6f59282a451a4e50af7370993d9ba7c8 Mon Sep 17 00:00:00 2001 From: Michael Panchenko Date: Thu, 24 Apr 2025 14:35:49 +0200 Subject: [PATCH] Multilspy: download clang executable if it's not there, better logging --- .../clangd_language_server.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/multilspy/language_servers/clangd_language_server/clangd_language_server.py b/src/multilspy/language_servers/clangd_language_server/clangd_language_server.py index 17253c4..8565825 100644 --- a/src/multilspy/language_servers/clangd_language_server/clangd_language_server.py +++ b/src/multilspy/language_servers/clangd_language_server/clangd_language_server.py @@ -64,13 +64,19 @@ class ClangdLanguageServer(LanguageServer): clangd_ls_dir = os.path.join(os.path.dirname(__file__), "static/clangd") clangd_executable_path = os.path.join(clangd_ls_dir, "clangd_19.1.2", "bin", dependency["binaryName"]) - if not os.path.exists(clangd_ls_dir): - os.makedirs(clangd_ls_dir) + if not os.path.exists(clangd_executable_path): + clangd_url = dependency["url"] + logger.log(f"Clangd executable not found at {clangd_executable_path}. Downloading from {clangd_url}", logging.INFO) + os.makedirs(clangd_ls_dir, exist_ok=True) if dependency["archiveType"] == "zip": FileUtils.download_and_extract_archive( - logger, dependency["url"], clangd_ls_dir, dependency["archiveType"] + logger, clangd_url, clangd_ls_dir, dependency["archiveType"] ) - assert os.path.exists(clangd_executable_path) + if not os.path.exists(clangd_executable_path): + raise FileNotFoundError( + f"Clangd executable not found at {clangd_executable_path}.\n" + "Make sure you have installed clangd. See https://clangd.llvm.org/installation" + ) os.chmod(clangd_executable_path, stat.S_IEXEC) return clangd_executable_path