@@ -136,16 +136,14 @@ func main() {
136
136
137
137
var buf bytes.Buffer
138
138
switch {
139
- case * jsonFlag && ! * breakdownFlag :
140
- printJSON (out , & buf )
141
139
case * jsonFlag && * breakdownFlag :
142
- printBreakDown (out , & buf )
140
+ printBreakDown (out , & buf , true )
143
141
case * breakdownFlag :
144
- printPercents (root , out , & buf , * countMode )
142
+ printPercents (root , out , & buf , * countMode , false )
145
143
buf .WriteByte ('\n' )
146
- printBreakDown (out , & buf )
144
+ printBreakDown (out , & buf , false )
147
145
default :
148
- printPercents (root , out , & buf , * countMode )
146
+ printPercents (root , out , & buf , * countMode , * jsonFlag )
149
147
}
150
148
151
149
fmt .Print (buf .String ())
@@ -169,29 +167,29 @@ func usage() {
169
167
)
170
168
}
171
169
172
- func printBreakDown (out map [string ][]string , buff * bytes.Buffer ) {
173
- for name , language := range out {
174
- fmt .Fprintln (buff , name )
175
- for _ , file := range language {
176
- fmt .Fprintln (buff , file )
170
+ func printBreakDown (out map [string ][]string , buff * bytes.Buffer , jsonFlag bool ) {
171
+ if jsonFlag {
172
+ json .NewEncoder (buff ).Encode (out )
173
+ } else {
174
+ for name , language := range out {
175
+ fmt .Fprintln (buff , name )
176
+ for _ , file := range language {
177
+ fmt .Fprintln (buff , file )
178
+ }
179
+ fmt .Fprintln (buff )
177
180
}
178
-
179
- fmt .Fprintln (buff )
180
181
}
181
182
}
182
183
183
- func printJSON (out map [string ][]string , buf * bytes.Buffer ) {
184
- json .NewEncoder (buf ).Encode (out )
185
- }
186
-
187
184
// filelistError represents a failed operation that took place across multiple files.
188
185
type filelistError []string
189
186
190
187
func (e filelistError ) Error () string {
191
188
return fmt .Sprintf ("Could not process the following files:\n %s" , strings .Join (e , "\n " ))
192
189
}
193
190
194
- func printPercents (root string , fSummary map [string ][]string , buff * bytes.Buffer , mode string ) {
191
+ func printPercents (root string , fSummary map [string ][]string , buff * bytes.Buffer , mode string , isJSON bool ) {
192
+
195
193
// Select the way we quantify 'amount' of code.
196
194
reducer := fileCountValues
197
195
switch mode {
@@ -225,13 +223,31 @@ func printPercents(root string, fSummary map[string][]string, buff *bytes.Buffer
225
223
return fileValues [keys [i ]] > fileValues [keys [j ]]
226
224
})
227
225
228
- // Calculate and write percentages of each file type.
229
- for _ , fType := range keys {
230
- val := fileValues [fType ]
231
- percent := val / total * 100.0
232
- buff .WriteString (fmt .Sprintf ("%.2f%%\t %s\n " , percent , fType ))
233
- if unreadableFiles != nil {
234
- buff .WriteString (fmt .Sprintf ("\n %s" , unreadableFiles .Error ()))
226
+ if isJSON {
227
+ results := []map [string ]interface {}{} // This will hold our language percentages
228
+
229
+ for _ , fType := range keys {
230
+ val := fileValues [fType ]
231
+ percent := val / total * 100.0
232
+ results = append (results , map [string ]interface {}{
233
+ "percentage" : fmt .Sprintf ("%.2f%%" , percent ),
234
+ "language" : fType ,
235
+ "color" : enry .GetColor (fType ),
236
+ "type" : data .TypeForString (fType ).String (),
237
+ })
238
+ }
239
+ if err := json .NewEncoder (buff ).Encode (results ); err != nil {
240
+ log .Println ("Error encoding JSON:" , err )
241
+ }
242
+ } else {
243
+ // The existing code for plain text format goes here
244
+ for _ , fType := range keys {
245
+ val := fileValues [fType ]
246
+ percent := val / total * 100.0
247
+ buff .WriteString (fmt .Sprintf ("%.2f%%\t %s\n " , percent , fType ))
248
+ if unreadableFiles != nil {
249
+ buff .WriteString (fmt .Sprintf ("\n %s" , unreadableFiles .Error ()))
250
+ }
235
251
}
236
252
}
237
253
}
0 commit comments