command: hard wrap help message flags
Test / Create distribution (push) Successful in 53s
Test / Sandbox (push) Successful in 2m51s
Test / Hakurei (push) Successful in 4m29s
Test / Sandbox (race detector) (push) Successful in 5m53s
Test / Hakurei (race detector) (push) Successful in 7m2s
Test / ShareFS (push) Successful in 7m19s
Test / Flake checks (push) Successful in 1m8s
Test / Create distribution (push) Successful in 53s
Test / Sandbox (push) Successful in 2m51s
Test / Hakurei (push) Successful in 4m29s
Test / Sandbox (race detector) (push) Successful in 5m53s
Test / Hakurei (race detector) (push) Successful in 7m2s
Test / ShareFS (push) Successful in 7m19s
Test / Flake checks (push) Successful in 1m8s
This greatly improves readability when lots of flags are registered. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
+21
-3
@@ -1,6 +1,7 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
@@ -13,14 +14,31 @@ var ErrHelp = errors.New("help requested")
|
||||
func (n *node) PrintHelp() { _ = n.writeHelp() }
|
||||
|
||||
func (n *node) writeHelp() error {
|
||||
prefix := strings.Join(append(n.prefix, n.name), " ")
|
||||
var buf strings.Builder
|
||||
offset := 7 + len(prefix)
|
||||
line := offset + 14
|
||||
w := bytes.Repeat([]byte{' '}, offset+1)
|
||||
w[0] = '\n'
|
||||
|
||||
for _, flag := range n.suffix {
|
||||
line += len(flag) + 1
|
||||
if line >= 80 {
|
||||
line = offset + len(flag) + 1
|
||||
buf.Write(w)
|
||||
}
|
||||
buf.WriteByte(' ')
|
||||
buf.WriteString(flag)
|
||||
}
|
||||
|
||||
if _, err := fmt.Fprintf(n.out,
|
||||
"\nUsage:\t%s [-h | --help]%s COMMAND [OPTIONS]\n",
|
||||
strings.Join(append(n.prefix, n.name), " "), &n.suffix,
|
||||
"usage: %s [-h | --help]%s <command> [<args>]\n",
|
||||
prefix, &buf,
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
if n.child != nil {
|
||||
if _, err := fmt.Fprint(n.out, "\nCommands:\n"); err != nil {
|
||||
if _, err := fmt.Fprint(n.out, "\ncommands:\n"); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user