diff options
| author | akbash <akbash@herdr.dev> | 2026-07-18 21:27:48 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-07-18 21:27:48 +0300 |
| commit | f11be93e0409f8159eb8c501416f4bd3516c4270 (patch) | |
| tree | cde111a1dfcfe51ea6ca042353fc228d5bbbfe3a /src/app | |
| parent | 02a6e874f67800891b5a549297219ed6f3ce0f2f (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.rs | 34 |
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"); |
