Często zdarza się, że dołączamy do zespołu deweloperów którzy wytworzyli kod spagetti, albo bardzo luźno (pewnie z winy terminów) patrzyli na kwestię standardu kodu w projekcie. Zdaję sobie sprawę, że jest wielu programistów, którzy więdzą co to jest PSR, ale albo go nieużywają, albo uważają że przeszkadza im to w pracy, a ciągłe sprawdzanie czy aby każda spacja jest prawidłowo lub mamy odpowiednio usytuowane nawiasy jest nużące...
Jest na to jedno bardzo skuteczne rozwiązanie, można to zautomatyzować, jak? Do tego użyjemy git hooka pre-commit
i phpcs
połączonego z phpcbf
.
Instalacja PHPCS
PEAR
Niestety PHP Code Sniffer na Windows 10 najwygodniej zainstalować za pomocą PEAR. W tym celu wykonujemy polecenie:
pear install PHP_CodeSniffer
Composer
Pierwszą rzeczą, którą musimy zrobić, jest dodanie phpcs
jako zależności globalnej, która trafi do "dev" composera. Dlaczego? Najprostsza odpowiedź to, po co śmiecić projekt ;)
composer global require "squizlabs/php_codesniffer=*"
Dodatkowo należy upenić się, że w ścieżce PATH
znajduje się katalog bin composera. Wartość domyślna to ~/.composer/vendor/bin/
, ale można to sprawdzić, uruchamiając
composer global config bin-dir --absolute
GIT pre-commit hook
Teraz musimy utworzyć skrypt, który będzie robił za nas czarną robotę. Skrypt należy zapisać w pliku pre-commit
.
Skrypt ten wrzucamy do katalogu git-hooks
naszego projektu, aby każdy go posiadał. Sprawdza on tylko pliki, które zostały zmodyfikowane.
Najpierw phpcbf
próbuję naprawić to co potrafi, a później następuję już sprawdzenie plików przez phpcs
.
Plik zasad PHPCS dla Laravela
Osobno można stworzyć plik z definicjami, co
Automatyzacja
Ponieważ chcemy zweryfikować standardy kodu projektu przed jakimkolwiek commitem, musimy skonfigurować git hook. Aby zautomatyzować ten krok, możemy skorzystać ze skryptów kompozytora, które określimy podczas instalacji kompozytora lub jego aktualizacji
{ "scripts": { "install-hooks": ["rm -rf .git/hooks", "ln -s git-hooks/hooks .git/hooks", "chmod +x .git/hooks/pre-commit"] "pre-install-cmd": ["@install-hooks"], "post-install-cmd": ["@install-hooks"], } }
Composer skopiuje nasz skrypt z katalogu git-hooks
do katalogu .git
i sprawi, że będzie on wykonywalny.
W każdym projekcie obsługiwanym przez git
znajduje się katalog .git
, który zawiera folder hooks
, w którym można znaleźć przykładowe skrypty git hooks
. Aby uzyskać więcej informacji, odwiedź dokumentację git hooks.
Cały kod źródłowy można zobaczyć tutaj https://github.com/qwerkon/laravel-hook-phpcs