dnscrypt-proxy/vendor/github.com/jgautheron/goconst/api.go

75 lines
1.4 KiB
Go

package goconst
import (
"go/ast"
"go/token"
"strings"
)
type Issue struct {
Pos token.Position
OccurrencesCount int
Str string
MatchingConst string
}
type Config struct {
IgnoreTests bool
MatchWithConstants bool
MinStringLength int
MinOccurrences int
ParseNumbers bool
NumberMin int
NumberMax int
ExcludeTypes map[Type]bool
}
func Run(files []*ast.File, fset *token.FileSet, cfg *Config) ([]Issue, error) {
p := New(
"",
"",
cfg.IgnoreTests,
cfg.MatchWithConstants,
cfg.ParseNumbers,
cfg.NumberMin,
cfg.NumberMax,
cfg.MinStringLength,
cfg.MinOccurrences,
cfg.ExcludeTypes,
)
var issues []Issue
for _, f := range files {
if p.ignoreTests {
if filename := fset.Position(f.Pos()).Filename; strings.HasSuffix(filename, testSuffix) {
continue
}
}
ast.Walk(&treeVisitor{
fileSet: fset,
packageName: "",
fileName: "",
p: p,
}, f)
}
p.ProcessResults()
for str, item := range p.strs {
fi := item[0]
i := Issue{
Pos: fi.Position,
OccurrencesCount: len(item),
Str: str,
}
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, nil
}