From 9c020757a5eaa2eeb9213c5a816db3b123276fd6 Mon Sep 17 00:00:00 2001 From: John Shin <51249639+shinhs0506@users.noreply.github.com> Date: Tue, 26 Sep 2023 18:31:20 -0700 Subject: [PATCH] fix: display parsing error for kdl files located under the 'themes' directory (#2762) * fix: display parsing error for kdl files located under the 'themes' directory * refactor: if-let to match --------- Co-authored-by: Jae-Heon Ji --- zellij-utils/src/kdl/mod.rs | 11 ++++++++--- zellij-utils/src/setup.rs | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/zellij-utils/src/kdl/mod.rs b/zellij-utils/src/kdl/mod.rs index db72b80d..35bf8940 100644 --- a/zellij-utils/src/kdl/mod.rs +++ b/zellij-utils/src/kdl/mod.rs @@ -1791,7 +1791,7 @@ impl Themes { Ok(themes) } - pub fn from_string(raw_string: String) -> Result { + pub fn from_string(raw_string: &String) -> Result { let kdl_config: KdlDocument = raw_string.parse()?; let kdl_themes = kdl_config.get("themes").ok_or(ConfigError::new_kdl_error( "No theme node found in file".into(), @@ -1805,8 +1805,13 @@ impl Themes { pub fn from_path(path_to_theme_file: PathBuf) -> Result { // String is the theme name let kdl_config = std::fs::read_to_string(&path_to_theme_file) - .map_err(|e| ConfigError::IoPath(e, path_to_theme_file.into()))?; - Themes::from_string(kdl_config) + .map_err(|e| ConfigError::IoPath(e, path_to_theme_file.clone()))?; + Themes::from_string(&kdl_config).map_err(|e| match e { + ConfigError::KdlError(kdl_error) => ConfigError::KdlError( + kdl_error.add_src(path_to_theme_file.display().to_string(), kdl_config), + ), + e => e, + }) } pub fn from_dir(path_to_theme_dir: PathBuf) -> Result { diff --git a/zellij-utils/src/setup.rs b/zellij-utils/src/setup.rs index 44fed5fa..09009a85 100644 --- a/zellij-utils/src/setup.rs +++ b/zellij-utils/src/setup.rs @@ -68,7 +68,7 @@ fn get_default_themes() -> Themes { let mut themes = Themes::default(); for file in ZELLIJ_DEFAULT_THEMES.files() { if let Some(content) = file.contents_utf8() { - match Themes::from_string(content.to_string()) { + match Themes::from_string(&content.to_string()) { Ok(theme) => themes = themes.merge(theme), Err(_) => {}, }