34 lines
958 B
Bash
34 lines
958 B
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
set -eof pipefail
|
||
|
|
||
|
FILES=$(comm -23 <(sort <(git ls-files --cached --others --exclude-standard)) <(sort <(git ls-files --deleted)) | grep --ignore-case -E '\.(java|cpp|nix|json|sh|md|js|clj|cljs|cljc|edn)$')
|
||
|
N_FILES=$(echo "$FILES" | wc -l)
|
||
|
LINT_SHOULD_FIX=0
|
||
|
|
||
|
if [[ -n $1 && $1 != '--fix' ]]; then
|
||
|
echo "Unknown option '$1'" >&2
|
||
|
exit 1
|
||
|
elif [[ $1 == '--fix' ]]; then
|
||
|
LINT_SHOULD_FIX=1
|
||
|
fi
|
||
|
|
||
|
echo "Checking ${N_FILES} files for missing trailing newlines."
|
||
|
|
||
|
# Do not process the whole file and only check the last character. Ignore empty
|
||
|
# files. Taken from https://stackoverflow.com/a/10082466.
|
||
|
for file in $FILES; do
|
||
|
if [ -s "$file" ] && [ "$(tail -c1 "$file"; echo x)" != $'\nx' ]; then
|
||
|
if [[ $LINT_SHOULD_FIX -eq 1 ]]; then
|
||
|
echo "" >>"$file"
|
||
|
else
|
||
|
LINT_ERROR=1
|
||
|
echo "No trailing newline: $file" >&2
|
||
|
fi
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [[ $LINT_ERROR -eq 1 ]]; then
|
||
|
exit 1
|
||
|
fi
|