@@ -8,12 +8,14 @@ import (
8
8
"log"
9
9
"os"
10
10
"runtime"
11
+ "sort"
11
12
"strings"
12
13
"time"
13
14
14
15
"github.com/fatih/color"
15
16
"github.com/spf13/cobra"
16
17
"github.com/spf13/pflag"
18
+ "golang.org/x/exp/maps"
17
19
18
20
"github.com/golangci/golangci-lint/pkg/config"
19
21
"github.com/golangci/golangci-lint/pkg/exitcodes"
@@ -125,6 +127,7 @@ func initFlagSet(fs *pflag.FlagSet, cfg *config.Config, m *lintersdb.Manager, is
125
127
const allowSerialDesc = "Allow multiple golangci-lint instances running, but serialize them around a lock. " +
126
128
"If false (default) - golangci-lint exits with an error if it fails to acquire file lock on start."
127
129
fs .BoolVar (& rc .AllowSerialRunners , "allow-serial-runners" , false , wh (allowSerialDesc ))
130
+ fs .BoolVar (& rc .ShowStats , "show-stats" , false , wh ("Show statistics per linter" ))
128
131
129
132
// Linters settings config
130
133
lsc := & cfg .LintersSettings
@@ -408,6 +411,8 @@ func (e *Executor) runAndPrint(ctx context.Context, args []string) error {
408
411
}
409
412
}
410
413
414
+ e .printStats (issues )
415
+
411
416
e .setExitCodeIfIssuesFound (issues )
412
417
413
418
e .fileCache .PrintStats (e .log )
@@ -489,6 +494,31 @@ func (e *Executor) createPrinter(format string, w io.Writer) (printers.Printer,
489
494
return p , nil
490
495
}
491
496
497
+ func (e * Executor ) printStats (issues []result.Issue ) {
498
+ if ! e .cfg .Run .ShowStats {
499
+ return
500
+ }
501
+
502
+ if len (issues ) == 0 {
503
+ e .runCmd .Println ("0 issues." )
504
+ return
505
+ }
506
+
507
+ stats := map [string ]int {}
508
+ for idx := range issues {
509
+ stats [issues [idx ].FromLinter ]++
510
+ }
511
+
512
+ e .runCmd .Printf ("%d issues:\n " , len (issues ))
513
+
514
+ keys := maps .Keys (stats )
515
+ sort .Strings (keys )
516
+
517
+ for _ , key := range keys {
518
+ e .runCmd .Printf ("* %s: %d\n " , key , stats [key ])
519
+ }
520
+ }
521
+
492
522
// executeRun executes the 'run' CLI command, which runs the linters.
493
523
func (e * Executor ) executeRun (_ * cobra.Command , args []string ) {
494
524
needTrackResources := e .cfg .Run .IsVerbose || e .cfg .Run .PrintResourcesUsage
0 commit comments