Die Veröffentlichung von PHPStan 1.0, einem statischen Code-Analysator für PHP

Nach sechs Jahren Entwicklung fand die erste stabile Veröffentlichung des statischen Analysewerkzeugs PHPStan 1.0 statt, das es ermöglicht, Fehler im PHP-Code zu finden, ohne ihn auszuführen und ohne Verwendung von Unit-Tests. Der Code des Projekts ist in PHP geschrieben und wird unter der MIT-Lizenz verbreitet.

Der Analysator bietet 10 Prüfungsstufen, wobei jede nachfolgende Stufe die Möglichkeiten der vorherigen erweitert und strengere Überprüfungen ermöglicht:

  • Grundlegende Überprüfungen, die unbekannte Klassen, Funktionen und Methoden ($this), undefinierte Variablen sowie das Übergeben einer falschen Anzahl von Argumenten feststellen.
  • Erkennung wahrscheinlich undefinierter Variablen, unbekannter Magic-Methoden und Klassen-Eigenschaften mit __call und __get.
  • Erkennung unbekannter Methoden in allen Ausdrücken, nicht beschränkt auf Aufrufe über $this. Überprüfung von PHPDocs.
  • Überprüfung der Rückgabetypen und der Typzuweisungen für Eigenschaften.
  • Basiserkennung von 'toten' (niemals aufgerufenen) Codes. Identifizierung von instanceof-Aufrufen, die immer false zurückgeben, niemals ausgeführten 'else'-Blöcken und Code, der sich nach return befindet.
  • Überprüfung von Argumenttypen, die in Methoden und Funktionen übergeben werden.
  • Warnung über fehlende Annotationen mit Typinformationen.
  • Warnung über inkorrekte Union-Typen, die Sammlungen aus zwei oder mehr Typen definieren.
  • Warnung über den Aufruf von Methoden und den Zugriff auf Eigenschaften mit 'nullable'-Typen.
  • Überprüfung der Verwendung des Typs 'mixed'.

    Beispiele für erkennbare grundlegende Probleme:

    • Existenz von Klassen, die in instanceof, catch, Typehints und anderen Sprachkonstrukten verwendet werden.
    • Existenz und Verfügbarkeit aufrufbarer Methoden und Funktionen sowie die Anzahl der übergebenen Argumente.
    • Überprüfung, ob die Methode Daten mit dem gleichen Typ zurückgibt, wie er im return-Ausdruck definiert ist.
    • Existenz und Sichtbarkeit der Eigenschaften, auf die zugegriffen wird, sowie die Überprüfung der deklarierten und tatsächlichen Datentypen, die in den Eigenschaften verwendet werden.
    • Korrektheit der Anzahl der Parameter, die in den sprintf/printf-Aufrufen im Formatierungsblock für Strings übergeben werden.
    • Existenz von Variablen unter Berücksichtigung der Blöcke, die durch Verzweigungsoperatoren und Schleifen gebildet werden.
    • Nutzlose Typumwandlungen (z. B. '(string) 'foo'') und strenge Überprüfungen ('===' und '!==') von Daten mit unterschiedlichen Typen und Operanden, die immer false zurückgeben.

    Wesentliche Neuerungen in PHPStan 1.0:

    • Die Prüfungsebene "9" wurde implementiert, die Prüfungen für den Typ "mixed" durchführt, um die Annahme von Funktionsparametern mit unterschiedlichen Typen zu ermöglichen. Die neunte Ebene erkennt unsichere Verwendungen von "mixed", wie z. B. die Übergabe von Werten mit dem Typ "mixed" an einen anderen Typ, den Aufruf von Methoden mit dem Typ "mixed" und den Zugriff auf seine Eigenschaften, da diese möglicherweise nicht existieren.
    • Verwaltung der Identitätsprüfung zurückgegebener Werte für identische Funktionsaufrufe unter Verwendung der Annotationen @phpstan-pure und @phpstan-impure.
    • Typanalyse in try-catch-finally-Konstruktionen unter Verwendung der Annotation @throws.
    • Erkennung bestimmter, aber nicht verwendeter interner (private) Eigenschaften, Methoden und Konstanten.
    • Übertragung inkompatibler Callback-Aufrufe in Array-Verarbeitungsfunktionen wie array_map und usort.
    • Inspektion der Typen für fehlende Typehint-Annotationen.
    • Die Kompatibilität von Typbeschreibungen mit PHPDocs wurde sichergestellt, was die Verwendung von Typen aus Fehlermeldungen in PHPDocs ermöglicht.

    Quelle: opennet.ru

  • 60GB SSD 8Gb DDR4