Use async_maybe! instead of inline IIFEs (#6906)

This PR replaces instances where we were using an async IIFE with the
`async_maybe!` macro.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2024-01-27 20:49:56 -05:00 committed by GitHub
parent 5b9cc26194
commit bbdf401a78
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 55 additions and 44 deletions

View file

@ -28,7 +28,8 @@ use std::{
sync::Arc, sync::Arc,
}; };
use util::{ 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!( actions!(
@ -992,7 +993,7 @@ async fn get_copilot_lsp(http: Arc<dyn HttpClient>) -> anyhow::Result<PathBuf> {
e @ Err(..) => { e @ Err(..) => {
e.log_err(); e.log_err();
// Fetch a cached binary, if it exists // Fetch a cached binary, if it exists
(|| async move { async_maybe!({
let mut last_version_dir = None; let mut last_version_dir = None;
let mut entries = fs::read_dir(paths::COPILOT_DIR.as_path()).await?; let mut entries = fs::read_dir(paths::COPILOT_DIR.as_path()).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -1012,7 +1013,7 @@ async fn get_copilot_lsp(http: Arc<dyn HttpClient>) -> anyhow::Result<PathBuf> {
last_version_dir last_version_dir
)) ))
} }
})() })
.await .await
} }
} }

View file

@ -6,6 +6,7 @@ use lsp::LanguageServerBinary;
use smol::fs::{self, File}; use smol::fs::{self, File};
use std::{any::Any, path::PathBuf, sync::Arc}; use std::{any::Any, path::PathBuf, sync::Arc};
use util::{ use util::{
async_maybe,
fs::remove_matching, fs::remove_matching,
github::{latest_github_release, GitHubLspBinaryVersion}, github::{latest_github_release, GitHubLspBinaryVersion},
ResultExt, ResultExt,
@ -244,7 +245,7 @@ impl super::LspAdapter for CLspAdapter {
} }
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_maybe!({
let mut last_clangd_dir = None; let mut last_clangd_dir = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -266,7 +267,7 @@ async fn get_cached_server_binary(container_dir: PathBuf) -> Option<LanguageServ
clangd_dir clangd_dir
)) ))
} }
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -12,7 +12,7 @@ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::Arc, sync::Arc,
}; };
use util::ResultExt; use util::{async_maybe, ResultExt};
const SERVER_PATH: &'static str = const SERVER_PATH: &'static str =
"node_modules/vscode-langservers-extracted/bin/vscode-css-language-server"; "node_modules/vscode-langservers-extracted/bin/vscode-css-language-server";
@ -102,7 +102,7 @@ async fn get_cached_server_binary(
container_dir: PathBuf, container_dir: PathBuf,
node: &dyn NodeRuntime, node: &dyn NodeRuntime,
) -> Option<LanguageServerBinary> { ) -> Option<LanguageServerBinary> {
(|| async move { async_maybe!({
let mut last_version_dir = None; let mut last_version_dir = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -124,7 +124,7 @@ async fn get_cached_server_binary(
last_version_dir last_version_dir
)) ))
} }
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -10,8 +10,12 @@ use serde_json::json;
use settings::Settings; use settings::Settings;
use smol::{fs, fs::File}; use smol::{fs, fs::File};
use std::{any::Any, env::consts, ffi::OsString, path::PathBuf, sync::Arc}; use std::{any::Any, env::consts, ffi::OsString, path::PathBuf, sync::Arc};
use util::{fs::remove_matching, github::latest_github_release}; use util::{
use util::{github::GitHubLspBinaryVersion, ResultExt}; async_maybe,
fs::remove_matching,
github::{latest_github_release, GitHubLspBinaryVersion},
ResultExt,
};
#[derive(Clone, Serialize, Deserialize, JsonSchema)] #[derive(Clone, Serialize, Deserialize, JsonSchema)]
pub struct DenoSettings { pub struct DenoSettings {
@ -196,7 +200,7 @@ impl LspAdapter for DenoLspAdapter {
} }
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_maybe!({
let mut last = None; let mut last = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -217,7 +221,7 @@ async fn get_cached_server_binary(container_dir: PathBuf) -> Option<LanguageServ
} }
Err(anyhow!("no cached binary")) Err(anyhow!("no cached binary"))
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -18,7 +18,7 @@ use std::{
Arc, Arc,
}, },
}; };
use util::{fs::remove_matching, github::latest_github_release, ResultExt}; use util::{async_maybe, fs::remove_matching, github::latest_github_release, ResultExt};
fn server_binary_arguments() -> Vec<OsString> { fn server_binary_arguments() -> Vec<OsString> {
vec!["-mode=stdio".into()] vec!["-mode=stdio".into()]
@ -329,7 +329,7 @@ impl super::LspAdapter for GoLspAdapter {
} }
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_maybe!({
let mut last_binary_path = None; let mut last_binary_path = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -352,7 +352,7 @@ async fn get_cached_server_binary(container_dir: PathBuf) -> Option<LanguageServ
} else { } else {
Err(anyhow!("no cached binary")) Err(anyhow!("no cached binary"))
} }
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -12,7 +12,7 @@ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::Arc, sync::Arc,
}; };
use util::ResultExt; use util::{async_maybe, ResultExt};
const SERVER_PATH: &'static str = const SERVER_PATH: &'static str =
"node_modules/vscode-langservers-extracted/bin/vscode-html-language-server"; "node_modules/vscode-langservers-extracted/bin/vscode-html-language-server";
@ -102,7 +102,7 @@ async fn get_cached_server_binary(
container_dir: PathBuf, container_dir: PathBuf,
node: &dyn NodeRuntime, node: &dyn NodeRuntime,
) -> Option<LanguageServerBinary> { ) -> Option<LanguageServerBinary> {
(|| async move { async_maybe!({
let mut last_version_dir = None; let mut last_version_dir = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -124,7 +124,7 @@ async fn get_cached_server_binary(
last_version_dir last_version_dir
)) ))
} }
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -16,7 +16,7 @@ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::{Arc, OnceLock}, sync::{Arc, OnceLock},
}; };
use util::{paths, ResultExt}; use util::{async_maybe, paths, ResultExt};
const SERVER_PATH: &'static str = const SERVER_PATH: &'static str =
"node_modules/vscode-json-languageserver/bin/vscode-json-languageserver"; "node_modules/vscode-json-languageserver/bin/vscode-json-languageserver";
@ -158,7 +158,7 @@ async fn get_cached_server_binary(
container_dir: PathBuf, container_dir: PathBuf,
node: &dyn NodeRuntime, node: &dyn NodeRuntime,
) -> Option<LanguageServerBinary> { ) -> Option<LanguageServerBinary> {
(|| async move { async_maybe!({
let mut last_version_dir = None; let mut last_version_dir = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -181,7 +181,7 @@ async fn get_cached_server_binary(
last_version_dir last_version_dir
)) ))
} }
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -14,7 +14,7 @@ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::Arc, sync::Arc,
}; };
use util::ResultExt; use util::{async_maybe, ResultExt};
fn intelephense_server_binary_arguments(server_path: &Path) -> Vec<OsString> { fn intelephense_server_binary_arguments(server_path: &Path) -> Vec<OsString> {
vec![server_path.into(), "--stdio".into()] vec![server_path.into(), "--stdio".into()]
@ -108,7 +108,7 @@ async fn get_cached_server_binary(
container_dir: PathBuf, container_dir: PathBuf,
node: &dyn NodeRuntime, node: &dyn NodeRuntime,
) -> Option<LanguageServerBinary> { ) -> Option<LanguageServerBinary> {
(|| async move { async_maybe!({
let mut last_version_dir = None; let mut last_version_dir = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -130,7 +130,7 @@ async fn get_cached_server_binary(
last_version_dir last_version_dir
)) ))
} }
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -9,6 +9,7 @@ use regex::Regex;
use smol::fs::{self, File}; use smol::fs::{self, File};
use std::{any::Any, borrow::Cow, env::consts, path::PathBuf, str, sync::Arc}; use std::{any::Any, borrow::Cow, env::consts, path::PathBuf, str, sync::Arc};
use util::{ use util::{
async_maybe,
fs::remove_matching, fs::remove_matching,
github::{latest_github_release, GitHubLspBinaryVersion}, github::{latest_github_release, GitHubLspBinaryVersion},
ResultExt, ResultExt,
@ -272,7 +273,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_maybe!({
let mut last = None; let mut last = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -283,7 +284,7 @@ async fn get_cached_server_binary(container_dir: PathBuf) -> Option<LanguageServ
path: last.ok_or_else(|| anyhow!("no cached binary"))?, path: last.ok_or_else(|| anyhow!("no cached binary"))?,
arguments: Default::default(), arguments: Default::default(),
}) })
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -12,7 +12,7 @@ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::Arc, sync::Arc,
}; };
use util::ResultExt; use util::{async_maybe, ResultExt};
const SERVER_PATH: &'static str = "node_modules/svelte-language-server/bin/server.js"; const SERVER_PATH: &'static str = "node_modules/svelte-language-server/bin/server.js";
@ -105,7 +105,7 @@ async fn get_cached_server_binary(
container_dir: PathBuf, container_dir: PathBuf,
node: &dyn NodeRuntime, node: &dyn NodeRuntime,
) -> Option<LanguageServerBinary> { ) -> Option<LanguageServerBinary> {
(|| async move { async_maybe!({
let mut last_version_dir = None; let mut last_version_dir = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -127,7 +127,7 @@ async fn get_cached_server_binary(
last_version_dir last_version_dir
)) ))
} }
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -14,7 +14,7 @@ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::Arc, sync::Arc,
}; };
use util::ResultExt; use util::{async_maybe, ResultExt};
const SERVER_PATH: &'static str = "node_modules/.bin/tailwindcss-language-server"; const SERVER_PATH: &'static str = "node_modules/.bin/tailwindcss-language-server";
@ -135,7 +135,7 @@ async fn get_cached_server_binary(
container_dir: PathBuf, container_dir: PathBuf,
node: &dyn NodeRuntime, node: &dyn NodeRuntime,
) -> Option<LanguageServerBinary> { ) -> Option<LanguageServerBinary> {
(|| async move { async_maybe!({
let mut last_version_dir = None; let mut last_version_dir = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -157,7 +157,7 @@ async fn get_cached_server_binary(
last_version_dir last_version_dir
)) ))
} }
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -15,8 +15,12 @@ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::Arc, sync::Arc,
}; };
use util::{fs::remove_matching, github::latest_github_release}; use util::{
use util::{github::GitHubLspBinaryVersion, ResultExt}; async_maybe,
fs::remove_matching,
github::{latest_github_release, GitHubLspBinaryVersion},
ResultExt,
};
fn typescript_server_binary_arguments(server_path: &Path) -> Vec<OsString> { fn typescript_server_binary_arguments(server_path: &Path) -> Vec<OsString> {
vec![server_path.into(), "--stdio".into()] vec![server_path.into(), "--stdio".into()]
@ -172,7 +176,7 @@ async fn get_cached_ts_server_binary(
container_dir: PathBuf, container_dir: PathBuf,
node: &dyn NodeRuntime, node: &dyn NodeRuntime,
) -> Option<LanguageServerBinary> { ) -> Option<LanguageServerBinary> {
(|| async move { async_maybe!({
let old_server_path = container_dir.join(TypeScriptLspAdapter::OLD_SERVER_PATH); let old_server_path = container_dir.join(TypeScriptLspAdapter::OLD_SERVER_PATH);
let new_server_path = container_dir.join(TypeScriptLspAdapter::NEW_SERVER_PATH); let new_server_path = container_dir.join(TypeScriptLspAdapter::NEW_SERVER_PATH);
if new_server_path.exists() { if new_server_path.exists() {
@ -191,7 +195,7 @@ async fn get_cached_ts_server_binary(
container_dir container_dir
)) ))
} }
})() })
.await .await
.log_err() .log_err()
} }
@ -324,7 +328,7 @@ async fn get_cached_eslint_server_binary(
container_dir: PathBuf, container_dir: PathBuf,
node: &dyn NodeRuntime, node: &dyn NodeRuntime,
) -> Option<LanguageServerBinary> { ) -> Option<LanguageServerBinary> {
(|| async move { async_maybe!({
// This is unfortunate but we don't know what the version is to build a path directly // 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 mut dir = fs::read_dir(&container_dir).await?;
let first = dir.next().await.ok_or(anyhow!("missing first file"))??; 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?, path: node.binary_path().await?,
arguments: eslint_server_binary_arguments(&server_path), arguments: eslint_server_binary_arguments(&server_path),
}) })
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -13,7 +13,7 @@ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::Arc, sync::Arc,
}; };
use util::ResultExt; use util::{async_maybe, ResultExt};
pub struct VueLspVersion { pub struct VueLspVersion {
vue_version: String, vue_version: String,
@ -188,7 +188,7 @@ async fn get_cached_server_binary(
container_dir: PathBuf, container_dir: PathBuf,
node: Arc<dyn NodeRuntime>, node: Arc<dyn NodeRuntime>,
) -> Option<(LanguageServerBinary, TypescriptPath)> { ) -> Option<(LanguageServerBinary, TypescriptPath)> {
(|| async move { async_maybe!({
let mut last_version_dir = None; let mut last_version_dir = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -214,7 +214,7 @@ async fn get_cached_server_binary(
last_version_dir last_version_dir
)) ))
} }
})() })
.await .await
.log_err() .log_err()
} }

View file

@ -15,7 +15,7 @@ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::Arc, sync::Arc,
}; };
use util::ResultExt; use util::{async_maybe, ResultExt};
const SERVER_PATH: &'static str = "node_modules/yaml-language-server/bin/yaml-language-server"; 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, container_dir: PathBuf,
node: &dyn NodeRuntime, node: &dyn NodeRuntime,
) -> Option<LanguageServerBinary> { ) -> Option<LanguageServerBinary> {
(|| async move { async_maybe!({
let mut last_version_dir = None; let mut last_version_dir = None;
let mut entries = fs::read_dir(&container_dir).await?; let mut entries = fs::read_dir(&container_dir).await?;
while let Some(entry) = entries.next().await { while let Some(entry) = entries.next().await {
@ -132,7 +132,7 @@ async fn get_cached_server_binary(
last_version_dir last_version_dir
)) ))
} }
})() })
.await .await
.log_err() .log_err()
} }