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:
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
