aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Davis2022-12-15 08:49:49 +0000
committerGitHub2022-12-15 08:49:49 +0000
commitdb939801ebf299f11a6a52bdff7a3c9bfb87fc34 (patch)
tree9799f321762264bff47ba46519f404578740c7bf
parent012fc12f97f4e8e0fc38af351388e41e8bc142d8 (diff)
Improve error message handling for theme loading failures (#5073)
The error messages for a theme that failed to be deserialized (or otherwise failed to load) were covered up by the context/with_context calls: * The log message for a bad theme configured in config.toml would only say "Failed to deserilaize theme" * Selecting a bad theme via :theme would show "Theme does not exist" With these changes, we let the TOML deserializer errors bubble up, so the error messages can now say the line number of a duplicated key - and that key's name - when a theme fails to load because of a duplicated key. Providing a theme which does not exist to :theme still gives a helpful error message: "No such file or directory."
-rw-r--r--helix-term/src/commands/typed.rs2
-rw-r--r--helix-view/src/theme.rs3
2 files changed, 3 insertions, 2 deletions
diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs
index 2119a48d..cb387fcb 100644
--- a/helix-term/src/commands/typed.rs
+++ b/helix-term/src/commands/typed.rs
@@ -777,7 +777,7 @@ fn theme(
.editor
.theme_loader
.load(theme_name)
- .with_context(|| "Theme does not exist")?;
+ .map_err(|err| anyhow::anyhow!("Could not load theme: {}", err))?;
if !(true_color || theme.is_16_color()) {
bail!("Unsupported theme: theme requires true color support");
}
diff --git a/helix-view/src/theme.rs b/helix-view/src/theme.rs
index f1219ec5..b2c8a79f 100644
--- a/helix-view/src/theme.rs
+++ b/helix-view/src/theme.rs
@@ -136,8 +136,9 @@ impl Loader {
// Loads the theme data as `toml::Value` first from the user_dir then in default_dir
fn load_toml(&self, path: PathBuf) -> Result<Value> {
let data = std::fs::read(&path)?;
+ let value = toml::from_slice(data.as_slice())?;
- toml::from_slice(data.as_slice()).context("Failed to deserialize theme")
+ Ok(value)
}
// Returns the path to the theme with the name