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,4 +1,4 @@
|
|||
use anyhow::{Result, anyhow};
|
||||
use anyhow::Result;
|
||||
|
||||
pub struct EnvFilter {
|
||||
pub level_global: Option<log::LevelFilter>,
|
||||
|
@ -14,9 +14,7 @@ pub fn parse(filter: &str) -> Result<EnvFilter> {
|
|||
for directive in filter.split(',') {
|
||||
match directive.split_once('=') {
|
||||
Some((name, level)) => {
|
||||
if level.contains('=') {
|
||||
return Err(anyhow!("Invalid directive: {}", directive));
|
||||
}
|
||||
anyhow::ensure!(!level.contains('='), "Invalid directive: {directive}");
|
||||
let level = parse_level(level.trim())?;
|
||||
directive_names.push(name.trim().trim_end_matches(".rs").to_string());
|
||||
directive_levels.push(level);
|
||||
|
@ -27,9 +25,7 @@ pub fn parse(filter: &str) -> Result<EnvFilter> {
|
|||
directive_levels.push(log::LevelFilter::max() /* Enable all levels */);
|
||||
continue;
|
||||
};
|
||||
if max_level.is_some() {
|
||||
return Err(anyhow!("Cannot set multiple max levels"));
|
||||
}
|
||||
anyhow::ensure!(max_level.is_none(), "Cannot set multiple max levels");
|
||||
max_level.replace(level);
|
||||
}
|
||||
};
|
||||
|
@ -61,7 +57,7 @@ fn parse_level(level: &str) -> Result<log::LevelFilter> {
|
|||
if level.eq_ignore_ascii_case("OFF") || level.eq_ignore_ascii_case("NONE") {
|
||||
return Ok(log::LevelFilter::Off);
|
||||
}
|
||||
Err(anyhow!("Invalid level: {}", level))
|
||||
anyhow::bail!("Invalid level: {level}")
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
|
@ -234,10 +234,7 @@ fn rotate_log_file<PathRef>(
|
|||
.map(|err| anyhow::anyhow!(err)),
|
||||
};
|
||||
if let Some(err) = rotation_error {
|
||||
eprintln!(
|
||||
"Log file rotation failed. Truncating log file anyways: {}",
|
||||
err,
|
||||
);
|
||||
eprintln!("Log file rotation failed. Truncating log file anyways: {err}",);
|
||||
}
|
||||
_ = file.set_len(0);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue