protocols/lint.sh

31 lines
928 B
Bash
Executable File

#!/bin/sh
set -o pipefail
fail=0
for file in *.tex *.cls; do
basename="$(basename -- "$file")"
filefail=0
(grep -n $'\t' "$file" | sed 's/\t/↹/g') && echo -e "$file: Found tab (expected only spaces)\n" && filefail=1
(grep -n '\s$' "$file" | sed 's/\s/·/g') && echo -e "$file: Trailing whitespace\n" && filefail=1
[ "${basename##*.}" = "tex" ] && (grep -nE '^ [^&]*\\\\' "$file") && echo -e "$file: Forced linebreak outside of table\n" && filefail=1
[[ -x "$file" ]] && echo -e "$file: Executable bit is set (but filetype does not need to be executable)\n" && filefail=1
if [ "$filefail" = "1" ]; then
fail=1
echo # additional newline after each failed file
fi
done
if [ "$CI" = "true" ]; then
pdfs=$(find . -iname "*.pdf" -not -path "./attachments/*")
[ -n "$pdfs" ] && echo -e "Found PDF files not in ./attachments/:\n$pdfs" && fail=1
fi
if [ "$fail" = "1" ]; then
exit 1
else
echo "Linting passed"
fi