-
Notifications
You must be signed in to change notification settings - Fork 17
/
api.go
74 lines (67 loc) · 1.38 KB
/
api.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package goconst
import (
"go/ast"
"go/token"
)
type Issue struct {
Pos token.Position
OccurrencesCount int
Str string
MatchingConst string
Typ Type
}
type Config struct {
MatchWithConstants bool
MinStringLength int
MinOccurrences int
ParseNumbers bool
NumberMin int
NumberMax int
}
func Run(files []*ast.File, fset *token.FileSet, cfg *Config) ([]Issue, error) {
p := New(
"",
"",
false,
cfg.MatchWithConstants,
cfg.ParseNumbers,
cfg.NumberMin,
cfg.NumberMax,
cfg.MinStringLength,
cfg.MinOccurrences,
)
var issues []Issue
for _, f := range files {
ast.Walk(&treeVisitor{
fileSet: fset,
packageName: "",
fileName: "",
p: p,
}, f)
}
p.ProcessResults()
issues = buildIssues(p, issues)
return issues, nil
}
func buildIssues(p *Parser, issues []Issue) []Issue {
//return nil
for str, violations := range p.strs {
for typ, positions := range violations.Positions {
violation := positions[0]
i := Issue{
Pos: violation.Position,
OccurrencesCount: len(positions),
Str: str,
Typ: typ,
}
if len(p.consts) != 0 {
if cst, ok := p.consts[str]; ok {
// const should be in the same package and exported
i.MatchingConst = cst.Name
}
}
issues = append(issues, i)
}
}
return issues
}