Po sześciu latach prac odbyła się pierwsza stabilna wersja statycznego analizatora PHPStan 1.0, który umożliwia wykrywanie błędów w kodzie PHP bez wykonywania go i używania testów jednostkowych. Kod projektu napisany jest w języku PHP i jest dostępny na licencji MIT.
Analizator oferuje 10 poziomów sprawdzania, przy czym każdy kolejny poziom rozszerza możliwości poprzedniego i wprowadza surowsze kontrole:
Przykłady wykrywanych podstawowych problemów:
- Istnienie klas używanych w instanceof, catch, typehints i innych konstrukcjach językowych.
- Istnienie i dostępność wywoływanych metod i funkcji oraz liczba przekazywanych argumentów.
- Sprawdzanie, czy metoda zwraca dane tego samego typu, co określono w wyrażeniu return.
- Istnienie i widoczność właściwości, do których następuje odwołanie, a także sprawdzanie zadeklarowanych i rzeczywistych typów danych używanych w właściwościach.
- Poprawność liczby parametrów przekazanych w wywołaniach sprintf/printf w bloku formatowania ciągów.
- Istnienie zmiennych z uwzględnieniem bloków tworzonych przez operatory rozgałęzienia i pętle.
- Bezużyteczne rzutowania typów (np. «(string) ‘foo’») oraz ścisłe kontrole («===» i «!==») danych o różnych typach i operatorach, które zawsze zwracają wartość false.
Kluczowe nowości PHPStan 1.0:
- Zrealizowano poziom weryfikacji „9”, który przeprowadza kontrole użycia typu „mixed”, zaprojektowanego do organizacji przyjmowania funkcji parametrów z różnymi typami. Dziewiąty poziom wykrywa niebezpieczne zastosowania „mixed”, takie jak przekazywanie wartości typu „mixed” innemu typowi, wywoływanie metod z typem „mixed” oraz dostęp do jego właściwości, które mogą nie istnieć.
- Zarządzanie weryfikacją tożsamości zwracanych wartości dla tych samych wywołań funkcji z wykorzystaniem adnotacji @phpstan-pure i @phpstan-impure.
- Analiza typów w konstrukcjach try-catch-finally z wykorzystaniem adnotacji @throws.
- Wykrywanie określonych, ale nieużywanych wewnętrznych (private) właściwości, metod i stałych.
- Przekazywanie niekompatybilnych wywołań callback w funkcjach operujących na tablicach, takich jak array_map i usort.
- Inspekcja typów dla brakujących adnotacji typehint.
- Zapewniono zgodność opisów typów z PHPDocs, co pozwala na używanie w PHPDocs typów z komunikatów o błędach.
Źródło: opennet.ru
