cli: add Command.setup() (#7850)

pull/7887/head
zakuro 2021-01-05 20:25:25 +09:00 committed by GitHub
parent a8741fdced
commit e19277352b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 58 additions and 0 deletions

30
vlib/cli/README.md 100644
View File

@ -0,0 +1,30 @@
Usage example:
```v
module main
import os
import cli
fn main() {
mut app := cli.Command{
name: 'example-app'
description: 'example-app'
execute: fn (cmd cli.Command) ? {
println('hello app')
return
}
commands: [
cli.Command{
name: 'sub'
execute: fn (cmd cli.Command) ? {
println('hello subcommand')
return
}
},
]
}
app.setup()
app.parse(os.args)
}
```

View File

@ -89,6 +89,13 @@ pub fn (mut cmd Command) add_command(command Command) {
cmd.commands << subcmd cmd.commands << subcmd
} }
pub fn (mut cmd Command) setup() {
for mut subcmd in cmd.commands {
subcmd.parent = cmd
subcmd.setup()
}
}
pub fn (mut cmd Command) add_flags(flags []Flag) { pub fn (mut cmd Command) add_flags(flags []Flag) {
for flag in flags { for flag in flags {
cmd.add_flag(flag) cmd.add_flag(flag)

View File

@ -145,6 +145,27 @@ fn test_if_global_flag_gets_set_in_subcommand() {
cmd.parse(['command', '-flag', 'value', 'subcommand']) cmd.parse(['command', '-flag', 'value', 'subcommand'])
} }
fn test_command_setup() {
mut cmd := cli.Command{
name: 'root'
commands: [
cli.Command{
name: 'child'
commands: [
cli.Command{
name: 'child-child'
},
]
},
]
}
assert isnil(cmd.commands[0].parent)
assert isnil(cmd.commands[0].commands[0].parent)
cmd.setup()
assert cmd.commands[0].parent.name == 'root'
assert cmd.commands[0].commands[0].parent.name == 'child'
}
// helper functions // helper functions
fn empty_func(cmd cli.Command) ? { fn empty_func(cmd cli.Command) ? {
} }