aboutsummaryrefslogtreecommitdiff
path: root/src/flag
diff options
context:
space:
mode:
authorTim Cooper <tim.cooper@layeh.com>2017-09-27 20:31:55 -0300
committerRuss Cox <rsc@golang.org>2017-09-28 20:45:32 +0000
commit0828ec1ea8f1733d61db0893fe8c03abbcebc2e5 (patch)
treecbccc79b285e4464724aa09871420aa0c3397b50 /src/flag
parentded2c65db3cf8c7f03e42d315b22a6b734246a32 (diff)
downloadgo-0828ec1ea8f1733d61db0893fe8c03abbcebc2e5.tar.gz
go-0828ec1ea8f1733d61db0893fe8c03abbcebc2e5.zip
flag: align multi-line usage strings
Previously, a multi-line flag usage string would not be indented with the rest of the usage strings. This made long usage strings difficult to read. For example, the usage for flag.String("A", "", "1\n2\n3") would be printed as: -A 1 2 3 But will now be printed as: -A 1 2 3 Also fixes a slight error in the FlagSet.PrintDefaults documentation. Fixes #20799 Change-Id: I4379c6b7590fdb93a2809a01046a0f6ae32c3e5d Reviewed-on: https://go-review.googlesource.com/66711 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/flag')
-rw-r--r--src/flag/flag.go10
-rw-r--r--src/flag/flag_test.go8
2 files changed, 14 insertions, 4 deletions
diff --git a/src/flag/flag.go b/src/flag/flag.go
index a1a8dc7fad..5544a25282 100644
--- a/src/flag/flag.go
+++ b/src/flag/flag.go
@@ -71,6 +71,7 @@ import (
"reflect"
"sort"
"strconv"
+ "strings"
"time"
)
@@ -448,9 +449,9 @@ func UnquoteUsage(flag *Flag) (name string, usage string) {
return
}
-// PrintDefaults prints to standard error the default values of all
-// defined command-line flags in the set. See the documentation for
-// the global function PrintDefaults for more information.
+// PrintDefaults prints, to standard error unless configured otherwise, the
+// default values of all defined command-line flags in the set. See the
+// documentation for the global function PrintDefaults for more information.
func (f *FlagSet) PrintDefaults() {
f.VisitAll(func(flag *Flag) {
s := fmt.Sprintf(" -%s", flag.Name) // Two spaces before -; see next two comments.
@@ -467,7 +468,8 @@ func (f *FlagSet) PrintDefaults() {
// for both 4- and 8-space tab stops.
s += "\n \t"
}
- s += usage
+ s += strings.Replace(usage, "\n", "\n \t", -1)
+
if !isZeroValue(flag, flag.DefValue) {
if _, ok := flag.Value.(*stringValue); ok {
// put quotes on the value
diff --git a/src/flag/flag_test.go b/src/flag/flag_test.go
index 20d09c4c41..4c6db96ba0 100644
--- a/src/flag/flag_test.go
+++ b/src/flag/flag_test.go
@@ -389,8 +389,14 @@ const defaultOutput = ` -A for bootstrapping, allow 'any' type
a non-zero number (default 2.7)
-G float
a float that defaults to zero
+ -M string
+ a multiline
+ help
+ string
-N int
a non-zero int (default 27)
+ -O a flag
+ multiline help string (default true)
-Z int
an int that defaults to zero
-maxT timeout
@@ -407,7 +413,9 @@ func TestPrintDefaults(t *testing.T) {
fs.String("D", "", "set relative `path` for local imports")
fs.Float64("F", 2.7, "a non-zero `number`")
fs.Float64("G", 0, "a float that defaults to zero")
+ fs.String("M", "", "a multiline\nhelp\nstring")
fs.Int("N", 27, "a non-zero int")
+ fs.Bool("O", true, "a flag\nmultiline help string")
fs.Int("Z", 0, "an int that defaults to zero")
fs.Duration("maxT", 0, "set `timeout` for dial")
fs.PrintDefaults()