From b6e06f6dc96290b9bf269208b648c3e989be333f Mon Sep 17 00:00:00 2001 From: Yuya Nishihara Date: Wed, 7 Dec 2022 19:26:37 +0900 Subject: [PATCH] cli: use deserialize to parse alias definition Unfortunately, config::Value is lax and '[7]' could be parsed as '["7"]'. I don't like it, but I think that's actually better for consistency as we use config.get_string() in various places. --- src/cli_util.rs | 28 +--------------------------- tests/test_alias.rs | 2 +- 2 files changed, 2 insertions(+), 28 deletions(-) diff --git a/src/cli_util.rs b/src/cli_util.rs index 3bf8da546..04c7f2559 100644 --- a/src/cli_util.rs +++ b/src/cli_util.rs @@ -1371,32 +1371,6 @@ pub fn create_ui() -> (Ui, Result<(), CommandError>) { } } -fn string_list_from_config(value: config::Value) -> Option> { - match value { - config::Value { - kind: config::ValueKind::Array(elements), - .. - } => { - let mut strings = vec![]; - for arg in elements { - match arg { - config::Value { - kind: config::ValueKind::String(string_value), - .. - } => { - strings.push(string_value); - } - _ => { - return None; - } - } - } - Some(strings) - } - _ => None, - } -} - fn resolve_aliases( user_settings: &UserSettings, app: &clap::Command, @@ -1432,7 +1406,7 @@ fn resolve_aliases( ))); } if let Some(value) = aliases_map.remove(&alias_name) { - if let Some(alias_definition) = string_list_from_config(value) { + if let Ok(alias_definition) = value.try_deserialize::>() { assert!(string_args.ends_with(&alias_args)); string_args.truncate(string_args.len() - 1 - alias_args.len()); string_args.extend(alias_definition); diff --git a/tests/test_alias.rs b/tests/test_alias.rs index 8babe3d6e..052255566 100644 --- a/tests/test_alias.rs +++ b/tests/test_alias.rs @@ -180,7 +180,7 @@ fn test_alias_invalid_definition() { test_env.add_config( br#"[alias] non-list = 5 - non-string-list = [7] + non-string-list = [[]] "#, ); let stderr = test_env.jj_cmd_failure(test_env.env_root(), &["non-list"]);