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
