Skip to content

Instantly share code, notes, and snippets.

@wilr
Last active November 14, 2022 07:46
Show Gist options
  • Save wilr/d456160202c3e431e6e3b41c0ffaf772 to your computer and use it in GitHub Desktop.
Save wilr/d456160202c3e431e6e3b41c0ffaf772 to your computer and use it in GitHub Desktop.
Auto PHP Linting
<?php
// This script will copy a pre-commit hook from this repo to a developers local git
// The pre-commit hook will be run whenever a developer runs "git commit"
// This script will run after running composer install, via the "post-install-cmd" in composer.json
//
$gitHookFilename = '.git/hooks/pre-commit';
$shellHookFilename = 'pre-commit.sh';
if (file_exists($gitHookFilename)) {
unlink($gitHookFilename);
}
copy($shellHookFilename, $gitHookFilename);
chmod($gitHookFilename, 0744);
{
"require-dev": {
"phpunit/phpunit": "^5.7",
"squizlabs/php_codesniffer": "^3.4"
},
"scripts": {
"post-install-cmd": [
"php composer-script.php"
],
"lint": "phpcs --extensions=php app/",
"syntax-check": "find app/ -type f -name '*.php' -exec php -l {} \\;",
"lint-clean": "phpcbf app/ --extensions=php",
},
}
#!/bin/sh
PROJECT=`php -r "echo dirname(dirname(dirname(realpath('$0'))));"`
STAGED_FILES_CMD=`git diff --cached --name-only --diff-filter=ACMR HEAD | grep \.php`
# Determine if a file list is passed
if [ "$#" -eq 1 ]
then
oIFS=$IFS
IFS='
'
SFILES="$1"
IFS=$oIFS
fi
SFILES=${SFILES:-$STAGED_FILES_CMD}
echo "Checking PHP Lint (php -l) ..."
for FILE in $SFILES
do
php -l -d display_errors=1 $PROJECT/$FILE
if [ $? != 0 ]
then
echo "Fix the error before commit."
exit 1
fi
FILES="$FILES $PROJECT/$FILE"
done
if [ "$FILES" != "" ]
then
echo "Running Code Sniffer (phpcs) ..."
./vendor/bin/phpcs --colors -n -p $FILES
if [ $? != 0 ]
then
echo "Fix the error before commit."
echo "You can do this automatically with"
echo "./vendor/bin/phpcbf [FILE]"
exit 1
fi
fi
exit $?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment