Dopo sei anni di sviluppo è arrivata la prima versione stabile dell'analizzatore statico PHPStan 1.0, che permette di trovare errori nel codice PHP senza eseguirlo e utilizzando unit test. Il codice del progetto è scritto in PHP e distribuito sotto la licenza MIT.
L'analizzatore fornisce 10 livelli di controllo, in cui ogni livello successivo espande le capacità del precedente e fornisce controlli più rigorosi:
Esempi di problemi di fondo identificati:
- L'esistenza di classi utilizzate in exampleof, catch, typehints e altri costrutti linguistici.
- L'esistenza e la disponibilità di metodi e funzioni chiamati, nonché il numero di argomenti passati.
- Verifica che il metodo restituisca dati con lo stesso tipo definito nell'espressione restituita.
- L'esistenza e la visibilità delle proprietà a cui si accede e il controllo dei tipi di dati dichiarati ed effettivi utilizzati nelle proprietà.
- Il numero di parametri passati alle chiamate sprintf/printf nel blocco di formattazione della stringa è corretto.
- L'esistenza di variabili che tengono conto di blocchi formati da operatori di ramificazione e cicli.
- Cast di tipi inutili (ad esempio "(string) 'foo'") e test rigorosi ("===" e "!==") su dati con tipi e operandi diversi che restituiscono sempre false.
Principali innovazioni in PHPStan 1.0:
- È stato implementato il livello di controllo “9” che verifica l’utilizzo della tipologia “mista”, destinata ad organizzare la ricezione da parte della funzione di parametri di tipologia diversa. Il livello XNUMX identifica gli usi non sicuri di "mixed", come passare valori di tipo "mixed" a un altro tipo, chiamare metodi di tipo "mixed" e accedere alle sue proprietà perché potrebbero non esistere.
- Controlla se i valori restituiti sono identici per chiamate di funzione identiche utilizzando le annotazioni @phpstan-pure e @phpstan-impure.
- Digitare l'analisi nei costrutti try-catch-finally utilizzando le annotazioni @throws.
- Identificazione di proprietà, metodi e costanti interni (privati) definiti ma non utilizzati.
- Passaggio di callback incompatibili a funzioni di array come array_map e usort.
- Ispezione del tipo per annotazioni typehint mancanti.
- Ha reso le dichiarazioni di tipo compatibili con PHPDocs, consentendo l'utilizzo dei tipi dei messaggi di errore in PHPDocs.
Fonte: opennet.ru