#!/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