Files
weave/bin/lint
T

87 lines
1.7 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# This scipt lints go files for common errors.
#
# Its runs gofmt and go vet, and optionally golint and
# gocyclo, if they are installed.
#
# With no arguments, it lints the current files staged
# for git commit. Or you can pass it explicit filenames
# (or directories) and it will lint them.
#
# To use this script automatically, run:
# ln -s ../../bin/lint .git/hooks/pre-commit
set -eu
EXIT_CODE=0
function lint_go {
filename=$1
if [ "$(gofmt -d $filename)" != "" ]; then
EXIT_CODE=1
echo "$filename: run gofmt -w $filename!"
fi
go tool vet ${filename} || EXIT_CODE=$?
# golint is completely optional. If you don't like it
# don't have it installed.
if [ "$(which golint)" != "" ]; then
# golint doesn't set an exit code it seems
lintoutput=$(golint $filename)
if [ "$lintoutput" != "" ]; then
echo "$lintoutput"
EXIT_CODE=1
fi
fi
# gocyclo is completely optional. If you don't like it
# don't have it installed. Also never blocks a commit,
# it just warns.
if [ "$(which gocyclo)" != "" ]; then
gocyclo -over 25 ${filename} | while read line; do
echo ${filename}: higher than 25 cyclomatic complexity - ${line}
done
fi
}
function lint {
filename=$1
ext=${filename##*\.}
# If this is a directory, then lint the files in it
if [[ -d ${filename} ]]; then
for filename in $(find ${filename} -type f); do
lint ${filename}
done
return
fi
# Don't lint this script
if [ "${filename}" == "bin/lint" ]; then
return
fi
case "$ext" in
go) lint_go $filename
;;
esac
}
if [ $# -gt 0 ]; then
for filename in $@; do
lint ${filename}
done
else
for filename in $(git diff --cached --name-only); do
if [ ! -e "${filename}" ]; then
continue
fi
lint ${filename}
done
fi
exit $EXIT_CODE