Udgivelse af PHPStan 1.0, en statisk analysator til PHP-kode

Efter seks års udvikling fandt den første stabile udgivelse af den statiske analysator PHPStan 1.0 sted, som giver dig mulighed for at finde fejl i PHP-kode uden at udføre den og bruge enhedstests. Projektkoden er skrevet i PHP og distribueret under MIT-licensen.

Analysatoren giver 10 kontrolniveauer, hvor hvert efterfølgende niveau udvider mulighederne for det foregående og giver mere stringente kontroller:

  • Grundlæggende kontroller, definering af ukendte klasser, funktioner og metoder ($this), udefinerede variabler og videregivelse af det forkerte antal argumenter.
  • Identifikation af muligvis udefinerede variabler, ukendte magiske metoder og egenskaber for klasser med __call og __get.
  • Detektion af ukendte metoder i alle udtryk, ikke begrænset til opkald via $this. Kontrollerer PHPDocs.
  • Kontrol af returtyper og tildeling af typer til ejendomme.
  • Grundlæggende identifikation af "død" (aldrig kaldt) kode. Identificer forekomst af opkald, der altid returnerer falsk, "else"-blokke, der aldrig udløses, og kode efter returnering.
  • Kontrol af de typer argumenter, der sendes til metoder og funktioner.
  • Advarsel om manglende typeinformationsannoteringer.
  • Advarsel om forkerte fagforeningstyper, der definerer samlinger af to eller flere typer.
  • Advarsel om opkaldsmetoder og adgang til egenskaber med typer "nullable".
  • Kontrol af brugen af ​​den "blandede" type.

    Eksempler på underliggende identificerede problemer:

    • Eksistensen af ​​klasser, der bruges i instanceof, catch, typehints og andre sprogkonstruktioner.
    • Eksistensen og tilgængeligheden af ​​metoder og funktioner, der kaldes, samt antallet af beståede argumenter.
    • Kontrollerer, at metoden returnerer data med samme type som defineret i returudtrykket.
    • Eksistensen og synligheden af ​​de egenskaber, der tilgås, og kontrol af de erklærede og faktiske datatyper, der bruges i egenskaberne.
    • Antallet af parametre, der sendes til sprintf/printf-kald i strengformateringsblokken, er korrekt.
    • Eksistensen af ​​variabler, der tager højde for blokke dannet af forgrenende operatører og sløjfer.
    • Ubrugelige typeafstøbninger (f.eks. "(streng) 'foo'") og strenge tests ("===" og "!==") på data med forskellige typer og operander, der altid returnerer falsk.

    Vigtigste innovationer i PHPStan 1.0:

    • Kontrolniveauet "9" er implementeret, som kontrollerer brugen af ​​typen "blandet", beregnet til at organisere funktionens modtagelse af parametre med forskellige typer. Niveau XNUMX identificerer usikker brug af "blandet", såsom at overføre værdier af typen "blandet" til en anden type, kalde metoder af typen "blandet" og få adgang til dets egenskaber, fordi de muligvis ikke eksisterer.
    • Kontroller, om returværdier er identiske for identiske funktionskald ved hjælp af @phpstan-pure og @phpstan-impure annoteringerne.
    • Typeanalyse i try-catch-finally-konstruktioner ved hjælp af @throws-annoteringer.
    • Identifikation af definerede, men ubrugte interne (private) egenskaber, metoder og konstanter.
    • Sender inkompatible tilbagekald til array-funktioner såsom array_map og usort.
    • Typekontrol for manglende typehint-anmærkninger.
    • Lavede typeerklæringer kompatible med PHPDocs, hvilket tillod typer fra fejlmeddelelser at blive brugt i PHPDocs.

    Kilde: opennet.ru

  • Tilføj en kommentar