Etter seks år med utvikling fant den første stabile utgivelsen av den statiske analysatoren PHPStan 1.0 sted, som lar deg finne feil i PHP-kode uten å kjøre den og bruke enhetstester. Prosjektkoden er skrevet i PHP og distribuert under MIT-lisensen.
Analysatoren gir 10 kontrollnivåer, der hvert påfølgende nivå utvider mulighetene til det forrige og gir strengere kontroller:
Eksempler på underliggende problemer som er identifisert:
- Eksistensen av klasser brukt i forekomst av, catch, typehints og andre språkkonstruksjoner.
- Eksistensen og tilgjengeligheten av metoder og funksjoner som kalles, samt antall argumenter som er bestått.
- Kontrollerer at metoden returnerer data med samme type som definert i returuttrykket.
- Eksistensen og synligheten til egenskapene som er tilgjengelig, og kontroll av de deklarerte og faktiske datatypene som brukes i egenskapene.
- Antall parametere som sendes til sprintf/printf-kall i strengformateringsblokken er riktig.
- Eksistensen av variabler som tar hensyn til blokker dannet av forgreningsoperatører og løkker.
- Ubrukelige typekast (f.eks. "(streng) 'foo'") og strenge tester ("===" og "!==") på data med forskjellige typer og operander som alltid returnerer usant.
Nøkkelinnovasjoner i PHPStan 1.0:
- Kontrollnivået "9" er implementert, som kontrollerer bruken av typen "blandet", beregnet på å organisere funksjonens mottak av parametere med forskjellige typer. Nivå XNUMX identifiserer usikker bruk av "blandet", for eksempel å overføre verdier av typen "blandet" til en annen type, kalle metoder av typen "blandet", og få tilgang til egenskapene fordi de kanskje ikke eksisterer.
- Kontroller om returverdier er identiske for identiske funksjonskall ved å bruke @phpstan-pure og @phpstan-impure-kommentarene.
- Skriv analyse i try-catch-finally-konstruksjoner ved å bruke @throws-kommentarer.
- Identifikasjon av definerte men ubrukte interne (private) egenskaper, metoder og konstanter.
- Sender inkompatible tilbakeringinger til array-funksjoner som array_map og usort.
- Typeinspeksjon for manglende skrivehintkommentarer.
- Laget typedeklarasjoner som er kompatible med PHPDocs, slik at typer fra feilmeldinger kan brukes i PHPDocs.
Kilde: opennet.ru