Po sześciu latach rozwoju miała miejsce pierwsza stabilna wersja analizatora statycznego PHPStan 1.0, który pozwala znaleźć błędy w kodzie PHP bez jego wykonywania i stosowania testów jednostkowych. Kod projektu napisany jest w języku PHP i rozpowszechniany na licencji MIT.
Analizator udostępnia 10 poziomów sprawdzania, przy czym każdy kolejny poziom rozszerza możliwości poprzedniego i zapewnia bardziej rygorystyczne kontrole:
Przykłady zidentyfikowanych podstawowych problemów:
- Istnienie klas używanych w instancji, catch, typehints i innych konstrukcjach językowych.
- Istnienie i dostępność wywoływanych metod i funkcji, a także liczba przekazanych argumentów.
- Sprawdzanie, czy metoda zwraca dane tego samego typu, jak zdefiniowany w wyrażeniu zwrotnym.
- Istnienie i widoczność właściwości, do których uzyskuje się dostęp oraz sprawdzenie deklarowanych i rzeczywistych typów danych używanych we właściwościach.
- Liczba parametrów przekazanych do wywołań sprintf/printf w bloku formatowania ciągu jest poprawna.
- Istnienie zmiennych uwzględniających bloki utworzone przez operatory rozgałęziające i pętle.
- Bezużyteczne rzutowanie typów (np. „(string) 'foo'”) i ścisłe testy („===" i „!==") na danych różnych typów i operandów, które zawsze zwracają wartość false.
Kluczowe innowacje w PHPStan 1.0:
- Zaimplementowano poziom kontroli „9”, który sprawdza użycie typu „mieszanego”, przeznaczonego do organizowania odbioru przez funkcję parametrów o różnych typach. Poziom XNUMX identyfikuje niebezpieczne zastosowania „mieszanego”, takie jak przekazywanie wartości typu „mieszany” do innego typu, wywoływanie metod typu „mieszanego” i uzyskiwanie dostępu do jego właściwości, ponieważ mogą one nie istnieć.
- Kontroluj, czy zwracane wartości są identyczne dla identycznych wywołań funkcji, korzystając z adnotacji @phpstan-pure i @phpstan-impure.
- Analiza typów w konstrukcjach try-catch-finally przy użyciu adnotacji @throws.
- Identyfikacja zdefiniowanych, ale niewykorzystanych wewnętrznych (prywatnych) właściwości, metod i stałych.
- Przekazywanie niezgodnych wywołań zwrotnych do funkcji tablicowych, takich jak array_map i usort.
- Kontrola typu pod kątem brakujących adnotacji TypeHint.
- Dokonano zgodności deklaracji typów z PHPDocs, umożliwiając używanie typów z komunikatów o błędach w PHPDocs.
Źródło: opennet.ru