diff options
Diffstat (limited to 'custom-checks')
-rwxr-xr-x | custom-checks | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/custom-checks b/custom-checks new file mode 100755 index 00000000..798049e3 --- /dev/null +++ b/custom-checks @@ -0,0 +1,83 @@ +#!/bin/bash -eu + +# This Bash script implements custom sanity checks for scripts beyond what +# Vint covers, which are easy to check with regex. + +# A flag for automatically fixing some errors. +FIX_ERRORS=0 +RETURN_CODE=0 + +function print_help() { + echo "Usage: ./custom-checks [--fix] [DIRECTORY]" 1>&2 + echo 1>&2 + echo " -h, --help Print this help text" 1>&2 + echo " --fix Automatically fix some errors" 1>&2 + exit 1 +} + +while [ $# -ne 0 ]; do + case $1 in + -h) ;& --help) + print_help + ;; + --fix) + FIX_ERRORS=1 + shift + ;; + --) + shift + break + ;; + -?*) + echo "Invalid argument: $1" 1>&2 + exit 1 + ;; + *) + break + ;; + esac +done + +if [ $# -eq 0 ] || [ -z "$1" ]; then + print_help +fi + +# Called to output an error. +# If called at least one, the return code for this script will be 1. +output_error() { + echo "$FILENAME:$LINE_NUMBER $1" + RETURN_CODE=1 +} + +# This function is called for each line in each file to check syntax. +check_line() { + line="$1" + + if [[ "$line" =~ ^function ]]; then + if ! [[ "$line" =~ abort$ ]]; then + if ((FIX_ERRORS)); then + # Use sed to add the 'abort' flag + sed -i "${LINE_NUMBER}s/$/ abort/" "$FILENAME" + else + output_error 'Function without abort keyword (See :help except-compat)' + fi + fi + fi + + if [[ "$line" =~ ' '+$ ]]; then + output_error 'Trailing whitespace' + fi +} + +# Loop through all of the vim files and keep track of the file line numbers. +for FILENAME in $(find "$1" -name '*.vim'); do + LINE_NUMBER=0 + + while read; do + LINE_NUMBER=$(expr $LINE_NUMBER + 1) + + check_line "$REPLY" + done < "$FILENAME" +done + +exit $RETURN_CODE |