mirror of
https://github.com/vlang/v.git
synced 2025-09-13 22:42:26 +03:00
flag: add optional value description to string parameters (#22024)
This commit is contained in:
parent
c51d30bf53
commit
20a525ae74
2 changed files with 45 additions and 6 deletions
|
@ -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, '<multiple strings>')
|
||||
// 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 == '' {
|
||||
'<multiple strings>'
|
||||
} 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, '<string>')
|
||||
// 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 == '' {
|
||||
'<string>'
|
||||
} 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
|
||||
}
|
||||
|
||||
|
|
|
@ -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('<multiple strings>')
|
||||
assert fp.usage().contains('<string>')
|
||||
}
|
||||
|
||||
fn test_custom_val_descriptions_for_strings() {
|
||||
mut fp := flag.new_flag_parser([])
|
||||
fp.string_multi('a_string', `a`, '', val_desc: '<multi custom>')
|
||||
fp.string('a_string', `s`, '', '', val_desc: '<custom>')
|
||||
|
||||
assert fp.usage().contains('<multi custom>')
|
||||
assert fp.usage().contains('<custom>')
|
||||
}
|
||||
|
||||
fn test_free_args_could_be_limited() {
|
||||
mut fp1 := flag.new_flag_parser(['a', 'b', 'c'])
|
||||
fp1.limit_free_args(1, 4)!
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue