aboutsummaryrefslogtreecommitdiff
path: root/src/app
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-10 17:11:50 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-10 17:28:31 +0300
commit3e8f9df14e6dd08a8d80d920b923870a80649f0b (patch)
treeea854ca617d1ca21a09d1e7aa9246ffc5f6e842b /src/app
parent66be0b655fe922867f1eed100a41d67038b6ffd6 (diff)
fix: improve config diagnostic delivery
Diffstat (limited to 'src/app')
-rw-r--r--src/app/mod.rs63
1 files changed, 23 insertions, 40 deletions
diff --git a/src/app/mod.rs b/src/app/mod.rs
index 51bdd33e..99181361 100644
--- a/src/app/mod.rs
+++ b/src/app/mod.rs
@@ -1338,16 +1338,8 @@ impl App {
// On `min > max`, treat the entire `[ui]` section as invalid: keep
// the previous settings and skip the section so the re-clamp below
// — and every subsequent render/drag — can never panic.
- if crate::config::validated_sidebar_bounds(
- config.ui.sidebar_min_width,
- config.ui.sidebar_max_width,
- )
- .is_none()
- {
- diagnostics.push(format!(
- "ui.sidebar_min_width ({}) is greater than sidebar_max_width ({}); keeping previous [ui] settings",
- config.ui.sidebar_min_width, config.ui.sidebar_max_width,
- ));
+ if let Some(diagnostic) = config.invalid_sidebar_bounds_diagnostic() {
+ diagnostics.push(format!("{diagnostic}; keeping previous [ui] settings"));
} else {
diagnostics.extend(config.ui.sound.diagnostics());
@@ -2786,21 +2778,21 @@ mod tests {
let report = app.reload_config();
assert_eq!(report.status, crate::config::ConfigReloadStatus::Partial);
+ assert!(report.diagnostics.iter().any(|diagnostic| {
+ diagnostic.contains("sidebar_min_width")
+ && diagnostic.contains("sidebar_max_width")
+ && diagnostic.contains("greater")
+ }));
assert_eq!(app.state.sidebar_min_width, original_min);
assert_eq!(app.state.sidebar_max_width, original_max);
assert_eq!(
app.state.mouse_capture, original_mouse_capture,
"[ui] is treated as invalid on bad bounds; mouse_capture must not apply"
);
- assert!(app
- .state
- .config_diagnostic
- .as_deref()
- .is_some_and(|message| {
- message.contains("sidebar_min_width")
- && message.contains("sidebar_max_width")
- && message.contains("greater")
- }));
+ assert_eq!(
+ app.state.config_diagnostic.as_deref(),
+ Some("config.toml; herdr config check")
+ );
std::env::remove_var(crate::config::CONFIG_PATH_ENV_VAR);
let _ = std::fs::remove_dir_all(path.parent().unwrap());
@@ -2823,6 +2815,9 @@ mod tests {
let report = app.reload_config();
assert_eq!(report.status, crate::config::ConfigReloadStatus::Partial);
+ assert!(report.diagnostics.iter().any(|diagnostic| {
+ diagnostic.contains("keys.new_workspace") && diagnostic.contains("disabling binding")
+ }));
assert_eq!(
(app.state.prefix_code, app.state.prefix_mods),
original_prefix
@@ -2832,14 +2827,6 @@ mod tests {
app.state.toast_config.delivery,
crate::config::ToastDelivery::Terminal
);
- assert!(app
- .state
- .config_diagnostic
- .as_deref()
- .is_some_and(|message| {
- message.contains("keys.new_workspace") && message.contains("disabling binding")
- }));
-
std::env::remove_var(crate::config::CONFIG_PATH_ENV_VAR);
let _ = std::fs::remove_dir_all(path.parent().unwrap());
}
@@ -2891,6 +2878,10 @@ mod tests {
let report = app.reload_config();
assert_eq!(report.status, crate::config::ConfigReloadStatus::Partial);
+ assert!(report
+ .diagnostics
+ .iter()
+ .any(|diagnostic| diagnostic.contains("invalid ui config")));
assert!(app
.state
.keybinds
@@ -2900,12 +2891,6 @@ mod tests {
app.state.toast_config.delivery,
crate::config::ToastDelivery::Herdr
);
- assert!(app
- .state
- .config_diagnostic
- .as_deref()
- .is_some_and(|message| message.contains("invalid ui config")));
-
std::env::remove_var(crate::config::CONFIG_PATH_ENV_VAR);
let _ = std::fs::remove_dir_all(path.parent().unwrap());
}
@@ -2929,6 +2914,10 @@ mod tests {
let report = app.reload_config();
assert_eq!(report.status, crate::config::ConfigReloadStatus::Partial);
+ assert!(report
+ .diagnostics
+ .iter()
+ .any(|diagnostic| diagnostic.contains("invalid terminal config")));
assert_eq!(app.state.default_shell, original_default_shell);
assert_eq!(app.state.shell_mode, original_shell_mode);
assert_eq!(app.state.new_terminal_cwd, original_new_cwd);
@@ -2936,12 +2925,6 @@ mod tests {
app.state.toast_config.delivery,
crate::config::ToastDelivery::Terminal
);
- assert!(app
- .state
- .config_diagnostic
- .as_deref()
- .is_some_and(|message| message.contains("invalid terminal config")));
-
std::env::remove_var(crate::config::CONFIG_PATH_ENV_VAR);
let _ = std::fs::remove_dir_all(path.parent().unwrap());
}
@@ -3047,7 +3030,7 @@ mod tests {
.config_diagnostic
.as_deref()
.is_some_and(|message| {
- message.contains("config parse error") && message.contains("keeping current config")
+ message.contains("config.toml:1:6") && message.contains("herdr config check")
}));
assert!(app.state.toast.is_none());