markdown docs: add section 'Available commands'

This commit is contained in:
Andreas Deininger 2023-06-30 23:15:42 +02:00
parent dcb405a939
commit ddea02ea6b
3 changed files with 34 additions and 1 deletions

View file

@ -70,6 +70,24 @@ func GenMarkdownCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string)
buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.UseLine())) buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.UseLine()))
} }
if HasSubCommand(cmd) {
buf.WriteString("### Available commands\n\n")
children := cmd.Commands()
sort.Sort(byName(children))
for _, child := range children {
if !child.IsAvailableCommand() || child.IsAdditionalHelpTopicCommand() {
continue
}
cname := name + " " + child.Name()
link := cname + ".md"
link = strings.ReplaceAll(link, " ", "_")
buf.WriteString(fmt.Sprintf("* [%s](%s)\t - %s\n", child.Name(), linkHandler(link), child.Short))
}
buf.WriteString("\n")
}
if len(cmd.Example) > 0 { if len(cmd.Example) > 0 {
buf.WriteString("### Examples\n\n") buf.WriteString("### Examples\n\n")
buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.Example)) buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.Example))

View file

@ -39,11 +39,12 @@ func TestGenMdDoc(t *testing.T) {
checkStringContains(t, output, rootCmd.Short) checkStringContains(t, output, rootCmd.Short)
checkStringContains(t, output, echoSubCmd.Short) checkStringContains(t, output, echoSubCmd.Short)
checkStringOmits(t, output, deprecatedCmd.Short) checkStringOmits(t, output, deprecatedCmd.Short)
checkStringContains(t, output, "Available commands")
checkStringContains(t, output, "Options inherited from parent commands") checkStringContains(t, output, "Options inherited from parent commands")
} }
func TestGenMdDocWithNoLongOrSynopsis(t *testing.T) { func TestGenMdDocWithNoLongOrSynopsis(t *testing.T) {
// We generate on subcommand so we have both subcommands and parents. // Use a simple subcommand without long and without synopsis, no own subcommands.
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
if err := GenMarkdown(dummyCmd, buf); err != nil { if err := GenMarkdown(dummyCmd, buf); err != nil {
t.Fatal(err) t.Fatal(err)
@ -76,6 +77,7 @@ func TestGenMdNoHiddenParents(t *testing.T) {
checkStringContains(t, output, rootCmd.Short) checkStringContains(t, output, rootCmd.Short)
checkStringContains(t, output, echoSubCmd.Short) checkStringContains(t, output, echoSubCmd.Short)
checkStringOmits(t, output, deprecatedCmd.Short) checkStringOmits(t, output, deprecatedCmd.Short)
checkStringContains(t, output, "Available commands")
checkStringOmits(t, output, "Options inherited from parent commands") checkStringOmits(t, output, "Options inherited from parent commands")
} }

View file

@ -36,6 +36,19 @@ func hasSeeAlso(cmd *cobra.Command) bool {
return false return false
} }
// Test to see if a given command has one or more subcommands
// Basically this is a test for a subcommand which is both not
// deprecated and not the autogenerated help command.
func HasSubCommand(cmd *cobra.Command) bool {
for _, c := range cmd.Commands() {
if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {
continue
}
return true
}
return false
}
// Temporary workaround for yaml lib generating incorrect yaml with long strings // Temporary workaround for yaml lib generating incorrect yaml with long strings
// that do not contain \n. // that do not contain \n.
func forceMultiLine(s string) string { func forceMultiLine(s string) string {