Wydanie PHPStan 1.0, statycznego analizatora kodu PHP

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:

  • Podstawowe kontrole, definiowanie nieznanych klas, funkcji i metod ($this), niezdefiniowanych zmiennych i przekazywanie niewłaściwej liczby argumentów.
  • Identyfikacja ewentualnie niezdefiniowanych zmiennych, nieznanych metod magicznych i właściwości klas za pomocą __call i __get.
  • Wykrywanie nieznanych metod we wszystkich wyrażeniach, nie ograniczając się do wywołań poprzez $this. Sprawdzanie PHPDocs.
  • Sprawdzanie typów zwracanych i przypisywanie typów do właściwości.
  • Podstawowa identyfikacja „martwego” (nigdy wywoływanego) kodu. Zidentyfikuj instancje wywołań, które zawsze zwracają wartość false, bloki „else”, które nigdy nie są uruchamiane, oraz kod po zwróceniu.
  • Sprawdzanie typów argumentów przekazywanych do metod i funkcji.
  • Ostrzeżenie o brakujących adnotacjach informacji o typie.
  • Ostrzeżenie dotyczące nieprawidłowych typów unii, które definiują kolekcje dwóch lub więcej typów.
  • Ostrzeżenie dotyczące wywoływania metod i uzyskiwania dostępu do właściwości za pomocą typów „nullable”.
  • Sprawdzanie zastosowania typu „mieszanego”.

    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

  • Dodaj komentarz