Skip to content

Instantly share code, notes, and snippets.

@jwage
Last active May 3, 2023 06:42
Show Gist options
  • Star 40 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save jwage/b1614c96ea22ccaf68b7 to your computer and use it in GitHub Desktop.
Save jwage/b1614c96ea22ccaf68b7 to your computer and use it in GitHub Desktop.
php-cs-fixer git pre commit hook
<?php
return Symfony\CS\Config\Config::create()
->level(Symfony\CS\FixerInterface::SYMFONY_LEVEL)
->fixers([
'short_array_syntax',
'ordered_use',
])
;
#!/usr/bin/env bash
ROOT="/path/to/your/code"
echo "php-cs-fixer pre commit hook start"
PHP_CS_FIXER="vendor/bin/php-cs-fixer"
HAS_PHP_CS_FIXER=false
if [ -x vendor/bin/php-cs-fixer ]; then
HAS_PHP_CS_FIXER=true
fi
if $HAS_PHP_CS_FIXER; then
git status --porcelain | grep -e '^[AM]\(.*\).php$' | cut -c 3- | while read line; do
$PHP_CS_FIXER fix --config-file=$ROOT/.php_cs --verbose "$line";
git add "$line";
done
else
echo ""
echo "Please install php-cs-fixer, e.g.:"
echo ""
echo " composer require --dev fabpot/php-cs-fixer:dev-master"
echo ""
fi
echo "php-cs-fixer pre commit hook finish"
@bdelespierre
Copy link

bdelespierre commented Aug 11, 2022

Grep pattern is missing heading whitespace:

# instead of 
grep -e '^[AM]\(.*\).php$'

# do
grep -e '^\s*[AM]\(.*\).php$'

@bdelespierre
Copy link

Actually, ls-files does a better job:

git ls-files -m | grep -e '.php$' | xargs vendor/bin/php-cs-fixer fix

@benblub
Copy link

benblub commented May 3, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment