PHPStan 1.0 har släppts, en statisk analysator för PHP-kod.

Efter sex års utveckling har den första stabila versionen av den statiska analysatorn PHPStan 1.0 släppts, vilket gör det möjligt att hitta fel i PHP-kod utan att köra den och utan att använda enhetstester. Projektets kod är skriven i PHP och distribueras under MIT-licensen.

Analysatorn erbjuder 10 nivåer av kontroll, där varje efterföljande nivå utökar funktionerna i den föregående och ger strängare kontroller:

  • Grundläggande kontroller, identifiering av okända klasser, funktioner och metoder ($this), icke-definierade variabler samt överföring av felaktigt antal argument.
  • Identifiering av potentiellt odefinierade variabler, okända magiska metoder och klassens egenskaper med __call och __get.
  • Identifiering av okända metoder i alla uttryck, inte begränsat till anrop via $this. Kontroll av PHPDocs.
  • Kontroll av returtyper och tilldelning av typer till egenskaper.
  • Grundläggande identifiering av "död" (aldrig kallad) kod. Identifiering av instanceof-anrop som alltid ger false, block "else" som aldrig inträffar samt kod som kommer efter return.
  • Kontroll av argumenttyper som överförs till metoder och funktioner.
  • Varning om frånvaro av annotationer med typinformation.
  • Varning om felaktiga unionstyper som definierar samlingar av två eller fler typer.
  • Varning om anrop av metoder och åtkomst till egenskaper med "nullable"-typer.
  • Kontroll av användning av typen "mixed".

    Exempel på identifierade grundläggande problem:

    • Existensen av klasser som används i instanceof, catch, typehints och andra språkstrukturer.
    • Existens och tillgång till anropade metoder och funktioner, liksom antalet överförda argument.
    • Kontroll av att metoder returnerar data med samma typ som anges i returuttrycket.
    • Existens och synlighet av de egenskaper som refereras samt kontroll av deklarerade och faktiska datatyper som används i egenskaper.
    • Korrekthet av antalet parametrar som överförs i anrop till sprintf/printf i block för strängformatering.
    • Existensen av variabler med hänsyn till block som skapas av grenoperatorer och loopar.
    • Onödiga typomvandlingar (t.ex. "(string) 'foo'"), och strikta kontroller ("===" och "!==") av data med olika typer och operander som alltid ger false.

    Nyckelinnovationer i PHPStan 1.0:

    • Implementeringen av kontrollnivå "9" utför kontroller för användning av typ "mixed", avsedd för att acceptera parametrar av olika typer. Nivå nio identifierar osäkra metoder att använda "mixed", som att överföra värden av typen "mixed" till en annan typ, anropa metoder med typen "mixed" och komma åt dess egenskaper, eftersom dessa kanske inte existerar.
    • Hantera identitetskontrollen av returvärden för likadana funktionsanrop med hjälp av annotationerna @phpstan-pure och @phpstan-impure.
    • Typanalys i конструкции try-catch-finally med användning av annotationerna @throws.
    • Identifiering av vissa, men oanvända interna (private) egenskaper, metoder och konstanter.
    • Överföring av inkompatibla callback-anrop till funktionsmetoder som array_map och usort.
    • Inspektion av typer för saknade typehint-annoteringar.
    • Kompatibilitet av typbeskrivningar med PHPDocs säkerställs, vilket möjliggör användning av typer från felmeddelanden i PHPDocs.

    Källa: opennet.ru

  • Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster