Files
mgmt/test/test-gometalinter.sh
James Shubin 6bfd781947 lang: Replace the go-bindata usage with embed
This doesn't let us have nested mcl at the moment, but we could improve
on this with an embed API for each package. For now this makes building
the project easier.
2022-09-11 20:55:37 -04:00

80 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# check a bunch of linters with the gometalinter
# TODO: run this from the test-golint.sh file instead to check for deltas
echo running "$0"
# ensure gometalinter is available
command -v gometalinter >/dev/null 2>&1 || { echo >&2 "gometalinter not found"; exit 1; }
#ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )" # dir!
ROOT=$(dirname "${BASH_SOURCE}")/..
cd "${ROOT}"
. test/util.sh
failures=''
function run-test()
{
$@ || failures=$( [ -n "$failures" ] && echo "$failures\\n$@" || echo "$@" )
}
# 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"
#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
# exclude generated files:
# TODO: at least until https://github.com/alecthomas/gometalinter/issues/270
gml="$gml --exclude=lang/parser/lexer.nn.go"
gml="$gml --exclude=lang/parser/y.go"
gml="$gml --exclude=lang/types/kind_stringer.go"
gml="$gml --exclude=lang/interpolate/parse.generated.go"
gometalinter="$gml" # final
echo "Using: $gometalinter"
# 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 9 -type d -not -path 'old/*' -not -path 'old' -not -path 'tmp/*' -not -path 'tmp' -not -path 'vendor/*' -not -path 'examples/*' -not -path 'test/*'`; do
#echo "Running in: $dir"
match="$dir/*.go"
#echo "match is: $match"
if ! ls $match &>/dev/null; then
#echo "skipping: $match"
continue # no *.go files found
fi
#echo "Running: $gometalinter '$dir'"
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"
echo
exit 1
fi
echo 'PASS'