1
1
package golinters
2
2
3
3
import (
4
+ "bytes"
5
+ "fmt"
4
6
"sync"
5
7
6
8
"github.com/daixiang0/gci/pkg/gci"
7
9
"github.com/pkg/errors"
10
+ "github.com/shazow/go-diff/difflib"
8
11
"golang.org/x/tools/go/analysis"
9
12
10
13
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
@@ -16,6 +19,7 @@ const gciName = "gci"
16
19
func NewGci () * goanalysis.Linter {
17
20
var mu sync.Mutex
18
21
var resIssues []goanalysis.Issue
22
+ differ := difflib .New ()
19
23
20
24
analyzer := & analysis.Analyzer {
21
25
Name : gciName ,
@@ -43,13 +47,17 @@ func NewGci() *goanalysis.Linter {
43
47
var issues []goanalysis.Issue
44
48
45
49
for _ , f := range fileNames {
46
- diff , err := gci .Run (f , & gci.FlagSet {LocalFlag : localFlag })
50
+ source , result , err := gci .Run (f , & gci.FlagSet {LocalFlag : localFlag })
47
51
if err != nil {
48
52
return nil , err
49
53
}
50
- if diff == nil {
54
+ if bytes . Equal ( source , result ) {
51
55
continue
52
56
}
57
+ err = differ .Diff (& out , bytes .NewReader (source ), bytes .NewReader (result ))
58
+ if err != nil {
59
+ return nil , fmt .Errorf ("can't get gci diff output: %v" , err )
60
+ }
53
61
54
62
is , err := extractIssuesFromPatch (string (diff ), lintCtx .Log , lintCtx , gciName )
55
63
if err != nil {
0 commit comments