flag: cleanup in flag.v (#19237)

This commit is contained in:
yuyi 2023-08-29 23:08:14 +08:00 committed by GitHub
parent 17a1835a5c
commit 6af17a86e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -279,38 +279,36 @@ fn (mut fs FlagParser) parse_value(longhand string, shorthand u8) []string {
// -> '--flag' is parsed as true // -> '--flag' is parsed as true
// -> '--flag' is equal to '--flag=true' // -> '--flag' is equal to '--flag=true'
fn (mut fs FlagParser) parse_bool_value(longhand string, shorthand u8) !string { fn (mut fs FlagParser) parse_bool_value(longhand string, shorthand u8) !string {
{ full := '--${longhand}'
full := '--${longhand}' for i, arg in fs.args {
for i, arg in fs.args { if arg.len == 0 {
if arg.len == 0 { continue
continue }
} if arg[0] != `-` {
if arg[0] != `-` { continue
continue }
} if (arg.len == 2 && arg[0] == `-` && arg[1] == shorthand) || arg == full {
if (arg.len == 2 && arg[0] == `-` && arg[1] == shorthand) || arg == full { if fs.args.len > i + 1 && fs.args[i + 1] in ['true', 'false'] {
if fs.args.len > i + 1 && fs.args[i + 1] in ['true', 'false'] { val := fs.args[i + 1]
val := fs.args[i + 1] fs.args.delete(i + 1)
fs.args.delete(i + 1)
fs.args.delete(i)
return val
} else {
fs.args.delete(i)
return 'true'
}
}
if arg.len > full.len + 1 && arg[..full.len + 1] == '${full}=' {
// Flag abc=true
val := arg[full.len + 1..]
fs.args.delete(i) fs.args.delete(i)
return val return val
} } else {
if arg.len > 1 && arg[0] == `-` && arg[1] != `-` && arg.index_u8(shorthand) != -1 { fs.args.delete(i)
// -abc is equivalent to -a -b -c
fs.args[i] = arg.replace(shorthand.ascii_str(), '') // -abc -> -bc
return 'true' return 'true'
} }
} }
if arg.len > full.len + 1 && arg[..full.len + 1] == '${full}=' {
// Flag abc=true
val := arg[full.len + 1..]
fs.args.delete(i)
return val
}
if arg.len > 1 && arg[0] == `-` && arg[1] != `-` && arg.index_u8(shorthand) != -1 {
// -abc is equivalent to -a -b -c
fs.args[i] = arg.replace(shorthand.ascii_str(), '') // -abc -> -bc
return 'true'
}
} }
return error("parameter '${longhand}' not found") return error("parameter '${longhand}' not found")
} }
@ -319,15 +317,11 @@ fn (mut fs FlagParser) parse_bool_value(longhand string, shorthand u8) !string {
// It returns an error, when the flag is not given by the user. // It returns an error, when the flag is not given by the user.
// This version supports abbreviations. // This version supports abbreviations.
pub fn (mut fs FlagParser) bool_opt(name string, abbr u8, usage string) !bool { pub fn (mut fs FlagParser) bool_opt(name string, abbr u8, usage string) !bool {
mut res := false fs.add_flag(name, abbr, usage, '<bool>')
{ parsed := fs.parse_bool_value(name, abbr) or {
fs.add_flag(name, abbr, usage, '<bool>') return error("parameter '${name}' not provided")
parsed := fs.parse_bool_value(name, abbr) or {
return error("parameter '${name}' not provided")
}
res = parsed == 'true'
} }
return res return parsed == 'true'
} }
// bool defines and parses a string flag/option named `name`. // bool defines and parses a string flag/option named `name`.
@ -356,17 +350,13 @@ pub fn (mut fs FlagParser) int_multi(name string, abbr u8, usage string) []int {
// When the flag is not given by the user, it returns an error. // When the flag is not given by the user, it returns an error.
// This version supports abbreviations. // This version supports abbreviations.
pub fn (mut fs FlagParser) int_opt(name string, abbr u8, usage string) !int { pub fn (mut fs FlagParser) int_opt(name string, abbr u8, usage string) !int {
mut res := 0 fs.add_flag(name, abbr, usage, '<int>')
{ parsed := fs.parse_value(name, abbr)
fs.add_flag(name, abbr, usage, '<int>') if parsed.len == 0 {
parsed := fs.parse_value(name, abbr) return error("parameter '${name}' not provided")
if parsed.len == 0 {
return error("parameter '${name}' not provided")
}
parsed0 := parsed[0]
res = parsed0.int()
} }
return res parsed0 := parsed[0]
return parsed0.int()
} }
// int defines and parses an integer flag, named `name`. // int defines and parses an integer flag, named `name`.
@ -395,16 +385,12 @@ pub fn (mut fs FlagParser) float_multi(name string, abbr u8, usage string) []f64
// When the flag is not given by the user, it returns an error. // When the flag is not given by the user, it returns an error.
// This version supports abbreviations. // This version supports abbreviations.
pub fn (mut fs FlagParser) float_opt(name string, abbr u8, usage string) !f64 { pub fn (mut fs FlagParser) float_opt(name string, abbr u8, usage string) !f64 {
mut res := 0.0 fs.add_flag(name, abbr, usage, '<float>')
{ parsed := fs.parse_value(name, abbr)
fs.add_flag(name, abbr, usage, '<float>') if parsed.len == 0 {
parsed := fs.parse_value(name, abbr) return error("parameter '${name}' not provided")
if parsed.len == 0 {
return error("parameter '${name}' not provided")
}
res = parsed[0].f64()
} }
return res return parsed[0].f64()
} }
// float defines and parses a floating point flag, named `name`. // float defines and parses a floating point flag, named `name`.
@ -428,16 +414,12 @@ pub fn (mut fs FlagParser) string_multi(name string, abbr u8, usage string) []st
// When the flag is not given by the user, it returns an error. // When the flag is not given by the user, it returns an error.
// This version supports abbreviations. // This version supports abbreviations.
pub fn (mut fs FlagParser) string_opt(name string, abbr u8, usage string) !string { pub fn (mut fs FlagParser) string_opt(name string, abbr u8, usage string) !string {
mut res := '' fs.add_flag(name, abbr, usage, '<string>')
{ parsed := fs.parse_value(name, abbr)
fs.add_flag(name, abbr, usage, '<string>') if parsed.len == 0 {
parsed := fs.parse_value(name, abbr) return error("parameter '${name}' not provided")
if parsed.len == 0 {
return error("parameter '${name}' not provided")
}
res = parsed[0]
} }
return res return parsed[0]
} }
// string defines and parses a string flag/option, named `name`. // string defines and parses a string flag/option, named `name`.