72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package root
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"strings"
|
|
|
|
"github.com/cli/cli/v2/pkg/iostreams"
|
|
"github.com/cli/cli/v2/pkg/markdown"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// longPager provides a pager over a commands Long message.
|
|
// It is currently only used for the reference command
|
|
func longPager(io *iostreams.IOStreams) func(*cobra.Command, []string) {
|
|
return func(cmd *cobra.Command, args []string) {
|
|
wrapWidth := 0
|
|
if io.IsStdoutTTY() {
|
|
io.DetectTerminalTheme()
|
|
wrapWidth = io.TerminalWidth()
|
|
}
|
|
|
|
md, err := markdown.Render(cmd.Long,
|
|
markdown.WithTheme(io.TerminalTheme()),
|
|
markdown.WithWrap(wrapWidth))
|
|
if err != nil {
|
|
fmt.Fprintln(io.ErrOut, err)
|
|
return
|
|
}
|
|
|
|
if !io.IsStdoutTTY() {
|
|
fmt.Fprint(io.Out, dedent(md))
|
|
return
|
|
}
|
|
|
|
_ = io.StartPager()
|
|
defer io.StopPager()
|
|
fmt.Fprint(io.Out, md)
|
|
}
|
|
}
|
|
|
|
func stringifyReference(cmd *cobra.Command) string {
|
|
buf := bytes.NewBufferString("# gh reference\n\n")
|
|
for _, c := range cmd.Commands() {
|
|
if c.Hidden {
|
|
continue
|
|
}
|
|
cmdRef(buf, c, 2)
|
|
}
|
|
return buf.String()
|
|
}
|
|
|
|
func cmdRef(w io.Writer, cmd *cobra.Command, depth int) {
|
|
// Name + Description
|
|
fmt.Fprintf(w, "%s `%s`\n\n", strings.Repeat("#", depth), cmd.UseLine())
|
|
fmt.Fprintf(w, "%s\n\n", cmd.Short)
|
|
|
|
// Flags
|
|
// TODO: fold in InheritedFlags/PersistentFlags, but omit `--help` due to repetitiveness
|
|
if flagUsages := cmd.Flags().FlagUsages(); flagUsages != "" {
|
|
fmt.Fprintf(w, "```\n%s````\n\n", dedent(flagUsages))
|
|
}
|
|
|
|
// Subcommands
|
|
for _, c := range cmd.Commands() {
|
|
if c.Hidden {
|
|
continue
|
|
}
|
|
cmdRef(w, c, depth+1)
|
|
}
|
|
}
|