@@ -2,6 +2,7 @@ package clicmdflags
22
33import (
44 "fmt"
5+ "strconv"
56 "strings"
67)
78
@@ -25,24 +26,34 @@ func (thisRef *Command) showUsage() {
2526 cmd = cmd .parentCommand
2627 }
2728
29+ var constHorizontalLine = string ('\u2500' )
30+ var constHalfCrossDownLine = string ('\u252C' )
31+ var constCrossLine = string ('\u253C' )
32+ var constVerticalLine = string ('\u2502' )
33+ var constHalfCrossRightLine = string ('\u251C' )
34+ var constHalfCrossUpLine = string ('\u2534' )
35+
2836 fmt .Println ()
29- fmt .Println ("~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~" )
37+ fmt .Println (strings . Repeat ( constHorizontalLine , 94 ) )
3038 fmt .Println (fmt .Sprintf (" %s" , thisRef .Description ))
3139
32- fmt .Println ("~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~" )
33- fmt .Println (fmt .Sprintf (" Usage | %s" , strings .TrimSpace (usageString )))
40+ fmt .Println (strings .Repeat (constHorizontalLine , 10 ) + constHalfCrossDownLine + strings .Repeat (constHorizontalLine , 83 ))
41+ fmt .Println (fmt .Sprintf (" Usage %s %s" , constVerticalLine , strings .TrimSpace (usageString )))
42+ fmt .Println (fmt .Sprintf (" " ) + constVerticalLine )
3443
3544 if len (definedFlags ) > 0 {
36- fmt .Println ("~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~" )
37- fmt .Print (fmt .Sprintf (" Flags |" ))
38- for i , definedFlag := range definedFlags {
45+ fmt .Println (strings .Repeat (constHorizontalLine , 10 ) + constCrossLine + strings .Repeat (constHorizontalLine , 83 ))
46+ fmt .Print (fmt .Sprintf (" Flags " + constVerticalLine ))
47+
48+ pDefinedFlags := paddedFlags (definedFlags )
49+ for i , definedFlag := range pDefinedFlags {
3950 if i == 0 {
40- fmt .Println (fmt .Sprintf (" %s, type=%s, required=%s, default=%s, %s" , flagPatterns [ 0 ] + definedFlag .name , definedFlag .typeName , definedFlag .isRequired , definedFlag .defaultValue , definedFlag .description ))
51+ fmt .Println (fmt .Sprintf (" %s, type=%s, required=%s, default=%s, %s" , definedFlag .name , definedFlag .typeName , definedFlag .isRequired , definedFlag .defaultValue , definedFlag .description ))
4152 } else {
42- fmt .Println (fmt .Sprintf (" | %s, type=%s, required=%s, default=%s, %s" , flagPatterns [ 0 ] + definedFlag .name , definedFlag .typeName , definedFlag .isRequired , definedFlag .defaultValue , definedFlag .description ))
53+ fmt .Println (fmt .Sprintf (" %s %s, type=%s, required=%s, default=%s, %s" , constVerticalLine , definedFlag .name , definedFlag .typeName , definedFlag .isRequired , definedFlag .defaultValue , definedFlag .description ))
4354 }
4455 }
45- fmt .Println (fmt .Sprintf (" |" ) )
56+ fmt .Println (fmt .Sprintf (" " ) + constVerticalLine )
4657 }
4758
4859 if ! areTheseGlobalFlags {
@@ -54,47 +65,124 @@ func (thisRef *Command) showUsage() {
5465 rootCmd = rootCmd .parentCommand
5566 }
5667
57- definedFlags = rootCmd .getDefinedFlags ()
68+ pDefinedFlags := paddedFlags ( rootCmd .getDefinedFlags () )
5869
5970 if len (definedFlags ) > 0 {
60- fmt .Println (" | ~~~~ global flags ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~" )
61- for _ , definedFlag := range definedFlags {
62- fmt .Println (fmt .Sprintf (" | %s, type=%s, required=%s, default=%s, %s" , flagPatterns [ 0 ] + definedFlag .name , definedFlag .typeName , definedFlag .isRequired , definedFlag .defaultValue , definedFlag .description ))
71+ fmt .Println (" " + constHalfCrossRightLine + strings . Repeat ( constHorizontalLine , 10 ) + " global flags " + strings . Repeat ( constHorizontalLine , 59 ) )
72+ for _ , definedFlag := range pDefinedFlags {
73+ fmt .Println (fmt .Sprintf (" %s %s, type=%s, required=%s, default=%s, %s" , constVerticalLine , definedFlag .name , definedFlag .typeName , definedFlag .isRequired , definedFlag .defaultValue , definedFlag .description ))
6374 }
64- fmt .Println (fmt .Sprintf (" |" ) )
75+ fmt .Println (fmt .Sprintf (" " ) + constVerticalLine )
6576 }
6677 }
6778
6879 if len (thisRef .Examples ) > 0 {
69- fmt .Println ("~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~" )
70- fmt .Print (fmt .Sprintf (" Examples |" ))
80+ fmt .Println (strings . Repeat ( constHorizontalLine , 10 ) + constCrossLine + strings . Repeat ( constHorizontalLine , 83 ) )
81+ fmt .Print (fmt .Sprintf (" Examples " + constVerticalLine ))
7182 for i , example := range thisRef .Examples {
7283 if i == 0 {
7384 fmt .Println (fmt .Sprintf (" %s" , example ))
7485 } else {
75- fmt .Println (fmt .Sprintf (" | %s" , example ))
86+ fmt .Println (fmt .Sprintf (" %s %s" , constVerticalLine , example ))
7687 }
7788 }
78- fmt .Println (fmt .Sprintf (" |" ) )
89+ fmt .Println (fmt .Sprintf (" " ) + constVerticalLine )
7990 }
8091
8192 if len (thisRef .subCommands ) > 1 {
82- fmt .Println ("~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~" )
83- fmt .Print (fmt .Sprintf (" Commands |" ))
93+ fmt .Println (strings . Repeat ( constHorizontalLine , 10 ) + constCrossLine + strings . Repeat ( constHorizontalLine , 83 ) )
94+ fmt .Print (fmt .Sprintf (" Commands " + constVerticalLine ))
8495 firstOnePrinted := false
85- for _ , c := range thisRef .subCommands {
86- if c != helpCmd {
96+ pSubCommands := paddedCommands (thisRef .subCommands )
97+ for _ , c := range pSubCommands {
98+ if c .Name != helpCmd .Name {
8799 if ! firstOnePrinted {
88100 fmt .Println (fmt .Sprintf (" %s, %s" , c .Name , c .Description ))
89101 firstOnePrinted = true
90102 } else {
91- fmt .Println (fmt .Sprintf (" | %s, %s" , c .Name , c .Description ))
103+ fmt .Println (fmt .Sprintf (" %s %s, %s" , constVerticalLine , c .Name , c .Description ))
92104 }
93105 }
94106 }
95- fmt .Println (fmt .Sprintf (" |" ) )
107+ fmt .Println (fmt .Sprintf (" " ) + constVerticalLine )
96108 }
97109
98- fmt .Println ("~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~" )
110+ fmt .Println (strings . Repeat ( constHorizontalLine , 10 ) + constHalfCrossUpLine + strings . Repeat ( constHorizontalLine , 83 ) )
99111 fmt .Println ()
100112}
113+
114+ func paddedFlags (input []flag ) []flag {
115+ definedFlagNameMaxLength := 0
116+ definedFlagTypeNameMaxLength := 0
117+ definedFlagIsRequiredMaxLength := 0
118+ definedFlagDefaultValueMaxLength := 0
119+ definedFlagDescriptionMaxLength := 0
120+
121+ for _ , val := range input {
122+ if len (flagPatterns [0 ]+ val .name ) > definedFlagNameMaxLength {
123+ definedFlagNameMaxLength = len (flagPatterns [0 ] + val .name )
124+ }
125+ if len (val .typeName ) > definedFlagTypeNameMaxLength {
126+ definedFlagTypeNameMaxLength = len (val .typeName )
127+ }
128+ if len (val .isRequired ) > definedFlagIsRequiredMaxLength {
129+ definedFlagIsRequiredMaxLength = len (val .isRequired )
130+ }
131+ if len (val .defaultValue ) > definedFlagDefaultValueMaxLength {
132+ definedFlagDefaultValueMaxLength = len (val .defaultValue )
133+ }
134+ if len (val .description ) > definedFlagDescriptionMaxLength {
135+ definedFlagDescriptionMaxLength = len (val .description )
136+ }
137+ }
138+
139+ output := []flag {}
140+ for _ , definedFlag := range input {
141+ definedFlagPaddedName := fmt .Sprintf ("%" + strconv .Itoa (- definedFlagNameMaxLength )+ "s" , flagPatterns [0 ]+ definedFlag .name )
142+ definedFlagPaddedTypeName := fmt .Sprintf ("%" + strconv .Itoa (- definedFlagTypeNameMaxLength )+ "s" , definedFlag .typeName )
143+ definedFlagPaddedIsRequired := fmt .Sprintf ("%" + strconv .Itoa (- definedFlagIsRequiredMaxLength )+ "s" , definedFlag .isRequired )
144+ definedFlagPaddedDefaultValue := fmt .Sprintf ("%" + strconv .Itoa (- definedFlagDefaultValueMaxLength )+ "s" , definedFlag .defaultValue )
145+ definedFlagPaddedDescription := fmt .Sprintf ("%" + strconv .Itoa (- definedFlagDescriptionMaxLength )+ "s" , definedFlag .description )
146+
147+ output = append (output , flag {
148+ name : definedFlagPaddedName ,
149+ typeName : definedFlagPaddedTypeName ,
150+ isRequired : definedFlagPaddedIsRequired ,
151+ defaultValue : definedFlagPaddedDefaultValue ,
152+ description : definedFlagPaddedDescription ,
153+ })
154+ }
155+
156+ return output
157+ }
158+
159+ func paddedCommands (input []* Command ) []Command {
160+ definedCommandNameMaxLength := 0
161+ definedCommandDescriptionMaxLength := 0
162+
163+ for _ , val := range input {
164+ if val .Name != helpCmd .Name {
165+ if len (val .Name ) > definedCommandNameMaxLength {
166+ definedCommandNameMaxLength = len (val .Name )
167+ }
168+ if len (val .Description ) > definedCommandDescriptionMaxLength {
169+ definedCommandDescriptionMaxLength = len (val .Description )
170+ }
171+ }
172+ }
173+
174+ output := []Command {}
175+ for _ , val := range input {
176+ if val .Name != helpCmd .Name {
177+ definedCommandPaddedName := fmt .Sprintf ("%" + strconv .Itoa (- definedCommandNameMaxLength )+ "s" , val .Name )
178+ definedCommandPaddedDescription := fmt .Sprintf ("%" + strconv .Itoa (- definedCommandDescriptionMaxLength )+ "s" , val .Description )
179+
180+ output = append (output , Command {
181+ Name : definedCommandPaddedName ,
182+ Description : definedCommandPaddedDescription ,
183+ })
184+ }
185+ }
186+
187+ return output
188+ }
0 commit comments