Rilascio di PHPStan 1.0, un analizzatore statico per codice PHP

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:

  • Controlli di base, definizione di classi, funzioni e metodi sconosciuti ($this), variabili non definite e passaggio del numero errato di argomenti.
  • Identificazione di variabili possibilmente non definite, metodi magici sconosciuti e proprietà delle classi con __call e __get.
  • Rilevamento di metodi sconosciuti in tutte le espressioni, non limitato alle chiamate tramite $this. Controllo PHPDocs.
  • Controllo dei tipi restituiti e assegnazione dei tipi alle proprietà.
  • Identificazione di base del codice “morto” (mai chiamato). Identifica l'istanza delle chiamate che restituiscono sempre false, i blocchi "else" che non si attivano mai e il codice dopo il ritorno.
  • Verifica dei tipi di argomenti passati a metodi e funzioni.
  • Avviso relativo alle annotazioni relative alle informazioni sul tipo mancanti.
  • Avviso sui tipi di unione errati che definiscono raccolte di due o più tipi.
  • Avviso relativo alla chiamata di metodi e all'accesso alle proprietà con tipi "nullable".
  • Verifica dell'utilizzo della tipologia “mista”.

    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

  • Aggiungi un commento