github.com/abdfnx/gh-api@v0.0.0-20210414084727-f5432eec23b8/pkg/cmd/root/help_reference.go (about)

     1  package root
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io"
     7  	"strings"
     8  
     9  	"github.com/abdfnx/gh-api/pkg/iostreams"
    10  	"github.com/abdfnx/gh-api/pkg/markdown"
    11  	"github.com/spf13/cobra"
    12  )
    13  
    14  func referenceHelpFn(io *iostreams.IOStreams) func(*cobra.Command, []string) {
    15  	return func(cmd *cobra.Command, args []string) {
    16  		wrapWidth := 0
    17  		style := "notty"
    18  		if io.IsStdoutTTY() {
    19  			wrapWidth = io.TerminalWidth()
    20  			style = markdown.GetStyle(io.DetectTerminalTheme())
    21  		}
    22  
    23  		md, err := markdown.RenderWithWrap(cmd.Long, style, wrapWidth)
    24  		if err != nil {
    25  			fmt.Fprintln(io.ErrOut, err)
    26  			return
    27  		}
    28  
    29  		if !io.IsStdoutTTY() {
    30  			fmt.Fprint(io.Out, dedent(md))
    31  			return
    32  		}
    33  
    34  		_ = io.StartPager()
    35  		defer io.StopPager()
    36  		fmt.Fprint(io.Out, md)
    37  	}
    38  }
    39  
    40  func referenceLong(cmd *cobra.Command) string {
    41  	buf := bytes.NewBufferString("# gh reference\n\n")
    42  	for _, c := range cmd.Commands() {
    43  		if c.Hidden {
    44  			continue
    45  		}
    46  		cmdRef(buf, c, 2)
    47  	}
    48  	return buf.String()
    49  }
    50  
    51  func cmdRef(w io.Writer, cmd *cobra.Command, depth int) {
    52  	// Name + Description
    53  	fmt.Fprintf(w, "%s `%s`\n\n", strings.Repeat("#", depth), cmd.UseLine())
    54  	fmt.Fprintf(w, "%s\n\n", cmd.Short)
    55  
    56  	// Flags
    57  	// TODO: fold in InheritedFlags/PersistentFlags, but omit `--help` due to repetitiveness
    58  	if flagUsages := cmd.Flags().FlagUsages(); flagUsages != "" {
    59  		fmt.Fprintf(w, "```\n%s````\n\n", dedent(flagUsages))
    60  	}
    61  
    62  	// Subcommands
    63  	for _, c := range cmd.Commands() {
    64  		if c.Hidden {
    65  			continue
    66  		}
    67  		cmdRef(w, c, depth+1)
    68  	}
    69  }