#! /bin/sh # Ensure consistent style by catching common improper constructs. set -e diag() { fail=: echo "$file:" "$@" echo ============================================================ } rm -f failures # Get some help from GNU grep. GREP_OPTIONS='--color=auto -n' GREP_COLOR='1;31' export GREP_OPTIONS export GREP_COLOR tmp=incltest.tmp for dir in "${INCDIR-..}" "${INCDIR-..}"/../iface; do find "$dir" \( -name "${1-*}.hh" -o -name "${1-*}.cc" \) \ -a -type f -a -print | while read file; do if grep 'GNU Bison' "$file" >/dev/null || grep 'generated by flex' "$file" >/dev/null ; then continue fi fail=false sed 's,//.*,,' < $file > $tmp grep '[ ]if(' $tmp && diag 'Missing space after "if"' grep '[ ]if (.*).*{' $tmp && diag 'Opening { should be on its own line.' grep '[ ]if (.*).*;' $tmp && diag 'if body should be on another line.' grep '[ ]while(' $tmp && diag 'Missing space after "while"' grep '[ ]while (.*).*{' $tmp && diag 'Opening { should be on its own line.' grep '[ ]while (.*).*[^)];' $tmp && diag 'while body should be on another line.' grep '[ ]for(' $tmp && diag 'Missing space after "for"' grep '[ ]for (.*).*{' $tmp && diag 'Opening { should be on its own line.' grep '[ ]for (.*;.*;.*).*;' $tmp && diag 'for body should be on another line.' grep '[ ]switch(' $tmp && diag 'Missing space after "switch"' grep '[ ]switch (.*).*{' $tmp && diag 'Opening { should be on its own line.' grep '( ' $tmp && diag 'No space after opening (.' grep ' )' $tmp && diag 'No space before closing ).' grep '! ' $tmp && diag 'No space after unary operators (!).' grep ',[(a-zA-Z+=_!]' $tmp && diag 'Space after coma.' grep '[^ ]&&[^ ]' $tmp && diag 'Space arround binary operators.' grep '[^ ]||[^ ]' $tmp && diag 'Space arround binary operators.' grep '[ ]default:[^:].*;' $tmp && diag 'Label should be on their own line.' grep '[ ]case.*:[^:].*;' $tmp && diag 'Label should be on their own line.' grep '[ ];' $tmp && diag 'No space before semicolon.' $fail && echo "$file" >>failures done done if test -f failures; then echo "The following files contain style errors:" cat failures rm failures exit 1; fi