@@ -14,6 +14,8 @@ import (
14
14
"github.com/golangci/golangci-lint/pkg/result"
15
15
)
16
16
17
+ var _ Processor = (* FilenameUnadjuster )(nil )
18
+
17
19
type posMapper func (pos token.Position ) token.Position
18
20
19
21
type adjustMap struct {
@@ -30,50 +32,6 @@ type FilenameUnadjuster struct {
30
32
loggedUnadjustments map [string ]bool
31
33
}
32
34
33
- var _ Processor = & FilenameUnadjuster {}
34
-
35
- func processUnadjusterPkg (m * adjustMap , pkg * packages.Package , log logutils.Log ) {
36
- fset := token .NewFileSet () // it's more memory efficient to not store all in one fset
37
-
38
- for _ , filename := range pkg .CompiledGoFiles {
39
- // It's important to call func here to run GC
40
- processUnadjusterFile (filename , m , log , fset )
41
- }
42
- }
43
-
44
- func processUnadjusterFile (filename string , m * adjustMap , log logutils.Log , fset * token.FileSet ) {
45
- syntax , err := parser .ParseFile (fset , filename , nil , parser .ParseComments )
46
- if err != nil {
47
- // Error will be reported by typecheck
48
- return
49
- }
50
-
51
- adjustedFilename := fset .PositionFor (syntax .Pos (), true ).Filename
52
- if adjustedFilename == "" {
53
- return
54
- }
55
-
56
- unadjustedFilename := fset .PositionFor (syntax .Pos (), false ).Filename
57
- if unadjustedFilename == "" || unadjustedFilename == adjustedFilename {
58
- return
59
- }
60
-
61
- if ! strings .HasSuffix (unadjustedFilename , ".go" ) {
62
- return // file.go -> /caches/cgo-xxx
63
- }
64
-
65
- m .Lock ()
66
- defer m .Unlock ()
67
- m .m [adjustedFilename ] = func (adjustedPos token.Position ) token.Position {
68
- tokenFile := fset .File (syntax .Pos ())
69
- if tokenFile == nil {
70
- log .Warnf ("Failed to get token file for %s" , adjustedFilename )
71
- return adjustedPos
72
- }
73
- return fset .PositionFor (tokenFile .Pos (adjustedPos .Offset ), false )
74
- }
75
- }
76
-
77
35
func NewFilenameUnadjuster (pkgs []* packages.Package , log logutils.Log ) * FilenameUnadjuster {
78
36
m := adjustMap {m : map [string ]posMapper {}}
79
37
@@ -97,7 +55,7 @@ func NewFilenameUnadjuster(pkgs []*packages.Package, log logutils.Log) *Filename
97
55
}
98
56
}
99
57
100
- func (p * FilenameUnadjuster ) Name () string {
58
+ func (* FilenameUnadjuster ) Name () string {
101
59
return "filename_unadjuster"
102
60
}
103
61
@@ -128,4 +86,48 @@ func (p *FilenameUnadjuster) Process(issues []result.Issue) ([]result.Issue, err
128
86
}), nil
129
87
}
130
88
131
- func (p * FilenameUnadjuster ) Finish () {}
89
+ func (* FilenameUnadjuster ) Finish () {}
90
+
91
+ func processUnadjusterPkg (m * adjustMap , pkg * packages.Package , log logutils.Log ) {
92
+ fset := token .NewFileSet () // it's more memory efficient to not store all in one fset
93
+
94
+ for _ , filename := range pkg .CompiledGoFiles {
95
+ // It's important to call func here to run GC
96
+ processUnadjusterFile (filename , m , log , fset )
97
+ }
98
+ }
99
+
100
+ func processUnadjusterFile (filename string , m * adjustMap , log logutils.Log , fset * token.FileSet ) {
101
+ syntax , err := parser .ParseFile (fset , filename , nil , parser .ParseComments )
102
+ if err != nil {
103
+ // Error will be reported by typecheck
104
+ return
105
+ }
106
+
107
+ adjustedFilename := fset .PositionFor (syntax .Pos (), true ).Filename
108
+ if adjustedFilename == "" {
109
+ return
110
+ }
111
+
112
+ unadjustedFilename := fset .PositionFor (syntax .Pos (), false ).Filename
113
+ if unadjustedFilename == "" || unadjustedFilename == adjustedFilename {
114
+ return
115
+ }
116
+
117
+ if ! strings .HasSuffix (unadjustedFilename , ".go" ) {
118
+ return // file.go -> /caches/cgo-xxx
119
+ }
120
+
121
+ m .Lock ()
122
+ defer m .Unlock ()
123
+
124
+ m .m [adjustedFilename ] = func (adjustedPos token.Position ) token.Position {
125
+ tokenFile := fset .File (syntax .Pos ())
126
+ if tokenFile == nil {
127
+ log .Warnf ("Failed to get token file for %s" , adjustedFilename )
128
+ return adjustedPos
129
+ }
130
+
131
+ return fset .PositionFor (tokenFile .Pos (adjustedPos .Offset ), false )
132
+ }
133
+ }
0 commit comments