Release van PHPStan 1.0, een statische analysator voor PHP-code

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:

  • Basiscontroles, het definiëren van onbekende klassen, functies en methoden ($this), ongedefinieerde variabelen en het doorgeven van het verkeerde aantal argumenten.
  • Mogelijk ongedefinieerde variabelen, onbekende magische methoden en eigenschappen van klassen identificeren met __call en __get.
  • Detectie van onbekende methoden in alle expressies, niet beperkt tot oproepen via $this. PHPDocs controleren.
  • Retourtypen controleren en typen aan eigenschappen toewijzen.
  • Basisidentificatie van “dode” (nooit opgeroepen) code. Identificeer exemplaren van oproepen die altijd false retourneren, 'else'-blokken die nooit worden geactiveerd, en codeer na terugkeer.
  • Controleren van de typen argumenten die aan methoden en functies worden doorgegeven.
  • Waarschuwing over ontbrekende annotaties met type-informatie.
  • Waarschuwing voor onjuiste samenvoegingstypen die verzamelingen van twee of meer typen definiëren.
  • Waarschuwing over het aanroepen van methoden en toegang tot eigenschappen met typen "nullable".
  • Controle van het gebruik van het "gemengde" type.

    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

  • Voeg een reactie