aboutsummaryrefslogtreecommitdiff
path: root/src/app
diff options
context:
space:
mode:
authorakbash <akbash@herdr.dev>2026-07-18 21:27:48 +0300
committerGitHub <noreply@github.com>2026-07-18 21:27:48 +0300
commitf11be93e0409f8159eb8c501416f4bd3516c4270 (patch)
treecde111a1dfcfe51ea6ca042353fc228d5bbbfe3a /src/app
parent02a6e874f67800891b5a549297219ed6f3ce0f2f (diff)
fix: report unknown config keys (#1575)
* fix: report unknown config keys refs #1573 * fix: preserve mixed config warning context refs #1573 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Diffstat (limited to 'src/app')
-rw-r--r--src/app/mod.rs34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/app/mod.rs b/src/app/mod.rs
index d634dbb4..d556b960 100644
--- a/src/app/mod.rs
+++ b/src/app/mod.rs
@@ -2605,7 +2605,7 @@ mod tests {
std::fs::create_dir_all(path.parent().unwrap()).unwrap();
std::fs::write(
&path,
- "[terminal]\ndefault_shell = \"nu\"\nshell_mode = \"non_login\"\nnew_cwd = \"home\"\n[keys]\nnew_workspace = \"prefix+m\"\nprefix = \"ctrl+a\"\n[update]\nversion_check = false\nmanifest_check = false\n[ui]\nagent_panel_scope = \"current\"\nagent_panel_sort = \"priority\"\nredraw_on_focus_gained = false\ncopy_on_select = false\nright_click_passthrough_modifier = \"ctrl\"\nprompt_new_workspace_name = true\n[ui.toast]\ndelivery = \"herdr\"\n[experimental]\nswitch_ascii_input_source_in_prefix = true\n",
+ "[terminal]\ndefault_shell = \"nu\"\nshell_mode = \"non_login\"\nnew_cwd = \"home\"\n[keys]\nnew_workspace = \"prefix+m\"\nprefix = \"ctrl+a\"\n[update]\nversion_check = false\nmanifest_check = false\n[ui]\nagent_panel_sort = \"priority\"\nredraw_on_focus_gained = false\ncopy_on_select = false\nright_click_passthrough_modifier = \"ctrl\"\nprompt_new_workspace_name = true\n[ui.toast]\ndelivery = \"herdr\"\n[experimental]\nswitch_ascii_input_source_in_prefix = true\n",
)
.unwrap();
std::env::set_var(crate::config::CONFIG_PATH_ENV_VAR, &path);
@@ -3032,6 +3032,38 @@ mod tests {
}
#[test]
+ fn reload_config_applies_known_sibling_and_summarizes_unknown_key() {
+ let _guard = config_env_lock().lock().unwrap();
+ let path = temp_config_path("reload-config-unknown-key");
+ std::fs::create_dir_all(path.parent().unwrap()).unwrap();
+ std::env::set_var(crate::config::CONFIG_PATH_ENV_VAR, &path);
+
+ let mut app = test_app();
+ let target_mouse_capture = !app.state.mouse_capture;
+ std::fs::write(
+ &path,
+ format!("[ui]\nmouse_capture = {target_mouse_capture}\nmouse_captur = false\n"),
+ )
+ .unwrap();
+
+ let report = app.reload_config();
+
+ assert_eq!(report.status, crate::config::ConfigReloadStatus::Partial);
+ assert_eq!(
+ report.diagnostics,
+ vec!["unknown config key ui.mouse_captur; ignoring key"]
+ );
+ assert_eq!(app.state.mouse_capture, target_mouse_capture);
+ assert_eq!(
+ app.state.config_diagnostic.as_deref(),
+ Some("config.toml has unknown keys; herdr config check")
+ );
+
+ std::env::remove_var(crate::config::CONFIG_PATH_ENV_VAR);
+ let _ = std::fs::remove_dir_all(path.parent().unwrap());
+ }
+
+ #[test]
fn reload_config_user_binding_displaces_default_without_rejecting_prefix() {
let _guard = config_env_lock().lock().unwrap();
let path = temp_config_path("reload-config-user-binding-displaces-default");