Skip to content

Commit

Permalink
Update examples
Browse files Browse the repository at this point in the history
refactor: Simplify subcmd flag naming

Helps with manually verifying that the correct Usage func was called.
  • Loading branch information
rafaelespinoza committed May 16, 2021
1 parent ee1c366 commit 0583fc8
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 45 deletions.
96 changes: 55 additions & 41 deletions examples/full/bar.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ var Bar = func(cmdname string) alf.Directive {
del := &alf.Delegator{Description: "example delegator with subcommands"}

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

// set up help text.
Expand All @@ -45,8 +45,11 @@ Subcommands:
These will have their own set of flags. Put them after the subcommand.
%v`, _Bin, strings.Join(del.DescribeSubcommands(), "\n\t"))
fmt.Printf("\n\nFlags:\n\n")
%v
Flags:
`, parentFlags.Name(), strings.Join(del.DescribeSubcommands(), "\n\t"))
parentFlags.PrintDefaults()
}
del.Flags = parentFlags // share flag data from parent to child command.
Expand All @@ -58,7 +61,7 @@ Subcommands:
// Setup can be used to generate documentation and to define an
// independent flag set for the subcommand.
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
name := cmdname + " cities"
name := parentFlags.Name() + " cities"
inFlags.Init(name, flag.ExitOnError)
inFlags.BoolVar(&barArgs.Bravo, "bravo", false, "show a city with a B")
inFlags.StringVar(&barArgs.Charlie, "charlie", "parker", "customize charlie")
Expand All @@ -67,12 +70,15 @@ Subcommands:
inFlags.Usage = func() {
fmt.Fprintf(inFlags.Output(), `Usage:
%s %s [flags]
%s [flags]
Description:
Output a city name. Here are some flags.`, _Bin, name)
fmt.Printf("\n\nFlags:\n\n")
Output a city name. Here are some flags.
Flags:
`, inFlags.Name())
inFlags.PrintDefaults()
}
return &inFlags
Expand Down Expand Up @@ -107,19 +113,22 @@ Description:
"oof": &alf.Command{
Description: "maybe error",
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
name := cmdname + " oof"
name := parentFlags.Name() + " oof"
inFlags.Init(name, flag.ExitOnError)
inFlags.BoolVar(&barArgs.Bravo, "bravo", false, "return an error if true")
inFlags.StringVar(&barArgs.Charlie, "chuck", "berry", "an alternative charlie")
inFlags.Usage = func() {
fmt.Fprintf(inFlags.Output(), `Usage:
%s %s [flags]
%s [flags]
Description:
Return an error if bravo is true, otherwise be ok.`, _Bin, name)
fmt.Printf("\n\nFlags:\n\n")
Return an error if bravo is true, otherwise be ok.
Flags:
`, inFlags.Name())
inFlags.PrintDefaults()
}
return &inFlags
Expand All @@ -128,7 +137,7 @@ Description:
if barArgs.Bravo {
return fmt.Errorf("demo force show usage%w", alf.ErrShowUsage)
}
fmt.Printf("your alternative charlie %q is %d years old", barArgs.Charlie, barArgs.Alpha)
fmt.Printf("your alternative charlie %q is %d years old\n", barArgs.Charlie, barArgs.Alpha)
return nil
},
},
Expand All @@ -139,34 +148,8 @@ Description:
// - and a parent of some child commands
nested := alf.Delegator{
Description: "a subcommand (with its own commands) of a subcommand",
Subs: map[string]alf.Directive{
"alfa": &alf.Command{
Description: "terminal command of a nested subcommand",
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
inFlags.Init("nested alfa", flag.ContinueOnError)
inFlags.Usage = func() { fmt.Println("help for nested.alfa") }
return &inFlags
},
Run: func(ctx context.Context) error {
fmt.Println("called bar.moar.alfa")
return nil
},
},
"bravo": &alf.Command{
Description: "terminal command of a nested subcommand, (returns error)",
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
inFlags.Init("nested bravo", flag.ContinueOnError)
inFlags.Usage = func() { fmt.Println("help for nested.bravo") }
return &inFlags
},
Run: func(ctx context.Context) error {
fmt.Println("called bar.moar.bravo")
return errors.New("demo error")
},
},
},
Flags: flag.NewFlagSet(parentFlags.Name()+" nested", flag.ContinueOnError),
}
nested.Flags = flag.NewFlagSet("nested", flag.ContinueOnError)
nested.Flags.Usage = func() {
fmt.Fprintf(nested.Flags.Output(), `Usage:
Expand All @@ -178,10 +161,41 @@ Description:
Subcommands:
%v`, _Bin, strings.Join(nested.DescribeSubcommands(), "\n\t"))
fmt.Printf("\n\nFlags:\n\n")
%v
Flags:
`, nested.Flags.Name(), strings.Join(nested.DescribeSubcommands(), "\n\t"))
nested.Flags.PrintDefaults()
}
nested.Subs = map[string]alf.Directive{
"alfa": &alf.Command{
Description: "terminal command of a nested subcommand",
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
name := nested.Flags.Name() + " alfa"
inFlags.Init(name, flag.ContinueOnError)
inFlags.Usage = func() { fmt.Fprintf(inFlags.Output(), "help for %s\n", inFlags.Name()) }
return &inFlags
},
Run: func(ctx context.Context) error {
fmt.Println("called bar.nested.alfa")
return nil
},
},
"bravo": &alf.Command{
Description: "terminal command of a nested subcommand, (returns error)",
Setup: func(inFlags flag.FlagSet) *flag.FlagSet {
name := nested.Flags.Name() + " bravo"
inFlags.Init(name, flag.ContinueOnError)
inFlags.Usage = func() { fmt.Fprintf(inFlags.Output(), "help for %s\n", inFlags.Name()) }
return &inFlags
},
Run: func(ctx context.Context) error {
fmt.Println("called bar.nested.bravo")
return errors.New("demo error")
},
},
}
del.Subs["nested"] = &nested

return del
Expand Down
8 changes: 6 additions & 2 deletions examples/full/foo.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,12 @@ var Foo alf.Directive = &alf.Command{
Description:
Example, repeat a string. Must be <= %d`, _Bin, maxDelta)
fmt.Printf("\n\nFlags:\n\n")
Example, repeat a string. Must be <= %d
Flags:
`,
name, maxDelta)
flags.PrintDefaults()
}
return flags
Expand Down
7 changes: 5 additions & 2 deletions examples/full/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,13 @@ Subcommands:
Examples:
%s [subcommand] -h`,
%s [subcommand] -h
Flags:
`,
_Bin, _Bin, pkg, strings.Join(Root.DescribeSubcommands(), "\n\t"), _Bin)

fmt.Printf("\n\nFlags:\n\n")
del.Flags.PrintDefaults()
}

Expand Down

0 comments on commit 0583fc8

Please sign in to comment.