Skip to content

Commit 1c98149

Browse files
committed
Cleaning up --help
1 parent ff7d7e5 commit 1c98149

File tree

1 file changed

+28
-22
lines changed

1 file changed

+28
-22
lines changed

run.go

+28-22
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,8 @@ func Run(ctx context.Context, cliargs []string) error {
7373
}
7474

7575
c.SetVersionTemplate("{{ .Name }} {{ .Version }}\n")
76-
c.InitDefaultHelpCmd()
7776
c.SetArgs(cliargs[1:])
78-
c.SilenceErrors, c.SilenceUsage = true, true
77+
c.SilenceErrors = true
7978

8079
flags := c.Flags()
8180
flags.SortFlags = false
@@ -90,28 +89,35 @@ func Run(ctx context.Context, cliargs []string) error {
9089
flags.VarP(filevar{&args.Out}, "out", "o", "output file")
9190
flags.BoolVarP(&args.ForcePassword, "password", "w", false, "force password prompt (should happen automatically)")
9291
flags.BoolVarP(&args.SingleTransaction, "single-transaction", "1", false, "execute as a single transaction (if non-interactive)")
92+
93+
ss := func(v *[]string, name, short, usage, placeholder string, vals ...string) {
94+
f := flags.VarPF(vs{v, vals, placeholder}, name, short, usage)
95+
if placeholder == "" {
96+
f.DefValue, f.NoOptDefVal = "true", "true"
97+
}
98+
}
9399
// set
94-
flags.VarP(vs{&args.Variables, nil, "NAME=VALUE"}, "set", "v", `set variable NAME to VALUE (see \set command, aliases: --var --variable)`)
95-
flags.Var(vs{&args.Variables, nil, "NAME=VALUE"}, "var", "set variable NAME to VALUE")
96-
flags.Var(vs{&args.Variables, nil, "NAME=VALUE"}, "variable", "set variable NAME to VALUE")
100+
ss(&args.Variables, "set", "v", `set variable NAME to VALUE (see \set command, aliases: --var --variable)`, "NAME=VALUE")
101+
ss(&args.Variables, "var", "", "set variable NAME to VALUE", "NAME=VALUE")
102+
ss(&args.Variables, "variable", "", "set variable NAME to VALUE", "NAME=VALUE")
97103
// pset
98-
flags.VarP(vs{&args.PVariables, nil, "VAR=ARG"}, "pset", "P", `set printing option VAR to ARG (see \pset command)`)
104+
ss(&args.PVariables, "pset", "P", `set printing option VAR to ARG (see \pset command)`, "VAR=ARG")
99105
// pset flags
100-
flags.VarP(vs{&args.PVariables, []string{"fieldsep=%q", "csv_fieldsep=%q"}, "FIELD-SEPARATOR"}, "field-separator", "F", `field separator for unaligned and CSV output (default "|" and ",")`)
101-
flags.VarP(vs{&args.PVariables, []string{"recordsep=%q"}, "RECORD-SEPARATOR"}, "record-separator", "R", `record separator for unaligned and CSV output (default \n)`)
102-
flags.VarP(vs{&args.PVariables, []string{"tableattr=%q"}, "TABLE-ATTR"}, "table-attr", "T", "set HTML table tag attributes (e.g., width, border)")
106+
ss(&args.PVariables, "field-separator", "F", `field separator for unaligned and CSV output (default "|" and ",")`, "FIELD-SEPARATOR", "fieldsep=%q", "csv_fieldsep=%q")
107+
ss(&args.PVariables, "record-separator", "R", `record separator for unaligned and CSV output (default \n)`, "RECORD-SEPARATOR", "recordsep=%q")
108+
ss(&args.PVariables, "table-attr", "T", "set HTML table tag attributes (e.g., width, border)", "TABLE-ATTR", "tableattr=%q")
103109
// pset bools
104-
flags.VarPF(vs{&args.PVariables, []string{"format=unaligned"}, ""}, "no-align", "A", "unaligned table output mode").NoOptDefVal = "true"
105-
flags.VarPF(vs{&args.PVariables, []string{"format=html"}, ""}, "html", "H", "HTML table output mode").NoOptDefVal = "true"
106-
flags.VarPF(vs{&args.PVariables, []string{"tuples_only=on"}, ""}, "tuples-only", "t", "print rows only").NoOptDefVal = "true"
107-
flags.VarPF(vs{&args.PVariables, []string{"expanded=on"}, ""}, "expanded", "x", "turn on expanded table output").NoOptDefVal = "true"
108-
flags.VarPF(vs{&args.PVariables, []string{"fieldsep_zero=on"}, ""}, "field-separator-zero", "z", "set field separator for unaligned and CSV output to zero byte").NoOptDefVal = "true"
109-
flags.VarPF(vs{&args.PVariables, []string{"recordsep_zero=on"}, ""}, "record-separator-zero", "0", "set record separator for unaligned and CSV output to zero byte").NoOptDefVal = "true"
110-
flags.VarPF(vs{&args.PVariables, []string{"format=json"}, ""}, "json", "J", "JSON output mode").NoOptDefVal = "true"
111-
flags.VarPF(vs{&args.PVariables, []string{"format=csv"}, ""}, "csv", "C", "CSV output mode").NoOptDefVal = "true"
112-
flags.VarPF(vs{&args.PVariables, []string{"format=vertical"}, ""}, "vertical", "G", "vertical output mode").NoOptDefVal = "true"
110+
ss(&args.PVariables, "no-align", "A", "unaligned table output mode", "", "format=unaligned")
111+
ss(&args.PVariables, "html", "H", "HTML table output mode", "", "format=html")
112+
ss(&args.PVariables, "tuples-only", "t", "print rows only", "", "tuples_only=on")
113+
ss(&args.PVariables, "expanded", "x", "turn on expanded table output", "", "expanded=on")
114+
ss(&args.PVariables, "field-separator-zero", "z", "set field separator for unaligned and CSV output to zero byte", "", "fieldsep_zero=on")
115+
ss(&args.PVariables, "record-separator-zero", "0", "set record separator for unaligned and CSV output to zero byte", "", "recordsep_zero=on")
116+
ss(&args.PVariables, "json", "J", "JSON output mode", "", "format=json")
117+
ss(&args.PVariables, "csv", "C", "CSV output mode", "", "format=csv")
118+
ss(&args.PVariables, "vertical", "G", "vertical output mode", "", "format=vertical")
113119
// set bools
114-
flags.VarPF(vs{&args.Variables, []string{"QUIET=on"}, ""}, "quiet", "q", "run quietly (no messages, only query output)").NoOptDefVal = "true"
120+
ss(&args.Variables, "quiet", "q", "run quietly (no messages, only query output)", "", "QUIET=on")
115121
// add config
116122
_ = flags.StringP("config", "", "", "config file")
117123
// manually set --version, see github.com/spf13/cobra/command.go
@@ -322,14 +328,14 @@ func (vs) String() string {
322328

323329
// Type satisfies the [pflag.Value] interface.
324330
func (p vs) Type() string {
325-
if p.IsBoolFlag() {
331+
if p.isBool() {
326332
return "bool"
327333
}
328334
return p.typ
329335
}
330336

331-
// IsBoolFlag satisfies the pflag.boolFlag interface.
332-
func (p vs) IsBoolFlag() bool {
337+
// isBool satisfies the pflag.boolFlag interface.
338+
func (p vs) isBool() bool {
333339
return len(p.vals) != 0 && !strings.Contains(p.vals[0], "%")
334340
}
335341

0 commit comments

Comments
 (0)