Laravel: Automatyzacja sprawdzania standardów kodu za pomocą Git Hooks i PHPCodeSniffer

calendar_today2019-06-30folderGIT /  Laravel /  PHP

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

Skontaktuj się z nami

keyboard_arrow_up