Feedback on lint script

This commit is contained in:
Tom Wilkie committed 2015-03-26 18:08:30 +00:00
1 parent d041bec315
commit 9e63b4e8c7
1 file changed
+32 -37
+32 -37
View File
@@ -13,74 +13,69 @@
set -eu
EXIT_CODE=0
function lint_go {
filename=$1
filename="$1"
result=0
if [ "$(gofmt -d $filename)" != "" ]; then
EXIT_CODE=1
echo "$filename: run gofmt -w $filename!"
if [ -n "$(gofmt -l "${filename}")" ]; then
result=1
echo "${filename}: run gofmt -w ${filename}!"
fi
go tool vet ${filename} || EXIT_CODE=$?
go tool vet ${filename} || result=$?
# golint is completely optional. If you don't like it
# don't have it installed.
if [ "$(which golint)" != "" ]; then
if type golint >/dev/null 2>&1; then
# golint doesn't set an exit code it seems
lintoutput=$(golint $filename)
lintoutput=$(golint "${filename}")
if [ "$lintoutput" != "" ]; then
result=1
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}
if type gocyclo >/dev/null 2>&1; then
gocyclo -over 25 "${filename}" | while read line; do
echo "${filename}": higher than 25 cyclomatic complexity - "${line}"
done
fi
return $result
}
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
filename="$1"
ext="${filename##*\.}"
# Don't lint this script
if [ "${filename}" == "bin/lint" ]; then
if [ "${filename}" = "bin/lint" ]; then
return
fi
case "$ext" in
go) lint_go $filename
go) lint_go "${filename}"
;;
esac
}
if [ $# -gt 0 ]; then
for filename in $@; do
lint ${filename}
function lint_files {
result=0
while read filename; do
lint "${filename}" || result=1
done
else
for filename in $(git diff --cached --name-only); do
if [ ! -e "${filename}" ]; then
continue
fi
exit $result
}
lint ${filename}
done
fi
function list_files {
if [ $# -gt 0 ]; then
find "$@" -type f
else
git diff --cached --name-only
fi
}
exit $EXIT_CODE
list_files "$@" | lint_files