cli: fix bug that caused help to panic (#11157)

pull/11159/head
zakuro 2021-08-12 15:25:28 +09:00 committed by GitHub
parent 12fb4655f5
commit 9c74fb0449
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 71 additions and 1 deletions

View File

@ -78,7 +78,9 @@ fn (cmd Command) help_message() string {
mut name_len := cli.min_description_indent_len mut name_len := cli.min_description_indent_len
if cmd.posix_mode { if cmd.posix_mode {
for flag in cmd.flags { for flag in cmd.flags {
abbrev_len = max(abbrev_len, flag.abbrev.len + cli.spacing + 1) // + 1 for '-' in front if flag.abbrev != '' {
abbrev_len = max(abbrev_len, flag.abbrev.len + cli.spacing + 1) // + 1 for '-' in front
}
name_len = max(name_len, abbrev_len + flag.name.len + cli.spacing + 2) // + 2 for '--' in front name_len = max(name_len, abbrev_len + flag.name.len + cli.spacing + 2) // + 2 for '--' in front
} }
for command in cmd.commands { for command in cmd.commands {
@ -86,6 +88,9 @@ fn (cmd Command) help_message() string {
} }
} else { } else {
for flag in cmd.flags { for flag in cmd.flags {
if flag.abbrev != '' {
abbrev_len = max(abbrev_len, flag.abbrev.len + cli.spacing + 1) // + 1 for '-' in front
}
name_len = max(name_len, abbrev_len + flag.name.len + cli.spacing + 1) // + 1 for '-' in front name_len = max(name_len, abbrev_len + flag.name.len + cli.spacing + 1) // + 1 for '-' in front
} }
for command in cmd.commands { for command in cmd.commands {

View File

@ -0,0 +1,65 @@
module cli
fn test_help_message() {
mut cmd := Command{
name: 'command'
description: 'description'
commands: [
Command{
name: 'sub'
description: 'subcommand'
},
Command{
name: 'sub2'
description: 'another subcommand'
},
]
flags: [
Flag{
flag: .string
name: 'str'
description: 'str flag'
},
Flag{
flag: .bool
name: 'bool'
description: 'bool flag'
abbrev: 'b'
},
Flag{
flag: .string
name: 'required'
abbrev: 'r'
required: true
},
]
}
assert cmd.help_message() == r'Usage: command [flags] [commands]
description
Flags:
-str str flag
-b -bool bool flag
-r -required (required)
Commands:
sub subcommand
sub2 another subcommand
'
cmd.posix_mode = true
assert cmd.help_message() == r'Usage: command [flags] [commands]
description
Flags:
--str str flag
-b --bool bool flag
-r --required (required)
Commands:
sub subcommand
sub2 another subcommand
'
}