Fix Python's cached binary retrieval being borked

Co-Authored-By: Max Brunsfeld <max@zed.dev>
This commit is contained in:
Julia 2023-09-08 12:09:31 -04:00
parent e7b7ac9d8c
commit 74ccb3df63
2 changed files with 12 additions and 27 deletions

View file

@ -1,6 +1,5 @@
use anyhow::{anyhow, Result}; use anyhow::Result;
use async_trait::async_trait; use async_trait::async_trait;
use futures::StreamExt;
use language::{LanguageServerName, LspAdapter, LspAdapterDelegate}; use language::{LanguageServerName, LspAdapter, LspAdapterDelegate};
use lsp::LanguageServerBinary; use lsp::LanguageServerBinary;
use node_runtime::NodeRuntime; use node_runtime::NodeRuntime;
@ -164,31 +163,16 @@ async fn get_cached_server_binary(
container_dir: PathBuf, container_dir: PathBuf,
node: &dyn NodeRuntime, node: &dyn NodeRuntime,
) -> Option<LanguageServerBinary> { ) -> Option<LanguageServerBinary> {
(|| async move { let server_path = container_dir.join(SERVER_PATH);
let mut last_version_dir = None; if server_path.exists() {
let mut entries = fs::read_dir(&container_dir).await?; Some(LanguageServerBinary {
while let Some(entry) = entries.next().await { path: node.binary_path().await.log_err()?,
let entry = entry?; arguments: server_binary_arguments(&server_path),
if entry.file_type().await?.is_dir() { })
last_version_dir = Some(entry.path()); } else {
} log::error!("missing executable in directory {:?}", server_path);
} None
let last_version_dir = last_version_dir.ok_or_else(|| anyhow!("no cached binary"))?; }
let server_path = last_version_dir.join(SERVER_PATH);
if server_path.exists() {
Ok(LanguageServerBinary {
path: node.binary_path().await?,
arguments: server_binary_arguments(&server_path),
})
} else {
Err(anyhow!(
"missing executable in directory {:?}",
last_version_dir
))
}
})()
.await
.log_err()
} }
#[cfg(test)] #[cfg(test)]

View file

@ -262,6 +262,7 @@ impl LspAdapter for RustLspAdapter {
}) })
} }
} }
async fn get_cached_server_binary(container_dir: PathBuf) -> Option<LanguageServerBinary> { async fn get_cached_server_binary(container_dir: PathBuf) -> Option<LanguageServerBinary> {
(|| async move { (|| async move {
let mut last = None; let mut last = None;