@@ -28,109 +28,86 @@ type Options struct {
2828}
2929
3030func (o * Options ) BuildOptionBanner () string {
31- var banner string
32- banner += color .RedString ("┌" )
33- banner += color .RedString ("[" )
34- banner += color .MagentaString ((* o ).URL )
35- banner += color .RedString ("]\n " )
31+ var sb strings.Builder
32+
33+ sb .WriteString (color .RedString ("┌[" ))
34+ sb .WriteString (color .MagentaString ((* o ).URL ))
35+ sb .WriteString (color .RedString ("]\n " ))
36+
3637 t := reflect .TypeOf (* o )
38+ v := reflect .ValueOf (* o )
3739 for i := 0 ; i < t .NumField (); i ++ {
38-
3940 field := t .Field (i )
4041 name := field .Tag .Get ("name" )
4142 if name == "url" {
4243 continue
4344 }
44- value := reflect .ValueOf (* o ).Field (i ).Interface ()
45+
46+ value := v .Field (i ).Interface ()
4547 if value == nil || value == "" || value == false {
46- banner += color .RedString ("│" )
47- banner += color .BlueString (name + ": " )
48- banner += color .CyanString ("not set" )
49- banner += "\n "
48+ sb .WriteString (color .RedString ("│" ))
49+ sb .WriteString (color .BlueString (name + ": " ))
50+ sb .WriteString (color .CyanString ("not set\n " ))
5051 continue
5152 }
53+ sb .WriteString (color .RedString ("│" ))
54+ sb .WriteString (color .BlueString (name + ": " ))
5255
53- typeof := reflect .TypeOf (value )
54- if typeof .Kind () == reflect .Slice {
55- s := reflect .ValueOf (value )
56- if s .Len () == 0 {
57- banner += color .RedString ("│" )
58- banner += color .BlueString (name + ": " )
59- banner += color .CyanString ("not set" )
60- banner += "\n "
61- continue
56+ switch value := value .(type ) {
57+ case []string :
58+ if len (value ) == 0 {
59+ sb .WriteString (color .CyanString ("not set" ))
60+ } else {
61+ sb .WriteString (color .CyanString ("\n " ))
62+ for _ , s := range value {
63+ sb .WriteString (color .RedString ("│" ))
64+ sb .WriteString (color .CyanString (" %s" , s ))
65+ sb .WriteString ("\n " )
66+ }
6267 }
63- banner += color .RedString ("│" )
64- banner += color .BlueString (name + ": " )
65-
66- // check the type of the slice
67- typeOfIndex := s .Index (0 ).Kind ()
68- if typeOfIndex == reflect .Int {
69- for i := 0 ; i < s .Len (); i ++ {
70- if i == s .Len ()- 1 {
71- banner += color .CyanString (" %d" , s .Index (i ).Interface ().(int ))
72- continue
68+ case []int :
69+ if len (value ) == 0 {
70+ sb .WriteString (color .CyanString ("not set" ))
71+ } else {
72+ for i , v := range value {
73+ if i == 0 {
74+ sb .WriteString (color .CyanString ("%d" , v ))
75+ } else {
76+ sb .WriteString (color .CyanString (", %d" , v ))
7377 }
74-
75- banner += color .CyanString (" %d" , s .Index (i ).Interface ().(int ))
76- banner += color .CyanString ("," )
77- }
78- } else if typeOfIndex == reflect .String {
79- for i := 0 ; i < s .Len (); i ++ {
80- banner += color .CyanString ("\n " )
81- banner += color .RedString ("│" )
82- banner += color .CyanString (" %s" , s .Index (i ).Interface ().(string ))
8378 }
8479 }
85- banner += "\n "
86-
87- } else if typeof .Kind () == reflect .String {
88-
89- banner += color .RedString ("│" )
90- banner += color .BlueString (name + ": " )
91- banner += color .CyanString ("%s" , value .(string ))
92- banner += "\n "
93- } else if typeof .Kind () == reflect .Int {
94- banner += color .RedString ("│" )
95- banner += color .BlueString (name + ": " )
96- banner += color .CyanString ("%d" , value .(int ))
97- banner += "\n "
98- } else if typeof .Kind () == reflect .Bool {
99- banner += color .RedString ("│" )
100- banner += color .BlueString (name + ": " )
101- banner += color .CyanString ("%t" , value .(bool ))
102- banner += "\n "
103- } else if typeof .Kind () == reflect .Map {
104- if len (value .(map [string ]string )) == 0 {
105- banner += color .RedString ("│" )
106- banner += color .BlueString (name + ": " )
107- banner += color .CyanString ("not set" )
108- banner += "\n "
109- continue
110- }
111- banner += color .RedString ("│" )
112- banner += color .BlueString (name + ": " )
113- banner += color .CyanString ("\n " )
114- for k , v := range value .(map [string ]string ) {
115- banner += color .RedString ("│" )
116- banner += color .CyanString (" %s: %s" , k , v )
117- banner += "\n "
80+ case map [string ]string :
81+ if len (value ) == 0 {
82+ sb .WriteString (color .CyanString ("not set" ))
83+ } else {
84+ sb .WriteString (color .CyanString ("\n " ))
85+ for k , v := range value {
86+ sb .WriteString (color .RedString ("│" ))
87+ sb .WriteString (color .CyanString (" %s: %s" , k , v ))
88+ sb .WriteString ("\n " )
89+ }
11890 }
119- } else {
120-
121- banner += color .RedString ("│" )
122- banner += color .BlueString (name + ": " )
91+ case string :
92+ sb .WriteString (color .CyanString ("%s" , value ))
93+ case int :
94+ sb .WriteString (color .CyanString ("%d" , value ))
95+ case bool :
96+ sb .WriteString (color .CyanString ("%t" , value ))
97+ default :
12398 if fmt .Sprintf ("%v" , value ) == "<nil>" {
124- banner += color .CyanString ("not set" )
99+ sb . WriteString ( color .CyanString ("not set" ) )
125100 } else {
126- banner += color .CyanString ("%v" , value )
101+ sb . WriteString ( color .CyanString ("%v" , value ) )
127102 }
128- banner += "\n "
129103 }
130104
105+ sb .WriteString ("\n " )
131106 }
132- banner += color .RedString ("└" )
133- return banner
107+
108+ sb .WriteString (color .RedString ("└" ))
109+
110+ return sb .String ()
134111}
135112
136113func (o * Options ) PrintBanner () {
@@ -172,10 +149,7 @@ func ValidateThenBuildOption(cmd *cobra.Command) (*Options, error) {
172149 return nil , err
173150 }
174151 // regexMap, err := cmd.Flags().GetStringToString("regexes")
175- regexMap , err := cmd .Flags ().Lookup ("regexes" ).Value .(* RegexFlag ).Value (), nil
176- if err != nil {
177- return nil , err
178- }
152+ regexMap := cmd .Flags ().Lookup ("regexes" ).Value .(* RegexFlag ).Value ()
179153
180154 excludedStatus , err := cmd .Flags ().GetIntSlice ("exclude-code" )
181155 if err != nil {
0 commit comments