Use anyhow
more idiomatically (#31052)
https://github.com/zed-industries/zed/issues/30972 brought up another case where our context is not enough to track the actual source of the issue: we get a general top-level error without inner error. The reason for this was `.ok_or_else(|| anyhow!("failed to read HEAD SHA"))?; ` on the top level. The PR finally reworks the way we use anyhow to reduce such issues (or at least make it simpler to bubble them up later in a fix). On top of that, uses a few more anyhow methods for better readability. * `.ok_or_else(|| anyhow!("..."))`, `map_err` and other similar error conversion/option reporting cases are replaced with `context` and `with_context` calls * in addition to that, various `anyhow!("failed to do ...")` are stripped with `.context("Doing ...")` messages instead to remove the parasitic `failed to` text * `anyhow::ensure!` is used instead of `if ... { return Err(...); }` calls * `anyhow::bail!` is used instead of `return Err(anyhow!(...));` Release Notes: - N/A
This commit is contained in:
parent
1e51a7ac44
commit
16366cf9f2
294 changed files with 2037 additions and 2610 deletions
|
@ -1,6 +1,6 @@
|
|||
mod archive;
|
||||
|
||||
use anyhow::{Context, Result, anyhow, bail};
|
||||
use anyhow::{Context as _, Result, anyhow, bail};
|
||||
pub use archive::extract_zip;
|
||||
use async_compression::futures::bufread::GzipDecoder;
|
||||
use async_tar::Archive;
|
||||
|
@ -157,7 +157,7 @@ impl NodeRuntime {
|
|||
info.dist_tags
|
||||
.latest
|
||||
.or_else(|| info.versions.pop())
|
||||
.ok_or_else(|| anyhow!("no version found for npm package {}", name))
|
||||
.with_context(|| format!("no version found for npm package {name}"))
|
||||
}
|
||||
|
||||
pub async fn npm_install_packages(
|
||||
|
@ -411,13 +411,14 @@ impl NodeRuntimeTrait for ManagedNodeRuntime {
|
|||
let npm_file = self.installation_path.join(Self::NPM_PATH);
|
||||
let env_path = path_with_node_binary_prepended(&node_binary).unwrap_or_default();
|
||||
|
||||
if smol::fs::metadata(&node_binary).await.is_err() {
|
||||
return Err(anyhow!("missing node binary file"));
|
||||
}
|
||||
|
||||
if smol::fs::metadata(&npm_file).await.is_err() {
|
||||
return Err(anyhow!("missing npm file"));
|
||||
}
|
||||
anyhow::ensure!(
|
||||
smol::fs::metadata(&node_binary).await.is_ok(),
|
||||
"missing node binary file"
|
||||
);
|
||||
anyhow::ensure!(
|
||||
smol::fs::metadata(&npm_file).await.is_ok(),
|
||||
"missing npm file"
|
||||
);
|
||||
|
||||
let node_ca_certs = env::var(NODE_CA_CERTS_ENV_VAR).unwrap_or_else(|_| String::new());
|
||||
|
||||
|
@ -443,22 +444,20 @@ impl NodeRuntimeTrait for ManagedNodeRuntime {
|
|||
let mut output = attempt().await;
|
||||
if output.is_err() {
|
||||
output = attempt().await;
|
||||
if output.is_err() {
|
||||
return Err(anyhow!(
|
||||
"failed to launch npm subcommand {subcommand} subcommand\nerr: {:?}",
|
||||
output.err()
|
||||
));
|
||||
}
|
||||
anyhow::ensure!(
|
||||
output.is_ok(),
|
||||
"failed to launch npm subcommand {subcommand} subcommand\nerr: {:?}",
|
||||
output.err()
|
||||
);
|
||||
}
|
||||
|
||||
if let Ok(output) = &output {
|
||||
if !output.status.success() {
|
||||
return Err(anyhow!(
|
||||
"failed to execute npm {subcommand} subcommand:\nstdout: {:?}\nstderr: {:?}",
|
||||
String::from_utf8_lossy(&output.stdout),
|
||||
String::from_utf8_lossy(&output.stderr)
|
||||
));
|
||||
}
|
||||
anyhow::ensure!(
|
||||
output.status.success(),
|
||||
"failed to execute npm {subcommand} subcommand:\nstdout: {:?}\nstderr: {:?}",
|
||||
String::from_utf8_lossy(&output.stdout),
|
||||
String::from_utf8_lossy(&output.stderr)
|
||||
);
|
||||
}
|
||||
|
||||
output.map_err(|e| anyhow!("{e}"))
|
||||
|
@ -559,14 +558,12 @@ impl NodeRuntimeTrait for SystemNodeRuntime {
|
|||
.args(args);
|
||||
configure_npm_command(&mut command, directory, proxy);
|
||||
let output = command.output().await?;
|
||||
if !output.status.success() {
|
||||
return Err(anyhow!(
|
||||
"failed to execute npm {subcommand} subcommand:\nstdout: {:?}\nstderr: {:?}",
|
||||
String::from_utf8_lossy(&output.stdout),
|
||||
String::from_utf8_lossy(&output.stderr)
|
||||
));
|
||||
}
|
||||
|
||||
anyhow::ensure!(
|
||||
output.status.success(),
|
||||
"failed to execute npm {subcommand} subcommand:\nstdout: {:?}\nstderr: {:?}",
|
||||
String::from_utf8_lossy(&output.stdout),
|
||||
String::from_utf8_lossy(&output.stderr)
|
||||
);
|
||||
Ok(output)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue