diff --git a/vlib/flag/flag.v b/vlib/flag/flag.v index 7589f7d7d09ab6..562188894facb8 100644 --- a/vlib/flag/flag.v +++ b/vlib/flag/flag.v @@ -400,19 +400,39 @@ pub fn (mut fs FlagParser) float(name string, abbr u8, fdefault f64, usage strin return value } +@[params] +pub struct FlagConfig { +pub: + val_desc string // descriptive string for an argument +} + // string_multi returns all string values, associated with the flag named `name`. // When no values for that flag are found, it returns an empty array. // This version supports abbreviations. -pub fn (mut fs FlagParser) string_multi(name string, abbr u8, usage string) []string { - fs.add_flag(name, abbr, usage, '') +// This version supports a custom value description. +pub fn (mut fs FlagParser) string_multi(name string, abbr u8, usage string, c FlagConfig) []string { + val_desc := if c.val_desc == '' { + '' + } else { + c.val_desc + } + + fs.add_flag(name, abbr, usage, val_desc) return fs.parse_value(name, abbr) } // string_opt returns an option with the string value, associated with the flag in `name`. // When the flag is not given by the user, it returns an error. // This version supports abbreviations. -pub fn (mut fs FlagParser) string_opt(name string, abbr u8, usage string) !string { - fs.add_flag(name, abbr, usage, '') +// This version supports a custom value description. +pub fn (mut fs FlagParser) string_opt(name string, abbr u8, usage string, c FlagConfig) !string { + val_desc := if c.val_desc == '' { + '' + } else { + c.val_desc + } + + fs.add_flag(name, abbr, usage, val_desc) parsed := fs.parse_value(name, abbr) if parsed.len == 0 { return error("parameter '${name}' not provided") @@ -424,8 +444,9 @@ pub fn (mut fs FlagParser) string_opt(name string, abbr u8, usage string) !strin // If that flag is given as an option, then its parsed value is returned as a string. // When it is not, it returns the default string value in `sdefault`. // This version supports abbreviations. -pub fn (mut fs FlagParser) string(name string, abbr u8, sdefault string, usage string) string { - value := fs.string_opt(name, abbr, usage) or { return sdefault } +// This version supports a custom value description. +pub fn (mut fs FlagParser) string(name string, abbr u8, sdefault string, usage string, c FlagConfig) string { + value := fs.string_opt(name, abbr, usage, c) or { return sdefault } return value } diff --git a/vlib/flag/flag_test.v b/vlib/flag/flag_test.v index 50b7761c818488..41f47a0aa7a3f6 100644 --- a/vlib/flag/flag_test.v +++ b/vlib/flag/flag_test.v @@ -194,6 +194,24 @@ fn test_if_no_options_given_usage_message_does_not_contain_options() { assert !fp.usage().contains('Options:') } +fn test_default_val_descriptions_for_strings() { + mut fp := flag.new_flag_parser([]) + fp.string_multi('a_string', `a`, '') + fp.string('a_string', `s`, '', '') + + assert fp.usage().contains('') + assert fp.usage().contains('') +} + +fn test_custom_val_descriptions_for_strings() { + mut fp := flag.new_flag_parser([]) + fp.string_multi('a_string', `a`, '', val_desc: '') + fp.string('a_string', `s`, '', '', val_desc: '') + + assert fp.usage().contains('') + assert fp.usage().contains('') +} + fn test_free_args_could_be_limited() { mut fp1 := flag.new_flag_parser(['a', 'b', 'c']) fp1.limit_free_args(1, 4)!