
full diff: https://github.com/dominikh/go-tools/compare/2019.2.3...2020.1.3 Also updates tests to accomodate updated rules: --- FAIL: TestSourcesFromTestdataWithIssuesDir/staticcheck.go (0.43s) linters_test.go:137: [run --disable-all --print-issued-lines=false --print-linter-name=false --out-format=line-number --max-same-issues=10 -Estaticcheck --no-config testdata/staticcheck.go] linters_test.go:33: Error Trace: linters_test.go:33 linters_test.go:138 linters_test.go:53 Error: Received unexpected error: staticcheck.go:11: no match for `self-assignment of x to x` vs ["SA4006: this value of `x` is never used"] in: staticcheck.go:11:2: SA4006: this value of `x` is never used unmatched errors staticcheck.go:11:2: SA4006: this value of `x` is never used Test: TestSourcesFromTestdataWithIssuesDir/staticcheck.go Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
51 lines
802 B
Go
51 lines
802 B
Go
// +build gofuzz
|
|
|
|
package pattern
|
|
|
|
import (
|
|
"go/ast"
|
|
goparser "go/parser"
|
|
"go/token"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
var files []*ast.File
|
|
|
|
func init() {
|
|
fset := token.NewFileSet()
|
|
filepath.Walk("/usr/lib/go/src", func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
// XXX error handling
|
|
panic(err)
|
|
}
|
|
if !strings.HasSuffix(path, ".go") {
|
|
return nil
|
|
}
|
|
f, err := goparser.ParseFile(fset, path, nil, 0)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
files = append(files, f)
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func Fuzz(data []byte) int {
|
|
p := &Parser{}
|
|
pat, err := p.Parse(string(data))
|
|
if err != nil {
|
|
if strings.Contains(err.Error(), "internal error") {
|
|
panic(err)
|
|
}
|
|
return 0
|
|
}
|
|
_ = pat.Root.String()
|
|
|
|
for _, f := range files {
|
|
Match(pat.Root, f)
|
|
}
|
|
return 1
|
|
}
|