some more cleanup
parent
c053e7c8c3
commit
52be7b6cda
|
|
@ -94,8 +94,7 @@ pub fn (mut cmd Command) add_commands(commands []Command) {
|
||||||
pub fn (mut cmd Command) add_command(command Command) {
|
pub fn (mut cmd Command) add_command(command Command) {
|
||||||
mut subcmd := command
|
mut subcmd := command
|
||||||
if cmd.commands.contains(subcmd.name) {
|
if cmd.commands.contains(subcmd.name) {
|
||||||
println('Command with the name `$subcmd.name` already exists')
|
eprintln_exit('Command with the name `$subcmd.name` already exists')
|
||||||
exit(1)
|
|
||||||
}
|
}
|
||||||
subcmd.parent = unsafe { cmd }
|
subcmd.parent = unsafe { cmd }
|
||||||
cmd.commands << subcmd
|
cmd.commands << subcmd
|
||||||
|
|
@ -121,8 +120,7 @@ pub fn (mut cmd Command) add_flags(flags []Flag) {
|
||||||
// add_flag adds `flag` to this `Command`.
|
// add_flag adds `flag` to this `Command`.
|
||||||
pub fn (mut cmd Command) add_flag(flag Flag) {
|
pub fn (mut cmd Command) add_flag(flag Flag) {
|
||||||
if cmd.flags.contains(flag.name) {
|
if cmd.flags.contains(flag.name) {
|
||||||
println('Flag with the name `$flag.name` already exists')
|
eprintln_exit('Flag with the name `$flag.name` already exists')
|
||||||
exit(1)
|
|
||||||
}
|
}
|
||||||
cmd.flags << flag
|
cmd.flags << flag
|
||||||
}
|
}
|
||||||
|
|
@ -183,16 +181,14 @@ fn (mut cmd Command) parse_flags() {
|
||||||
found = true
|
found = true
|
||||||
flag.found = true
|
flag.found = true
|
||||||
cmd.args = flag.parse(cmd.args, cmd.posix_mode) or {
|
cmd.args = flag.parse(cmd.args, cmd.posix_mode) or {
|
||||||
println('Failed to parse flag `${cmd.args[0]}`: $err')
|
eprintln_exit('Failed to parse flag `${cmd.args[0]}`: $err')
|
||||||
exit(1)
|
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !found {
|
if !found {
|
||||||
println('Command `$cmd.name` has no flag `${cmd.args[0]}`')
|
eprintln_exit('Command `$cmd.name` has no flag `${cmd.args[0]}`')
|
||||||
exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -223,18 +219,17 @@ fn (mut cmd Command) parse_commands() {
|
||||||
// if no further command was found, execute current command
|
// if no further command was found, execute current command
|
||||||
if cmd.required_args > 0 {
|
if cmd.required_args > 0 {
|
||||||
if cmd.required_args > cmd.args.len {
|
if cmd.required_args > cmd.args.len {
|
||||||
eprintln('Command `$cmd.name` needs at least $cmd.required_args arguments')
|
eprintln_exit('Command `$cmd.name` needs at least $cmd.required_args arguments')
|
||||||
exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cmd.check_required_flags()
|
cmd.check_required_flags()
|
||||||
|
|
||||||
cmd.handle_error('preexecution', cmd.pre_execute)
|
cmd.handle_cb(cmd.pre_execute, 'preexecution')
|
||||||
cmd.handle_error('execution', cmd.execute)
|
cmd.handle_cb(cmd.execute, 'execution')
|
||||||
cmd.handle_error('postexecution', cmd.post_execute)
|
cmd.handle_cb(cmd.post_execute, 'postexecution')
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut cmd Command) handle_error(label string, cb FnCommandCallback) {
|
fn (mut cmd Command) handle_cb(cb FnCommandCallback, label string) {
|
||||||
if !isnil(cb) {
|
if !isnil(cb) {
|
||||||
cb(*cmd) or {
|
cb(*cmd) or {
|
||||||
label_message := if term.can_show_color_on_stderr() {
|
label_message := if term.can_show_color_on_stderr() {
|
||||||
|
|
@ -242,8 +237,7 @@ fn (mut cmd Command) handle_error(label string, cb FnCommandCallback) {
|
||||||
} else {
|
} else {
|
||||||
'cli $label error:'
|
'cli $label error:'
|
||||||
}
|
}
|
||||||
eprintln('$label_message $err')
|
eprintln_exit('$label_message $err')
|
||||||
exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -273,8 +267,7 @@ fn (cmd Command) check_required_flags() {
|
||||||
for flag in cmd.flags {
|
for flag in cmd.flags {
|
||||||
if flag.required && flag.value.len == 0 {
|
if flag.required && flag.value.len == 0 {
|
||||||
full_name := cmd.full_name()
|
full_name := cmd.full_name()
|
||||||
println('Flag `$flag.name` is required by `$full_name`')
|
eprintln_exit('Flag `$flag.name` is required by `$full_name`')
|
||||||
exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -307,3 +300,9 @@ fn (cmds []Command) contains(name string) bool {
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[noreturn]
|
||||||
|
fn eprintln_exit(message string) {
|
||||||
|
eprintln(message)
|
||||||
|
exit(1)
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue