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 ed è distribuito sotto licenza MIT.
L'analizzatore offre 10 livelli di verifica, ognuno dei quali espande le capacità del precedente e fornisce controlli più rigorosi:
Esempi di problemi di base identificati:
- Esistenza di classi utilizzate in instanceof, catch, typehints e altre costrutti linguistici.
- Esistenza e accessibilità dei metodi e delle funzioni chiamabili, oltre al numero di argomenti passati.
- Verifica del ritorno di dati da un metodo con lo stesso tipo definito nell'espressione return.
- Esistenza e visibilità delle proprietà a cui si accede, oltre alla verifica dei tipi dichiarati e reali 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 generati dai comandi di branching e dai cicli.
- Conversioni di tipo inutili (ad esempio, '(string) ‘foo’') e verifiche rigorose ('===' e '!==') di dati con tipi e operatori diversi, che restituiscono sempre false.
Novità chiave di PHPStan 1.0:
- È stato implementato un livello di verifica '9', che effettua controlli sull'uso del tipo 'mixed', destinato a gestire l'accettazione di parametri di funzione con tipi diversi. Il nono livello rileva pratiche non sicure nell'uso del 'mixed', come la trasmissione di valori di tipo 'mixed' a un altro tipo, la chiamata di metodi con tipo 'mixed' e l'accesso alle sue proprietà, poiché potrebbero non esistere.
- Gestione della verifica di identità dei valori restituiti per chiamate a funzioni identiche utilizzando 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) definite ma non utilizzate.
- Passaggio di callback incompatibili a funzioni di manipolazione degli array, come array_map e usort.
- Ispezione dei tipi per annotazioni typehint mancanti.
- Garantita la compatibilità delle descrizioni dei tipi con i PHPDocs, consentendo l'uso in PHPDocs di tipi provenienti dai messaggi di errore.
Fonte: opennet.ru
