From 28a643077860061bb65895e3cf1de30675886b0e Mon Sep 17 00:00:00 2001 From: James Shubin Date: Sat, 3 Jun 2017 02:04:10 -0400 Subject: [PATCH] test: Add gometalinter to our test suite Add a bunch of new linters to our tests! We can uncomment each sub linter as we fix up the few remaining issues. --- misc/make-deps.sh | 1 + test.sh | 1 + test/test-golint.sh | 1 + test/test-gometalinter.sh | 63 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+) create mode 100755 test/test-gometalinter.sh diff --git a/misc/make-deps.sh b/misc/make-deps.sh index 7a8527be..c4f6d146 100755 --- a/misc/make-deps.sh +++ b/misc/make-deps.sh @@ -80,4 +80,5 @@ if [[ $ret != 0 ]]; then fi go get golang.org/x/tools/cmd/stringer # for automatic stringer-ing go get github.com/golang/lint/golint # for `golint`-ing +go get github.com/alecthomas/gometalinter && gometalinter --install # bonus cd "$XPWD" >/dev/null diff --git a/test.sh b/test.sh index 5a502abc..0750ef3b 100755 --- a/test.sh +++ b/test.sh @@ -32,6 +32,7 @@ if env | grep -q -e '^TRAVIS=true$' -e '^JENKINS_URL=' -e '^BUILD_TAG=jenkins'; run-test ./test/test-gotest.sh --race fi +run-test ./test/test-gometalinter.sh # FIXME: this now fails everywhere :( #run-test ./test/test-reproducible.sh diff --git a/test/test-golint.sh b/test/test-golint.sh index 0af3f145..48b35e62 100755 --- a/test/test-golint.sh +++ b/test/test-golint.sh @@ -4,6 +4,7 @@ . test/util.sh echo running test-golint.sh +# TODO: replace with gometalinter instead of plain golint # TODO: output a diff of what has changed in the golint output # FIXME: test a range of commits, since only the last patch is checked here PREVIOUS='HEAD^' diff --git a/test/test-gometalinter.sh b/test/test-gometalinter.sh new file mode 100755 index 00000000..dcda5832 --- /dev/null +++ b/test/test-gometalinter.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# check a bunch of linters with the gometalinter +# TODO: run this from the test-golint.sh file instead to check for deltas + +. test/util.sh + +echo running test-gometalinter.sh + +failures='' +function run-test() +{ + $@ || failures=$( [ -n "$failures" ] && echo "$failures\\n$@" || echo "$@" ) +} + +ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )" # dir! +cd "${ROOT}" + +# TODO: run more linters here if we're brave... +gml='gometalinter --disable-all' +#gml="$gml --enable=aligncheck" +#gml="$gml --enable=deadcode" # TODO: only a few fixes needed +#gml="$gml --enable=dupl" +#gml="$gml --enable=errcheck" +#gml="$gml --enable=gas" +#gml="$gml --enable=goconst" +#gml="$gml --enable=gocyclo" +gml="$gml --enable=goimports" +#gml="$gml --enable=golint" # TODO: only a few fixes needed +#gml="$gml --enable=gosimple" # TODO: only a few fixes needed +gml="$gml --enable=gotype" +#gml="$gml --enable=ineffassign" # TODO: only a few fixes needed +#gml="$gml --enable=interfacer" # TODO: only a few fixes needed +#gml="$gml --enable=lll --line-length=200" # TODO: only a few fixes needed +gml="$gml --enable=misspell" +#gml="$gml --enable=safesql" # FIXME: made my machine slow +#gml="$gml --enable=staticcheck" # TODO: only a few fixes needed +#gml="$gml --enable=structcheck" # TODO: only a few fixes needed +gml="$gml --enable=unconvert" +#gml="$gml --enable=unparam" # TODO: only a few fixes needed +#gml="$gml --enable=unused" # TODO: only a few fixes needed +#gml="$gml --enable=varcheck" # TODO: only a few fixes needed +gometalinter="$gml" + +# loop through directories in an attempt to scan each go package +# TODO: lint the *.go examples as individual files and not as a single *.go +for dir in `find . -maxdepth 5 -type d -not -path './old/*' -not -path './old' -not -path './tmp/*' -not -path './tmp' -not -path './.*' -not -path './vendor/*' -not -path './examples/*'`; do + match="$dir/*.go" + #echo "match is: $match" + if ! ls $match &>/dev/null; then + #echo "skipping: $match" + continue # no *.go files found + fi + + run-test $gometalinter "$dir" || fail_test "gometalinter did not pass" +done + +if [[ -n "$failures" ]]; then + echo 'FAIL' + echo 'The following tests have failed:' + echo -e "$failures" + exit 1 +fi +echo 'PASS'