Autor wpisu: Michał Janicki, dodany: 01.10.2017 12:51, tagi: php
W tym poście opiszę w jaki sposób można tworzyć własne reguły i zestawy reguł dla PHPMD. Jeśli chciałbyś się dowiedzieć czym jest PHPMD lub uzupełnić wiedzę na ten temat to zapraszam do lektury poprzedniego postu opisującego od podstaw PHPMD. Zachęcam także do zapoznania się z tym i z tym postem – oba poświęcone są narzędziom do statycznej analizy kodu.
I jeszcze jedna uwaga – przykłady znajdujących się w tym poście jest zaczerpniętych bezpośrednio z dokumentacji PHPMD.
A teraz o tworzeniu własnych reguł
W pierwszej kolejności należy utworzyć plik z klasą, która będzie implementować interface \PHPMD\Rule. Znacznie lepszym rozwiązaniem będzie jednak zamiast implementować ten interface rozszerzyć klasę \PHPMD\AbstractRule. Zawiera ona całą logikę niezbędną do utworzenia klasy z regułą.
Kolejnym krokiem będzie stworzenie wewnątrz klasy metody apply, która jako argument przyjmuje obiekt będący instancją \PHPMD\AbstractNode. Ten obiekt reprezentuje klasę, metodę, funkcję lub interface, który możemy poddać testom. Pytanie jednak skąd wiadomo, że ten obiekt zawiera klasę a nie np. metodę? Aby to określić należy implementować jeden z czterech specjalnych interfaceów (\PHPMD\Rule\ClassAware, \PHPMD\Rule\FunctionAware, \PHPMD\Rule\InterfaceAware, \PHPMD\Rule\MethodAware). Ich jedynym zadaniem jest oznaczenie jakiego typu element testowanego kodu (klasa, funkcja, metoda, interface) będzie przekazywany w parametrze do metody apply. Przykład klasy poniżej:
class Com_Example_Rule_NoFunctions extends \PHPMD\AbstractRule implements \PHPMD\Rule\FunctionAware { public function apply(\PHPMD\AbstractNode $node) { } }
Teraz pozostaje tylko wywołać metodę addViolation, która dodaje informacje o błędzie do raportu końcowego w odpowiednim miejscu.
A teraz o regułach bazujących na danych z PHP Depend
PHPMD może posłużyć także do analizy istniejących już danych zwróconych PHP Depend i na ich bazie określić czy z kodem jest coś nie tak. Zasada tworzenia takiej reguły jest bardzo podobna do tych analizujących kod.
Pierwsze z czym należy się zapoznać to z listą metryk jakie oferuje PHP_Depend. Znajdziemy tam tabelę, w której każdy wiersz opisuje jedną metrykę. Gdy wybierzemy już, która metryka nas najbardziej interesuje przechodzimy do metody apply w na parametrze $node wywołujemy metodę getMetric i jako parametr podajemy nazwę metryki PHP_Depend. Metoda getMetric zwróci nam wartość, którą następnie możemy poddać analizie w samej metodzie apply. Klasa analizująca metrykę powinna być podobna do klasy poniżej: