mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
flag: cleanup in flag.v (#19237)
This commit is contained in:
parent
17a1835a5c
commit
6af17a86e2
1 changed files with 45 additions and 63 deletions
108
vlib/flag/flag.v
108
vlib/flag/flag.v
|
@ -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`.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue