github.com/fnando/bolt@v0.0.4-0.20231107225351-5241e4d187b8/internal/commands/flag.go (about)

     1  package commands
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"reflect"
     7  	"strings"
     8  
     9  	"golang.org/x/exp/slices"
    10  )
    11  
    12  func getFlagsUsage(flags *flag.FlagSet) (out string) {
    13  	flags.VisitAll(func(flag *flag.Flag) {
    14  		if flag.Usage == "" {
    15  			return
    16  		}
    17  
    18  		defaultValue := ""
    19  		ignoreDefaultValue := slices.Contains([]string{"version", "help"}, flag.Name)
    20  
    21  		if flag.DefValue != "" && !ignoreDefaultValue {
    22  			defaultValue = fmt.Sprintf(" (default to %v)", flag.DefValue)
    23  		}
    24  
    25  		var flagStr string = "--" + flag.Name
    26  
    27  		if reflect.TypeOf(flag.Value).String() != "*flag.boolValue" {
    28  			parts := strings.Split(strings.ToUpper(flag.Name), "-")
    29  			flagStr += "=" + parts[len(parts)-1]
    30  		}
    31  
    32  		out += fmt.Sprintf("    %-35s%s%s\n", flagStr, flag.Usage, defaultValue)
    33  	})
    34  
    35  	return out
    36  }