@@ -3,36 +3,22 @@ package godox
3
3
import (
4
4
"go/token"
5
5
"strings"
6
- "sync"
7
6
8
7
"github.com/matoous/godox"
9
8
"golang.org/x/tools/go/analysis"
10
9
11
10
"github.com/golangci/golangci-lint/pkg/config"
12
11
"github.com/golangci/golangci-lint/pkg/goanalysis"
13
- "github.com/golangci/golangci-lint/pkg/lint/linter"
14
- "github.com/golangci/golangci-lint/pkg/result"
15
12
)
16
13
17
14
const linterName = "godox"
18
15
19
16
func New (settings * config.GodoxSettings ) * goanalysis.Linter {
20
- var mu sync.Mutex
21
- var resIssues []goanalysis.Issue
22
-
23
17
analyzer := & analysis.Analyzer {
24
18
Name : linterName ,
25
19
Doc : goanalysis .TheOnlyanalyzerDoc ,
26
20
Run : func (pass * analysis.Pass ) (any , error ) {
27
- issues := runGodox (pass , settings )
28
-
29
- if len (issues ) == 0 {
30
- return nil , nil
31
- }
32
-
33
- mu .Lock ()
34
- resIssues = append (resIssues , issues ... )
35
- mu .Unlock ()
21
+ runGodox (pass , settings )
36
22
37
23
return nil , nil
38
24
},
@@ -43,33 +29,27 @@ func New(settings *config.GodoxSettings) *goanalysis.Linter {
43
29
"Tool for detection of FIXME, TODO and other comment keywords" ,
44
30
[]* analysis.Analyzer {analyzer },
45
31
nil ,
46
- ).WithIssuesReporter (func (* linter.Context ) []goanalysis.Issue {
47
- return resIssues
48
- }).WithLoadMode (goanalysis .LoadModeSyntax )
32
+ ).WithLoadMode (goanalysis .LoadModeSyntax )
49
33
}
50
34
51
- func runGodox (pass * analysis.Pass , settings * config.GodoxSettings ) []goanalysis.Issue {
52
- var messages []godox.Message
35
+ func runGodox (pass * analysis.Pass , settings * config.GodoxSettings ) {
53
36
for _ , file := range pass .Files {
54
- messages = append (messages , godox .Run (file , pass .Fset , settings .Keywords ... )... )
55
- }
37
+ position := goanalysis .GetFilePosition (pass , file )
56
38
57
- if len (messages ) == 0 {
58
- return nil
59
- }
39
+ messages := godox .Run (file , pass .Fset , settings .Keywords ... )
40
+ if len (messages ) == 0 {
41
+ continue
42
+ }
60
43
61
- issues := make ([]goanalysis. Issue , len ( messages ) )
44
+ nonAdjPosition := pass . Fset . PositionFor ( file . Pos (), false )
62
45
63
- for k , i := range messages {
64
- issues [k ] = goanalysis .NewIssue (& result.Issue {
65
- Pos : token.Position {
66
- Filename : i .Pos .Filename ,
67
- Line : i .Pos .Line ,
68
- },
69
- Text : strings .TrimRight (i .Message , "\n " ),
70
- FromLinter : linterName ,
71
- }, pass )
72
- }
46
+ ft := pass .Fset .File (file .Pos ())
73
47
74
- return issues
48
+ for _ , i := range messages {
49
+ pass .Report (analysis.Diagnostic {
50
+ Pos : ft .LineStart (goanalysis .AdjustPos (i .Pos .Line , nonAdjPosition .Line , position .Line )) + token .Pos (i .Pos .Column ),
51
+ Message : strings .TrimRight (i .Message , "\n " ),
52
+ })
53
+ }
54
+ }
75
55
}
0 commit comments