#!/usr/bin/env bash

set -o errexit
set -o nounset
set -o pipefail

# Create the linter path for use later
LINTER=${GOPATH}/bin/gometalinter

# Make sure gometalinter is installed
if [ ! -f ${LINTER} ]; then
	echo >&2 "gometalinter must be installed. Please run 'make install.tools' and try again"
	exit 1
fi

PKGS=$(find . -type d -not -path . -a -not -iwholename '*.git*' -a -not -iname '.tool' -a -not -iwholename '*vendor*' -a -not -iname 'hack' -a -not -iwholename '*.artifacts*' -a -not -iwholename '*contrib*' -a -not -iwholename '*test*' -a -not -iwholename '*logo*' -a -not -iwholename '*conmon*' -a -not -iwholename '*completions*' -a -not -iwholename '*docs*' -a -not -iwholename '*pause*')

# Execute the linter
${LINTER} \
	--concurrency=4\
	--enable-gc\
	--vendored-linters\
	--deadline=600s --disable-all\
	--enable=deadcode\
	--enable=errcheck\
	--enable=goconst\
	--enable=gofmt\
	--enable=golint\
	--enable=ineffassign\
	--enable=interfacer\
	--enable=megacheck\
	--enable=misspell\
	--enable=structcheck\
	--enable=varcheck\
	--enable=vet\
	--enable=vetshadow\
	--exclude='error return value not checked.*\(errcheck\)$'\
	--exclude='declaration of.*err.*shadows declaration.*\(vetshadow\)$'\
	--exclude='.*_test\.go:.*error return value not checked.*\(errcheck\)$'\
	--exclude='duplicate of.*_test.go.*\(dupl\)$'\
	--exclude='cmd\/client\/.*\.go.*\(dupl\)$'\
	--exclude='vendor\/.*'\
	--exclude='server\/seccomp\/.*\.go.*$'\
	${PKGS[@]}