github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/common/internal/help_display.go (about) 1 package internal 2 3 import ( 4 "fmt" 5 "sort" 6 "strings" 7 8 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/sharedaction" 9 "github.com/LukasHeimann/cloudfoundrycli/v8/util/configv3" 10 "github.com/LukasHeimann/cloudfoundrycli/v8/util/sorting" 11 ) 12 13 type HelpCategory struct { 14 CategoryName string 15 CommandList [][]string 16 } 17 18 func ConvertPluginToCommandInfo(plugin configv3.PluginCommand) sharedaction.CommandInfo { 19 commandInfo := sharedaction.CommandInfo{ 20 Name: plugin.Name, 21 Description: plugin.HelpText, 22 Alias: plugin.Alias, 23 Usage: plugin.UsageDetails.Usage, 24 Flags: []sharedaction.CommandFlag{}, 25 } 26 27 flagNames := make([]string, 0, len(plugin.UsageDetails.Options)) 28 for flag := range plugin.UsageDetails.Options { 29 flagNames = append(flagNames, flag) 30 } 31 sort.Slice(flagNames, sorting.SortAlphabeticFunc(flagNames)) 32 33 for _, flag := range flagNames { 34 description := plugin.UsageDetails.Options[flag] 35 strippedFlag := strings.Trim(flag, "-") 36 switch len(flag) { 37 case 1: 38 commandInfo.Flags = append(commandInfo.Flags, 39 sharedaction.CommandFlag{ 40 Short: strippedFlag, 41 Description: description, 42 }) 43 default: 44 commandInfo.Flags = append(commandInfo.Flags, 45 sharedaction.CommandFlag{ 46 Long: strippedFlag, 47 Description: description, 48 }) 49 } 50 } 51 52 return commandInfo 53 } 54 55 func LongestCommandName(cmds map[string]sharedaction.CommandInfo, pluginCmds []configv3.PluginCommand) int { 56 longest := 0 57 for name := range cmds { 58 if len(name) > longest { 59 longest = len(name) 60 } 61 } 62 for _, command := range pluginCmds { 63 if len(command.Name) > longest { 64 longest = len(command.Name) 65 } 66 } 67 return longest 68 } 69 70 func LongestFlagWidth(flags []sharedaction.CommandFlag) int { 71 longest := 0 72 for _, flag := range flags { 73 name := FlagWithHyphens(flag) 74 75 if len(name) > longest { 76 longest = len(name) 77 } 78 } 79 return longest 80 } 81 82 func FlagWithHyphens(flag sharedaction.CommandFlag) string { 83 switch { 84 case flag.Short != "" && flag.Long != "": 85 return fmt.Sprintf("--%s, -%s", flag.Long, flag.Short) 86 case flag.Short != "": 87 return "-" + flag.Short 88 default: 89 return "--" + flag.Long 90 } 91 }