Skip to content

Commit d1f2fdd

Browse files
committed
Move help command templates
1 parent 60254b2 commit d1f2fdd

File tree

3 files changed

+115
-24
lines changed

3 files changed

+115
-24
lines changed

cmd/help.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package cmd
2+
3+
import "github.com/spf13/cobra"
4+
5+
const usageTemplate = `Usage: {{if .HasParent}}{{.UseLine}}{{else}}lstk [options] [command]{{end}}{{if not .HasParent}}
6+
7+
LSTK - LocalStack command-line interface{{end}}{{if gt (len .Aliases) 0}}
8+
9+
Aliases:
10+
{{.NameAndAliases}}{{end}}{{if .HasExample}}
11+
12+
Examples:
13+
{{.Example}}{{end}}{{if .HasAvailableSubCommands}}{{$cmds := .Commands}}{{if eq (len .Groups) 0}}
14+
15+
Commands:{{range $cmds}}{{if (or .IsAvailableCommand (eq .Name "help"))}}
16+
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{else}}{{range $group := .Groups}}
17+
18+
{{.Title}}{{range $cmds}}{{if (and (eq .GroupID $group.ID) (or .IsAvailableCommand (eq .Name "help")))}}
19+
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if not .AllChildCommandsHaveGroup}}
20+
21+
Additional Commands:{{range $cmds}}{{if (and (eq .GroupID "") (or .IsAvailableCommand (eq .Name "help")))}}
22+
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}
23+
24+
Options:
25+
{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}
26+
27+
Global Options:
28+
{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}
29+
30+
Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}
31+
{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}`
32+
33+
const helpTemplate = `{{if not .HasParent}}{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}{{else}}{{with (or .Long .Short)}}{{. | trimTrailingWhitespaces}}
34+
35+
{{end}}{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}{{end}}
36+
`
37+
38+
func configureHelp(cmd *cobra.Command) {
39+
cmd.InitDefaultHelpFlag()
40+
cmd.Flags().Lookup("help").Usage = "Show help"
41+
cmd.SetUsageTemplate(usageTemplate)
42+
cmd.SetHelpTemplate(helpTemplate)
43+
}

cmd/help_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package cmd
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"strings"
7+
"testing"
8+
)
9+
10+
func executeWithArgs(t *testing.T, args ...string) (string, error) {
11+
t.Helper()
12+
13+
origOut := rootCmd.OutOrStdout()
14+
origErr := rootCmd.ErrOrStderr()
15+
16+
buf := new(bytes.Buffer)
17+
rootCmd.SetOut(buf)
18+
rootCmd.SetErr(buf)
19+
rootCmd.SetArgs(args)
20+
21+
err := rootCmd.ExecuteContext(context.Background())
22+
out := buf.String()
23+
24+
rootCmd.SetArgs(nil)
25+
rootCmd.SetOut(origOut)
26+
rootCmd.SetErr(origErr)
27+
28+
return out, err
29+
}
30+
31+
func TestRootHelpOutputTemplate(t *testing.T) {
32+
out, err := executeWithArgs(t, "--help")
33+
if err != nil {
34+
t.Fatalf("expected no error, got %v", err)
35+
}
36+
37+
assertContains(t, out, "Usage:")
38+
assertContains(t, out, "lstk [options] [command]")
39+
assertContains(t, out, "LSTK - LocalStack command-line interface")
40+
assertContains(t, out, "Commands:")
41+
assertContains(t, out, "Options:")
42+
assertNotContains(t, out, "Available Commands:")
43+
assertNotContains(t, out, `Use "lstk [command] --help" for more information about a command.`)
44+
}
45+
46+
func TestSubcommandHelpUsesSubcommandUsageLine(t *testing.T) {
47+
out, err := executeWithArgs(t, "start", "--help")
48+
if err != nil {
49+
t.Fatalf("expected no error, got %v", err)
50+
}
51+
52+
assertContains(t, out, "Start emulator and services.")
53+
assertContains(t, out, "Usage:")
54+
assertContains(t, out, "lstk start")
55+
assertContains(t, out, "Options:")
56+
assertNotContains(t, out, "LSTK - LocalStack command-line interface")
57+
}
58+
59+
func assertContains(t *testing.T, s, want string) {
60+
t.Helper()
61+
if !strings.Contains(s, want) {
62+
t.Fatalf("expected output to contain %q\noutput:\n%s", want, s)
63+
}
64+
}
65+
66+
func assertNotContains(t *testing.T, s, want string) {
67+
t.Helper()
68+
if strings.Contains(s, want) {
69+
t.Fatalf("expected output not to contain %q\noutput:\n%s", want, s)
70+
}
71+
}

cmd/root.go

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"fmt"
66
"os"
7-
"strings"
87

98
"github.com/localstack/lstk/internal/api"
109
"github.com/localstack/lstk/internal/config"
@@ -40,32 +39,10 @@ func init() {
4039
rootCmd.Version = version.Version()
4140
rootCmd.SetVersionTemplate(versionLine() + "\n")
4241

43-
rootCmd.InitDefaultHelpFlag()
44-
rootCmd.Flags().Lookup("help").Usage = "Show help"
42+
configureHelp(rootCmd)
4543

4644
rootCmd.InitDefaultVersionFlag()
4745
rootCmd.Flags().Lookup("version").Usage = "Show version"
48-
49-
usageTemplate := rootCmd.UsageTemplate()
50-
usageTemplate = strings.Replace(usageTemplate, "Available Commands:", "Commands:", 1)
51-
usageTemplate = strings.Replace(usageTemplate, "Flags:", "Options:", 1)
52-
usageTemplate = strings.Replace(
53-
usageTemplate,
54-
`Usage:{{if .Runnable}}
55-
{{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}
56-
{{.CommandPath}} [command]{{end}}`,
57-
`Usage: {{if not .HasParent}}lstk [options] [command]{{else}}{{.UseLine}}{{end}}{{if not .HasParent}}
58-
59-
LSTK - LocalStack command-line interface{{end}}`,
60-
1,
61-
)
62-
usageTemplate = strings.ReplaceAll(usageTemplate, `Use "{{.CommandPath}} [command] --help" for more information about a command.`, "")
63-
usageTemplate = strings.TrimRight(usageTemplate, "\n")
64-
rootCmd.SetUsageTemplate(usageTemplate)
65-
66-
rootCmd.SetHelpTemplate(`{{if not .HasParent}}{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}{{else}}{{with (or .Long .Short)}}{{. | trimTrailingWhitespaces}}
67-
68-
{{end}}{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}{{end}}`)
6946
rootCmd.AddCommand(startCmd)
7047
}
7148

0 commit comments

Comments
 (0)