diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2025-04-19 14:20:05 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-19 14:20:05 +0000 |
| commit | 6adf7f3be05f0d16576591193d1e4db157158a87 (patch) | |
| tree | 04c0ad66367eff05b5137aa2a00a6ce044286d76 | |
| parent | 53bd63400f223993adf036d180e42089dd9f2b48 (diff) | |
| parent | 10a7468360b9c54538f54d74bf78bee923a0a129 (diff) | |
| download | rust-6adf7f3be05f0d16576591193d1e4db157158a87.tar.gz rust-6adf7f3be05f0d16576591193d1e4db157158a87.zip | |
Merge pull request #19628 from jyn514/warn-bad-config
don't ignore config values that fail to parse
| -rw-r--r-- | src/tools/rust-analyzer/crates/rust-analyzer/src/config.rs | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/config.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/config.rs index aceacff9859..82a1ad2d3a4 100644 --- a/src/tools/rust-analyzer/crates/rust-analyzer/src/config.rs +++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/config.rs @@ -1382,18 +1382,21 @@ impl ConfigErrors { impl fmt::Display for ConfigErrors { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let errors = self.0.iter().format_with("\n", |inner, f| match &**inner { - ConfigErrorInner::Json { config_key: key, error: e } => { - f(key)?; - f(&": ")?; - f(e) - } - ConfigErrorInner::Toml { config_key: key, error: e } => { - f(key)?; - f(&": ")?; - f(e) - } - ConfigErrorInner::ParseError { reason } => f(reason), + let errors = self.0.iter().format_with("\n", |inner, f| { + match &**inner { + ConfigErrorInner::Json { config_key: key, error: e } => { + f(key)?; + f(&": ")?; + f(e) + } + ConfigErrorInner::Toml { config_key: key, error: e } => { + f(key)?; + f(&": ")?; + f(e) + } + ConfigErrorInner::ParseError { reason } => f(reason), + }?; + f(&";") }); write!(f, "invalid config value{}:\n{}", if self.0.len() == 1 { "" } else { "s" }, errors) } @@ -3091,8 +3094,7 @@ fn get_field_json<T: DeserializeOwned>( json.pointer_mut(&pointer) .map(|it| serde_json::from_value(it.take()).map_err(|e| (e, pointer))) }) - .find(Result::is_ok) - .and_then(|res| match res { + .flat_map(|res| match res { Ok(it) => Some(it), Err((e, pointer)) => { tracing::warn!("Failed to deserialize config field at {}: {:?}", pointer, e); @@ -3100,6 +3102,7 @@ fn get_field_json<T: DeserializeOwned>( None } }) + .next() } fn get_field_toml<T: DeserializeOwned>( |
