Na zes jaar ontwikkeling vond de eerste stabiele release van de statische analysator PHPStan 1.0 plaats, waarmee je fouten in PHP-code kunt vinden zonder deze uit te voeren en unit-tests te gebruiken. De projectcode is geschreven in PHP en wordt gedistribueerd onder de MIT-licentie.
De analysator biedt 10 controleniveaus, waarbij elk volgend niveau de mogelijkheden van het vorige uitbreidt en strengere controles biedt:
Voorbeelden van geïdentificeerde onderliggende problemen:
- Het bestaan van klassen die worden gebruikt in instanceof, catch, typehints en andere taalconstructies.
- Het bestaan en de beschikbaarheid van aangeroepen methoden en functies, evenals het aantal doorgegeven argumenten.
- Controleren of de methode gegevens retourneert van hetzelfde type als gedefinieerd in de retourexpressie.
- Het bestaan en de zichtbaarheid van de eigenschappen waartoe toegang wordt verkregen, en het controleren van de gedeclareerde en daadwerkelijke gegevenstypen die in de eigenschappen worden gebruikt.
- Het aantal parameters dat wordt doorgegeven aan sprintf/printf-aanroepen in het tekenreeksformatteringsblok is correct.
- Het bestaan van variabelen die rekening houden met blokken gevormd door vertakkende operatoren en lussen.
- Nutteloze typecasts (bijv. "(string) 'foo'") en strikte tests ("===" en "!==") op gegevens met verschillende typen en operanden die altijd false retourneren.
Belangrijkste innovaties in PHPStan 1.0:
- Het controleniveau “9” is geïmplementeerd, dat het gebruik van het “gemengde” type controleert, bedoeld voor het organiseren van de ontvangst van parameters met verschillende typen door de functie. Niveau XNUMX identificeert onveilig gebruik van "mixed", zoals het doorgeven van waarden van het type "mixed" aan een ander type, het aanroepen van methoden van het type "mixed" en het toegang krijgen tot de eigenschappen ervan omdat deze mogelijk niet bestaan.
- Controleer of retourwaarden identiek zijn voor identieke functieaanroepen met behulp van de annotaties @phpstan-pure en @phpstan-impure.
- Typ analyse in try-catch-finally-constructies met behulp van @throws-annotaties.
- Identificatie van gedefinieerde maar ongebruikte interne (privé) eigenschappen, methoden en constanten.
- Incompatibele callbacks doorgeven aan arrayfuncties zoals array_map en usort.
- Type-inspectie voor ontbrekende typehint-annotaties.
- Typedeclaraties compatibel gemaakt met PHPDocs, waardoor typen van foutmeldingen in PHPDocs kunnen worden gebruikt.
Bron: opennet.ru