Skip to content

Instantly share code, notes, and snippets.

@akrabat

akrabat/phplint

Last active Aug 13, 2020
Embed
What would you like to do?
RRecursive php lint
#!/usr/bin/env bash
set -o nounset
# Recursively call `php -l` over the specified directories/files
if [ -z "$1" ] ; then
printf 'Usage: %s <directory-or-file> ...\n' "$(basename "$0")"
exit 1
fi
ERROR=false
SAVEIFS=$IFS
IFS=$'\n'
while test $# -gt 0; do
CURRENT=${1%/}
shift
if [ ! -f $CURRENT ] && [ ! -d $CURRENT ] ; then
echo "$CURRENT cannot be found"
ERROR=true
continue
fi
for FILE in $(find $CURRENT -type f -name "*.php") ; do
OUTPUT=$(php -l "$FILE" 2> /dev/null)
# Remove blank lines from the `php -l` output
OUTPUT=$(echo -e "$OUTPUT" | awk 'NF')
if [ "$OUTPUT" != "No syntax errors detected in $FILE" ] ; then
echo -e "$FILE:"
echo -e " ${OUTPUT//$'\n'/\\n }\n"
ERROR=true
fi
done
done
IFS=$SAVEIFS
if [ "$ERROR" = true ] ; then
exit 1
fi
echo "No syntax errors found."
exit 0
@lingonl

This comment has been minimized.

Copy link

@lingonl lingonl commented Aug 13, 2020

set -o errexit will cause the php -l ... to exit the script when parsing fails.
if [ -z $1 ] does not work for me, if [ $# -lt 1] did.
The rest is beautiful, thanks!

@akrabat

This comment has been minimized.

Copy link
Owner Author

@akrabat akrabat commented Aug 13, 2020

Thanks @lingonl. Updated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.