#! /bin/bash

set -eu

golint
misspell --error .

# gofmt doesn't exit with an error code if the files don't match the expected
# format. So we have to run it and see if it outputs anything.
if gofmt -l -s . 2>&1 | read
then
    echo "Error: not all code had been formatted with gofmt."
    echo "Fixing the following files"
    gofmt -s -w -l .
    echo
    echo "Please add them to the commit"
    git status --short
    exit 1
fi

ineffassign .

go fmt
go tool vet --all --shadow .
gocyclo -over 12 .
go test -timeout 5s -test.v
