Dopo sei anni di sviluppo è stata rilasciata la prima versione stabile dell'analizzatore statico PHPStan 1.0, che consente di trovare errori nel codice PHP senza eseguirlo e senza utilizzare unit test. Il codice del progetto è scritto in PHP e viene distribuito con licenza MIT.
L'analizzatore offre 10 livelli di verifica, in cui ogni livello successivo amplia le possibilità del precedente e fornisce controlli più rigorosi:
Esempi di problemi di base identificabili:
- Esistenza di classi utilizzate in instanceof, catch, typehints e altre strutture linguistiche.
- Esistenza e accessibilità di metodi e funzioni richiamabili, nonché numero di argomenti passati.
- Verifica che i dati restituiti da un metodo abbiano lo stesso tipo definito nell'espressione return.
- Esistenza e visibilità delle proprietà a cui si accede, oltre alla verifica dei tipi dichiarati e reali dei dati utilizzati nelle proprietà.
- Correttezza del numero di parametri passati alle chiamate sprintf/printf nel blocco di formattazione delle stringhe.
- Esistenza di variabili tenendo conto dei blocchi formati da operatori di branching e cicli.
- Conversioni di tipo inutili (ad esempio, '(string) 'foo'') e verifiche rigorose ('===' e '!==') dei dati con tipi e operatori diversi, che restituiscono sempre false.
Innovazioni chiave di PHPStan 1.0:
- È stato implementato il livello di verifica «9», che esegue controlli sull'uso del tipo «mixed», destinato ad organizzare l'accettazione di parametri di funzione con tipi diversi. Il nono livello rileva pratiche di utilizzo «mixed» non sicure, come la trasmissione di valori di tipo «mixed» ad un altro tipo, la chiamata di metodi con tipo «mixed» e l'accesso alle sue proprietà, poiché potrebbero non esistere.
- Gestione della verifica dell'identità dei valori restituiti per chiamate di funzioni identiche usando le annotazioni @phpstan-pure e @phpstan-impure.
- Analisi dei tipi nelle strutture try-catch-finally utilizzando le annotazioni @throws.
- Identificazione di proprietà, metodi e costanti interni (private) specifici ma non utilizzati.
- Trasmissione di chiamate di callback incompatibili in funzioni di lavoro con array, come array_map e usort.
- Ispezione dei tipi per annotazioni typehint mancanti.
- È garantita la compatibilità delle descrizioni dei tipi con PHPDocs, consentendo di utilizzare in PHPDocs tipi dai messaggi di errore.
Fonte: opennet.ru
