Skip to content

Commit 0583fc8

Browse files
Update examples
refactor: Simplify subcmd flag naming Helps with manually verifying that the correct Usage func was called.
1 parent ee1c366 commit 0583fc8

File tree

3 files changed

+66
-45
lines changed

3 files changed

+66
-45
lines changed

examples/full/bar.go

Lines changed: 55 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ var Bar = func(cmdname string) alf.Directive {
2828
del := &alf.Delegator{Description: "example delegator with subcommands"}
2929

3030
// define flags for this parent command.
31-
parentFlags := flag.NewFlagSet(cmdname, flag.ExitOnError)
31+
parentFlags := flag.NewFlagSet(_Bin+" "+cmdname, flag.ExitOnError)
3232
parentFlags.IntVar(&barArgs.Alpha, "alpha", 42, "a number")
3333

3434
// set up help text.
@@ -45,8 +45,11 @@ Subcommands:
4545
4646
These will have their own set of flags. Put them after the subcommand.
4747
48-
%v`, _Bin, strings.Join(del.DescribeSubcommands(), "\n\t"))
49-
fmt.Printf("\n\nFlags:\n\n")
48+
%v
49+
50+
Flags:
51+
52+
`, parentFlags.Name(), strings.Join(del.DescribeSubcommands(), "\n\t"))
5053
parentFlags.PrintDefaults()
5154
}
5255
del.Flags = parentFlags // share flag data from parent to child command.
@@ -58,7 +61,7 @@ Subcommands:
5861
// Setup can be used to generate documentation and to define an
5962
// independent flag set for the subcommand.
6063
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
61-
name := cmdname + " cities"
64+
name := parentFlags.Name() + " cities"
6265
inFlags.Init(name, flag.ExitOnError)
6366
inFlags.BoolVar(&barArgs.Bravo, "bravo", false, "show a city with a B")
6467
inFlags.StringVar(&barArgs.Charlie, "charlie", "parker", "customize charlie")
@@ -67,12 +70,15 @@ Subcommands:
6770
inFlags.Usage = func() {
6871
fmt.Fprintf(inFlags.Output(), `Usage:
6972
70-
%s %s [flags]
73+
%s [flags]
7174
7275
Description:
7376
74-
Output a city name. Here are some flags.`, _Bin, name)
75-
fmt.Printf("\n\nFlags:\n\n")
77+
Output a city name. Here are some flags.
78+
79+
Flags:
80+
81+
`, inFlags.Name())
7682
inFlags.PrintDefaults()
7783
}
7884
return &inFlags
@@ -107,19 +113,22 @@ Description:
107113
"oof": &alf.Command{
108114
Description: "maybe error",
109115
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
110-
name := cmdname + " oof"
116+
name := parentFlags.Name() + " oof"
111117
inFlags.Init(name, flag.ExitOnError)
112118
inFlags.BoolVar(&barArgs.Bravo, "bravo", false, "return an error if true")
113119
inFlags.StringVar(&barArgs.Charlie, "chuck", "berry", "an alternative charlie")
114120
inFlags.Usage = func() {
115121
fmt.Fprintf(inFlags.Output(), `Usage:
116122
117-
%s %s [flags]
123+
%s [flags]
118124
119125
Description:
120126
121-
Return an error if bravo is true, otherwise be ok.`, _Bin, name)
122-
fmt.Printf("\n\nFlags:\n\n")
127+
Return an error if bravo is true, otherwise be ok.
128+
129+
Flags:
130+
131+
`, inFlags.Name())
123132
inFlags.PrintDefaults()
124133
}
125134
return &inFlags
@@ -128,7 +137,7 @@ Description:
128137
if barArgs.Bravo {
129138
return fmt.Errorf("demo force show usage%w", alf.ErrShowUsage)
130139
}
131-
fmt.Printf("your alternative charlie %q is %d years old", barArgs.Charlie, barArgs.Alpha)
140+
fmt.Printf("your alternative charlie %q is %d years old\n", barArgs.Charlie, barArgs.Alpha)
132141
return nil
133142
},
134143
},
@@ -139,34 +148,8 @@ Description:
139148
// - and a parent of some child commands
140149
nested := alf.Delegator{
141150
Description: "a subcommand (with its own commands) of a subcommand",
142-
Subs: map[string]alf.Directive{
143-
"alfa": &alf.Command{
144-
Description: "terminal command of a nested subcommand",
145-
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
146-
inFlags.Init("nested alfa", flag.ContinueOnError)
147-
inFlags.Usage = func() { fmt.Println("help for nested.alfa") }
148-
return &inFlags
149-
},
150-
Run: func(ctx context.Context) error {
151-
fmt.Println("called bar.moar.alfa")
152-
return nil
153-
},
154-
},
155-
"bravo": &alf.Command{
156-
Description: "terminal command of a nested subcommand, (returns error)",
157-
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
158-
inFlags.Init("nested bravo", flag.ContinueOnError)
159-
inFlags.Usage = func() { fmt.Println("help for nested.bravo") }
160-
return &inFlags
161-
},
162-
Run: func(ctx context.Context) error {
163-
fmt.Println("called bar.moar.bravo")
164-
return errors.New("demo error")
165-
},
166-
},
167-
},
151+
Flags: flag.NewFlagSet(parentFlags.Name()+" nested", flag.ContinueOnError),
168152
}
169-
nested.Flags = flag.NewFlagSet("nested", flag.ContinueOnError)
170153
nested.Flags.Usage = func() {
171154
fmt.Fprintf(nested.Flags.Output(), `Usage:
172155
@@ -178,10 +161,41 @@ Description:
178161
179162
Subcommands:
180163
181-
%v`, _Bin, strings.Join(nested.DescribeSubcommands(), "\n\t"))
182-
fmt.Printf("\n\nFlags:\n\n")
164+
%v
165+
166+
Flags:
167+
168+
`, nested.Flags.Name(), strings.Join(nested.DescribeSubcommands(), "\n\t"))
183169
nested.Flags.PrintDefaults()
184170
}
171+
nested.Subs = map[string]alf.Directive{
172+
"alfa": &alf.Command{
173+
Description: "terminal command of a nested subcommand",
174+
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
175+
name := nested.Flags.Name() + " alfa"
176+
inFlags.Init(name, flag.ContinueOnError)
177+
inFlags.Usage = func() { fmt.Fprintf(inFlags.Output(), "help for %s\n", inFlags.Name()) }
178+
return &inFlags
179+
},
180+
Run: func(ctx context.Context) error {
181+
fmt.Println("called bar.nested.alfa")
182+
return nil
183+
},
184+
},
185+
"bravo": &alf.Command{
186+
Description: "terminal command of a nested subcommand, (returns error)",
187+
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
188+
name := nested.Flags.Name() + " bravo"
189+
inFlags.Init(name, flag.ContinueOnError)
190+
inFlags.Usage = func() { fmt.Fprintf(inFlags.Output(), "help for %s\n", inFlags.Name()) }
191+
return &inFlags
192+
},
193+
Run: func(ctx context.Context) error {
194+
fmt.Println("called bar.nested.bravo")
195+
return errors.New("demo error")
196+
},
197+
},
198+
}
185199
del.Subs["nested"] = &nested
186200

187201
return del

examples/full/foo.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,12 @@ var Foo alf.Directive = &alf.Command{
3232
3333
Description:
3434
35-
Example, repeat a string. Must be <= %d`, _Bin, maxDelta)
36-
fmt.Printf("\n\nFlags:\n\n")
35+
Example, repeat a string. Must be <= %d
36+
37+
Flags:
38+
39+
`,
40+
name, maxDelta)
3741
flags.PrintDefaults()
3842
}
3943
return flags

examples/full/main.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,13 @@ Subcommands:
5555
5656
Examples:
5757
58-
%s [subcommand] -h`,
58+
%s [subcommand] -h
59+
60+
Flags:
61+
62+
`,
5963
_Bin, _Bin, pkg, strings.Join(Root.DescribeSubcommands(), "\n\t"), _Bin)
6064

61-
fmt.Printf("\n\nFlags:\n\n")
6265
del.Flags.PrintDefaults()
6366
}
6467

0 commit comments

Comments
 (0)