1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

builtin: change IError msg and code to methods + fix vlib, add a deprecation notice for the old usages (#13041)

This commit is contained in:
Tim Basel
2022-02-11 14:52:33 +01:00
committed by GitHub
parent 61024d4b75
commit 9d0a5942ac
80 changed files with 493 additions and 324 deletions

View File

@@ -11,23 +11,28 @@ pub:
}
struct UnkownFlagError {
msg string
code int
Error
flag string
}
struct MinimumArgsCountError {
msg string
code int
fn (err UnkownFlagError) msg() string {
return 'Unknown flag `$err.flag`'
}
struct MaximumArgsCountError {
msg string
code int
struct ArgsCountError {
Error
got int
want int
}
struct NoArgsExpectedError {
msg string
code int
fn (err ArgsCountError) msg() string {
if err.want == 0 {
return 'Expected no arguments, but got $err.got'
} else if err.got > err.want {
return 'Expected at most $err.want arguments, but got $err.got'
} else {
return 'Expected at least $err.want arguments, but got $err.got'
}
}
// free frees the resources associated with a given Flag
@@ -616,24 +621,27 @@ pub fn (mut fs FlagParser) finalize() ?[]string {
for a in remaining {
if (a.len >= 2 && a[..2] == '--') || (a.len == 2 && a[0] == `-`) {
return IError(&UnkownFlagError{
msg: 'Unknown flag `$a`'
flag: a
})
}
}
}
if remaining.len < fs.min_free_args && fs.min_free_args > 0 {
return IError(&MinimumArgsCountError{
msg: 'Expected at least $fs.min_free_args arguments, but given $remaining.len'
return IError(&ArgsCountError{
want: fs.min_free_args
got: remaining.len
})
}
if remaining.len > fs.max_free_args && fs.max_free_args > 0 {
return IError(&MaximumArgsCountError{
msg: 'Expected at most $fs.max_free_args arguments, but given $remaining.len'
return IError(&ArgsCountError{
want: fs.max_free_args
got: remaining.len
})
}
if remaining.len > 0 && fs.max_free_args == 0 && fs.min_free_args == 0 {
return IError(&NoArgsExpectedError{
msg: 'Expected no arguments, but given $remaining.len'
return IError(&ArgsCountError{
want: 0
got: remaining.len
})
}
remaining << fs.all_after_dashdash
@@ -647,7 +655,7 @@ pub fn (mut fs FlagParser) finalize() ?[]string {
// you want more control over the error handling.
pub fn (mut fs FlagParser) remaining_parameters() []string {
return fs.finalize() or {
eprintln(err.msg)
eprintln(err.msg())
println(fs.usage())
exit(1)
}

View File

@@ -137,7 +137,7 @@ fn test_finalize_returns_error_for_unknown_flags_long() {
mut fp := flag.new_flag_parser(['--known', '--unknown'])
fp.bool('known', 0, false, '')
finalized := fp.finalize() or {
assert err.msg == 'Unknown flag `--unknown`'
assert err.msg() == 'Unknown flag `--unknown`'
return
}
assert finalized.len < 0 // expect error to be returned
@@ -147,7 +147,7 @@ fn test_finalize_returns_error_for_unknown_flags_short() {
mut fp := flag.new_flag_parser(['--known', '-x'])
fp.bool('known', 0, false, '')
finalized := fp.finalize() or {
assert err.msg == 'Unknown flag `-x`'
assert err.msg() == 'Unknown flag `-x`'
return
}
assert finalized.len < 0 // expect error to be returned
@@ -210,7 +210,7 @@ fn test_error_for_to_few_free_args() ? {
mut fp1 := flag.new_flag_parser(['a', 'b', 'c'])
fp1.limit_free_args(5, 6) ?
args := fp1.finalize() or {
assert err.msg.starts_with('Expected at least 5 arguments')
assert err.msg().starts_with('Expected at least 5 arguments')
return
}
assert args.len < 0 // expect an error and need to use args
@@ -220,7 +220,7 @@ fn test_error_for_to_much_free_args() ? {
mut fp1 := flag.new_flag_parser(['a', 'b', 'c'])
fp1.limit_free_args(1, 2) ?
args := fp1.finalize() or {
assert err.msg.starts_with('Expected at most 2 arguments')
assert err.msg().starts_with('Expected at most 2 arguments')
return
}
assert args.len < 0 // expect an error and need to use args
@@ -230,7 +230,7 @@ fn test_could_expect_no_free_args() ? {
mut fp1 := flag.new_flag_parser(['a'])
fp1.limit_free_args(0, 0) ?
args := fp1.finalize() or {
assert err.msg.starts_with('Expected no arguments')
assert err.msg().starts_with('Expected no arguments')
return
}
assert args.len < 0 // expect an error and need to use args