From b78bfc0a437e8199a941bea3db606b60925d2c36 Mon Sep 17 00:00:00 2001 From: "Lars K.W. Gohlke" Date: Mon, 23 May 2016 21:19:08 +0000 Subject: [PATCH] build.go: add gometalinter to lint runs GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3085 --- build.go | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/build.go b/build.go index c12b6fdba..5ef28515f 100644 --- a/build.go +++ b/build.go @@ -224,6 +224,12 @@ func main() { lint(".") lint("./cmd/...") lint("./lib/...") + if isGometalinterInstalled() { + dirs := []string{".", "./cmd/...", "./lib/..."} + gometalinter("deadcode", dirs, "test/util.go") + gometalinter("structcheck", dirs) + gometalinter("varcheck", dirs) + } default: log.Fatalf("Unknown command %q", cmd) @@ -281,6 +287,7 @@ func setup() { runPrint("go", "get", "-v", "github.com/axw/gocov/gocov") runPrint("go", "get", "-v", "github.com/AlekSi/gocov-xml") runPrint("go", "get", "-v", "bitbucket.org/tebeka/go2xunit") + runPrint("go", "get", "-v", "github.com/alecthomas/gometalinter") } func test(pkgs ...string) { @@ -862,7 +869,6 @@ func vet(dirs ...string) { // A genuine error exit from the vet tool. log.Fatal(err) } - } func lint(pkg string) { @@ -911,3 +917,34 @@ func exitStatus(err error) int { return -1 } + +func isGometalinterInstalled() bool { + if _, err := runError("gometalinter", "--disable-all"); err != nil { + log.Println("gometalinter is not installed") + return false + } + return true +} + +func gometalinter(linter string, dirs []string, excludes ...string) { + params := []string{"--disable-all"} + params = append(params, fmt.Sprintf("--deadline=%ds", 60)) + params = append(params, "--enable="+linter) + + for _, exclude := range excludes { + params = append(params, "--exclude="+exclude) + } + + for _, dir := range dirs { + params = append(params, dir) + } + + bs, err := runError("gometalinter", params...) + + if len(bs) > 0 { + log.Printf("%s", bs) + } + if err != nil { + log.Printf("%v", err) + } +}