Pisząc kod w jakimkolwiek języku programowania, dobrze jest stosować określone standardy: jednakowe formatowanie, nazewnictwo zmiennych oraz funkcji, rodzaj komentarzy, sposób dokumentowania i wiele innych. Wybranie jednego schematu szczególnie przydaje się w grupie programistów, dzięki czemu łatwiej nam wspólnie pracować nad kodem. W dbaniu o trzymanie się standardu może nam pomóc PHP_CodeSniffer.
Jest to bardzo przydatne narzędzie, które wskaże nam odstępstwa od standardu w naszym kodzie, podobnie jak walidator. Możemy wybrać jeden z kilku dostępnych schematów (PEAR, Zend, PHPCS, Squiz, MySource) lub stworzyć własny. Oczywiście PHP_CodeSniffer nie pomoże nam w przypadku normalnych błędów programistycznych.
Przykładowe wywołania PHP_CodeSniffer można zobaczyć na poniższym filmiku:
Instalacja
PHP_CodeSniffer możemy bardzo prosto zainstalować przy użyciu PEAR, korzystając z polecenia:
pear install PHP_CodeSniffer |
Możemy także pobrać narzędzie ze strony projektu i zainstalować je sami. Należy wtedy pamiętać, aby phpcs było dostępne z każdego miejsca (dopisane do ścieżki systemowej), a katalog z bibliotekami PHP był dopisany do include_path.
Przykłady użycia
Narzędzie posiada dość duże możliwości konfiguracyjne. W zależności od przekazywanych parametrów możemy zmieniać standardy kodowania, rodzaj wynikowego raportu, pomijać sprawdzanie wybranych plików lub katalogów, eksportować dane do wybranego formatu itd. Poniżej przedstawię tylko wybrane przykłady użycia PHP_CodeSniffer, po bardziej szczegółowe informacje na temat konfiguracji odsyłam do dokumentacji.
Najprostszym sposobem wywołania jest podanie ścieżki do katalogu (lub pojedynczego pliku), który chcemy sprawdzić pod kątem spełniania standardów kodowania:
phpcs /path/to/php/sources |
Jak już wcześniej pisałem, PHP_CodeSniffer obsługuje kilka różnych standardów. Możemy je zmieniać, podając parametr standard w wywołaniu. Jeśli zostanie on pominięty (jak w pierwszym przykładzie), wykorzystany zostanie domyślny, określony w konfiguracji. Jeśli chcemy sprawdzić nasz projekt, a znajdują się w nim zewnętrzne biblioteki, możemy je pominąć używając parametru ignore
:
phpcs --standard=ZEND --ignore=directory path/to/php/sources |
W przypadku, gdy chcemy otrzymać jedynie podsumowania zgodności naszych kodów z obowiązującymi standardami, możemy skorzystać z parametru report=summary
. Dzięki temu wyświetlona zostanie tylko liczba błędów oraz ostrzeżeń w naszym projekcie.
phpcs --standard=PEAR --report=summary /path/to/php/sources |
Wyniki naszych raportów możemy także eksportować do różnych formatów, np. XML lub CSV:
phpcs --report=checkstyle /path/to/code |
phpcs --report=csv /path/to/code |
Integracja z Eclipse
Wszyscy, którzy chcą korzystać z zalet PHP_CodeSniffer i używają Eclipse, mogą go łatwo zintegrować z programem. Dzięki temu w trakcie pisania kodu wszystkie nasze odstępstwa od standardu będą oznaczane na bieżąco.
W tym celu musimy na początek zainstalować zestaw narzędzi PHP Tool Integration. Aby to zrobić, należy z menu Eclipse wybrać Help -> Install new software… i dodać nowe źródło: http://www.phpsrc.org/eclipse/pti/. Po akceptacji licencji i zainstalowaniu dodatków, musimy zrestartować Eclipse.
Następnie należy skonfigurować odpowiednio wtyczkę. Trzeba w tym celu z menu wybrać Window > Preferences i rozwinąć Grupę PHP > PHP Tools > PHP CodeSniffer. W okienku CodeSniffer Standards musimy wybrać domyślny standard i podać lokalizację pliku ruleset.xml z jego definicją (np. …\CodeSniffer\Standards\Zend).
Jeśli chcemy automatycznie dopasować nasze pliki PHP do określonego standardu, przydatna będzie rozszerzenie FormatterPrototype. Wystarczy je pobrać i skopiować do katalogu dropins w Eclipse. Następnie z menu możemy wybrać Window > Preferences i rozwinąć grupę PHP > CodeStyle > Formatter. Dzięki wtyczce opcje zostały rozbudowane o szczegółowe ustawienia formatowania kodu PHP, które możemy dopasować wedle swojego uznania. Od tego momentu podczas programowania będziemy mogli skorzystać z kombinacji klawiszy CTRL + SHIFT + F, a nasz kod zostanie automatycznie sformatowany według naszych ustawień.