diff --git a/crates/copilot/src/copilot.rs b/crates/copilot/src/copilot.rs index 86b721006df2bcb92485def99ab68460e025d51e..49fb46780f5cd95cb8e297b1b0258089461b4116 100644 --- a/crates/copilot/src/copilot.rs +++ b/crates/copilot/src/copilot.rs @@ -28,7 +28,8 @@ use std::{ sync::Arc, }; use util::{ - fs::remove_matching, github::latest_github_release, http::HttpClient, paths, ResultExt, + async_maybe, fs::remove_matching, github::latest_github_release, http::HttpClient, paths, + ResultExt, }; actions!( @@ -992,7 +993,7 @@ async fn get_copilot_lsp(http: Arc) -> anyhow::Result { e @ Err(..) => { e.log_err(); // Fetch a cached binary, if it exists - (|| async move { + async_maybe!({ let mut last_version_dir = None; let mut entries = fs::read_dir(paths::COPILOT_DIR.as_path()).await?; while let Some(entry) = entries.next().await { @@ -1012,7 +1013,7 @@ async fn get_copilot_lsp(http: Arc) -> anyhow::Result { last_version_dir )) } - })() + }) .await } } diff --git a/crates/zed/src/languages/c.rs b/crates/zed/src/languages/c.rs index c4cc44140d2f21905d6ee08e91d3e8c1e92ce1b8..57af9f5365e788fc148f35057be87ec54964206c 100644 --- a/crates/zed/src/languages/c.rs +++ b/crates/zed/src/languages/c.rs @@ -6,6 +6,7 @@ use lsp::LanguageServerBinary; use smol::fs::{self, File}; use std::{any::Any, path::PathBuf, sync::Arc}; use util::{ + async_maybe, fs::remove_matching, github::{latest_github_release, GitHubLspBinaryVersion}, ResultExt, @@ -244,7 +245,7 @@ impl super::LspAdapter for CLspAdapter { } async fn get_cached_server_binary(container_dir: PathBuf) -> Option { - (|| async move { + async_maybe!({ let mut last_clangd_dir = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -266,7 +267,7 @@ async fn get_cached_server_binary(container_dir: PathBuf) -> Option Option { - (|| async move { + async_maybe!({ let mut last_version_dir = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -124,7 +124,7 @@ async fn get_cached_server_binary( last_version_dir )) } - })() + }) .await .log_err() } diff --git a/crates/zed/src/languages/deno.rs b/crates/zed/src/languages/deno.rs index 671248007ac0174d22afaac111054c6351fd88da..475181ec3f0df062141805656cd38800afea42a9 100644 --- a/crates/zed/src/languages/deno.rs +++ b/crates/zed/src/languages/deno.rs @@ -10,8 +10,12 @@ use serde_json::json; use settings::Settings; use smol::{fs, fs::File}; use std::{any::Any, env::consts, ffi::OsString, path::PathBuf, sync::Arc}; -use util::{fs::remove_matching, github::latest_github_release}; -use util::{github::GitHubLspBinaryVersion, ResultExt}; +use util::{ + async_maybe, + fs::remove_matching, + github::{latest_github_release, GitHubLspBinaryVersion}, + ResultExt, +}; #[derive(Clone, Serialize, Deserialize, JsonSchema)] pub struct DenoSettings { @@ -196,7 +200,7 @@ impl LspAdapter for DenoLspAdapter { } async fn get_cached_server_binary(container_dir: PathBuf) -> Option { - (|| async move { + async_maybe!({ let mut last = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -217,7 +221,7 @@ async fn get_cached_server_binary(container_dir: PathBuf) -> Option Vec { vec!["-mode=stdio".into()] @@ -329,7 +329,7 @@ impl super::LspAdapter for GoLspAdapter { } async fn get_cached_server_binary(container_dir: PathBuf) -> Option { - (|| async move { + async_maybe!({ let mut last_binary_path = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -352,7 +352,7 @@ async fn get_cached_server_binary(container_dir: PathBuf) -> Option Option { - (|| async move { + async_maybe!({ let mut last_version_dir = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -124,7 +124,7 @@ async fn get_cached_server_binary( last_version_dir )) } - })() + }) .await .log_err() } diff --git a/crates/zed/src/languages/json.rs b/crates/zed/src/languages/json.rs index 1b3667fca4e24c1d29c8d1492aaddc939601a559..6245d15046db2db9a5ecd0c5ea67094a8ba497b7 100644 --- a/crates/zed/src/languages/json.rs +++ b/crates/zed/src/languages/json.rs @@ -16,7 +16,7 @@ use std::{ path::{Path, PathBuf}, sync::{Arc, OnceLock}, }; -use util::{paths, ResultExt}; +use util::{async_maybe, paths, ResultExt}; const SERVER_PATH: &'static str = "node_modules/vscode-json-languageserver/bin/vscode-json-languageserver"; @@ -158,7 +158,7 @@ async fn get_cached_server_binary( container_dir: PathBuf, node: &dyn NodeRuntime, ) -> Option { - (|| async move { + async_maybe!({ let mut last_version_dir = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -181,7 +181,7 @@ async fn get_cached_server_binary( last_version_dir )) } - })() + }) .await .log_err() } diff --git a/crates/zed/src/languages/php.rs b/crates/zed/src/languages/php.rs index c071c807f82128860eefd2ef088074ca19ee54ad..e2ab7928cd460d20264f6b26fd830eb7c02463c9 100644 --- a/crates/zed/src/languages/php.rs +++ b/crates/zed/src/languages/php.rs @@ -14,7 +14,7 @@ use std::{ path::{Path, PathBuf}, sync::Arc, }; -use util::ResultExt; +use util::{async_maybe, ResultExt}; fn intelephense_server_binary_arguments(server_path: &Path) -> Vec { vec![server_path.into(), "--stdio".into()] @@ -108,7 +108,7 @@ async fn get_cached_server_binary( container_dir: PathBuf, node: &dyn NodeRuntime, ) -> Option { - (|| async move { + async_maybe!({ let mut last_version_dir = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -130,7 +130,7 @@ async fn get_cached_server_binary( last_version_dir )) } - })() + }) .await .log_err() } diff --git a/crates/zed/src/languages/rust.rs b/crates/zed/src/languages/rust.rs index dea88bfd3e9c4f2825871d5cb660698454ecd714..0082c5cdc0663b6b9d4976e9d06004e8f948ecef 100644 --- a/crates/zed/src/languages/rust.rs +++ b/crates/zed/src/languages/rust.rs @@ -9,6 +9,7 @@ use regex::Regex; use smol::fs::{self, File}; use std::{any::Any, borrow::Cow, env::consts, path::PathBuf, str, sync::Arc}; use util::{ + async_maybe, fs::remove_matching, github::{latest_github_release, GitHubLspBinaryVersion}, ResultExt, @@ -272,7 +273,7 @@ impl LspAdapter for RustLspAdapter { } async fn get_cached_server_binary(container_dir: PathBuf) -> Option { - (|| async move { + async_maybe!({ let mut last = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -283,7 +284,7 @@ async fn get_cached_server_binary(container_dir: PathBuf) -> Option Option { - (|| async move { + async_maybe!({ let mut last_version_dir = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -127,7 +127,7 @@ async fn get_cached_server_binary( last_version_dir )) } - })() + }) .await .log_err() } diff --git a/crates/zed/src/languages/tailwind.rs b/crates/zed/src/languages/tailwind.rs index 4fdb7e84d42e27474c7e0146ef9a8b0564a95f29..6243db96eb3933aaaca8cf7ea0026ec28a63b1b8 100644 --- a/crates/zed/src/languages/tailwind.rs +++ b/crates/zed/src/languages/tailwind.rs @@ -14,7 +14,7 @@ use std::{ path::{Path, PathBuf}, sync::Arc, }; -use util::ResultExt; +use util::{async_maybe, ResultExt}; const SERVER_PATH: &'static str = "node_modules/.bin/tailwindcss-language-server"; @@ -135,7 +135,7 @@ async fn get_cached_server_binary( container_dir: PathBuf, node: &dyn NodeRuntime, ) -> Option { - (|| async move { + async_maybe!({ let mut last_version_dir = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -157,7 +157,7 @@ async fn get_cached_server_binary( last_version_dir )) } - })() + }) .await .log_err() } diff --git a/crates/zed/src/languages/typescript.rs b/crates/zed/src/languages/typescript.rs index ff38e4a736c2adef305421a4ffeb4b5c3f5e61f2..5d04e31f6b37e0d3234b9d57b695d6123d929e78 100644 --- a/crates/zed/src/languages/typescript.rs +++ b/crates/zed/src/languages/typescript.rs @@ -15,8 +15,12 @@ use std::{ path::{Path, PathBuf}, sync::Arc, }; -use util::{fs::remove_matching, github::latest_github_release}; -use util::{github::GitHubLspBinaryVersion, ResultExt}; +use util::{ + async_maybe, + fs::remove_matching, + github::{latest_github_release, GitHubLspBinaryVersion}, + ResultExt, +}; fn typescript_server_binary_arguments(server_path: &Path) -> Vec { vec![server_path.into(), "--stdio".into()] @@ -172,7 +176,7 @@ async fn get_cached_ts_server_binary( container_dir: PathBuf, node: &dyn NodeRuntime, ) -> Option { - (|| async move { + async_maybe!({ let old_server_path = container_dir.join(TypeScriptLspAdapter::OLD_SERVER_PATH); let new_server_path = container_dir.join(TypeScriptLspAdapter::NEW_SERVER_PATH); if new_server_path.exists() { @@ -191,7 +195,7 @@ async fn get_cached_ts_server_binary( container_dir )) } - })() + }) .await .log_err() } @@ -324,7 +328,7 @@ async fn get_cached_eslint_server_binary( container_dir: PathBuf, node: &dyn NodeRuntime, ) -> Option { - (|| async move { + async_maybe!({ // This is unfortunate but we don't know what the version is to build a path directly let mut dir = fs::read_dir(&container_dir).await?; let first = dir.next().await.ok_or(anyhow!("missing first file"))??; @@ -337,7 +341,7 @@ async fn get_cached_eslint_server_binary( path: node.binary_path().await?, arguments: eslint_server_binary_arguments(&server_path), }) - })() + }) .await .log_err() } diff --git a/crates/zed/src/languages/vue.rs b/crates/zed/src/languages/vue.rs index ae1d51eaa07d84cf8997329d6b822fd6b643aa51..fa86d68eaadb014c23ca9a3540dc198528efb4b5 100644 --- a/crates/zed/src/languages/vue.rs +++ b/crates/zed/src/languages/vue.rs @@ -13,7 +13,7 @@ use std::{ path::{Path, PathBuf}, sync::Arc, }; -use util::ResultExt; +use util::{async_maybe, ResultExt}; pub struct VueLspVersion { vue_version: String, @@ -188,7 +188,7 @@ async fn get_cached_server_binary( container_dir: PathBuf, node: Arc, ) -> Option<(LanguageServerBinary, TypescriptPath)> { - (|| async move { + async_maybe!({ let mut last_version_dir = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -214,7 +214,7 @@ async fn get_cached_server_binary( last_version_dir )) } - })() + }) .await .log_err() } diff --git a/crates/zed/src/languages/yaml.rs b/crates/zed/src/languages/yaml.rs index fcdfe1f911c20b1246c69d088b5ff6918fdbd337..633e5d7da9d6dc1ee4b417e20333144d7de8dc66 100644 --- a/crates/zed/src/languages/yaml.rs +++ b/crates/zed/src/languages/yaml.rs @@ -15,7 +15,7 @@ use std::{ path::{Path, PathBuf}, sync::Arc, }; -use util::ResultExt; +use util::{async_maybe, ResultExt}; const SERVER_PATH: &'static str = "node_modules/yaml-language-server/bin/yaml-language-server"; @@ -110,7 +110,7 @@ async fn get_cached_server_binary( container_dir: PathBuf, node: &dyn NodeRuntime, ) -> Option { - (|| async move { + async_maybe!({ let mut last_version_dir = None; let mut entries = fs::read_dir(&container_dir).await?; while let Some(entry) = entries.next().await { @@ -132,7 +132,7 @@ async fn get_cached_server_binary( last_version_dir )) } - })() + }) .await .log_err() }