Llançament de PHPStan 1.0, un analitzador estàtic de codi PHP

Després de sis anys de desenvolupament, va tenir lloc el primer llançament estable de l'analitzador estàtic PHPStan 1.0, que permet trobar errors en el codi PHP sense executar-lo i utilitzant proves unitàries. El codi del projecte està escrit en PHP i es distribueix sota la llicència MIT.

L'analitzador ofereix 10 nivells de comprovació, en els quals cada nivell posterior amplia les capacitats de l'anterior i proporciona controls més estrictes:

  • Comprovacions bàsiques, definició de classes, funcions i mètodes desconeguts ($this), variables no definides i passant el nombre incorrecte d'arguments.
  • Identificació de variables possiblement indefinides, mètodes màgics desconeguts i propietats de classes amb __call i __get.
  • Detecció de mètodes desconeguts en totes les expressions, no limitats a les trucades mitjançant $this. Comprovant PHPDocs.
  • Comprovació de tipus de retorn i assignació de tipus a propietats.
  • Identificació bàsica del codi "mort" (mai anomenat). Identifiqueu les instàncies de trucades que sempre tornen falses, els blocs "else" que no s'activen mai i el codi després del retorn.
  • Comprovació dels tipus d'arguments passats a mètodes i funcions.
  • Advertència sobre la falta d'anotacions d'informació de tipus.
  • Advertència sobre tipus d'unió incorrectes que defineixen col·leccions de dos o més tipus.
  • Advertència sobre la trucada a mètodes i l'accés a propietats amb tipus "nul·lables".
  • Comprovació de l'ús del tipus "mixt".

    Exemples de problemes subjacents identificats:

    • L'existència de classes utilitzades en instanceof, catch, typehints i altres construccions del llenguatge.
    • L'existència i disponibilitat dels mètodes i funcions cridats, així com el nombre d'arguments passats.
    • Comprovar que el mètode retorna dades amb el mateix tipus que es defineix a l'expressió de retorn.
    • L'existència i la visibilitat de les propietats a les quals s'accedeix, i la comprovació dels tipus de dades declarats i reals utilitzats a les propietats.
    • El nombre de paràmetres passats a les trucades sprintf/printf al bloc de format de cadena és correcte.
    • L'existència de variables tenint en compte blocs formats per operadors de ramificació i bucles.
    • Emissions de tipus inútils (per exemple, "(cadena) 'foo'") i proves estrictes ("===" i "!==") sobre dades amb diferents tipus i operands que sempre retornen fals.

    Innovacions clau en PHPStan 1.0:

    • S'ha implementat el nivell de verificació “9”, que verifica l'ús del tipus “mixt”, destinat a organitzar la recepció de paràmetres de diferents tipus per part de la funció. El nivell nou identifica usos no segurs de "mixt", com ara passar valors de tipus "mixt" a un altre tipus, cridar mètodes de tipus "mixt" i accedir a les seves propietats perquè potser no existeixen.
    • Controleu si els valors de retorn són idèntics per a trucades de funcions idèntiques mitjançant les anotacions @phpstan-pure i @phpstan-impure.
    • Anàlisi de tipus a les construccions try-catch-finally utilitzant anotacions @throws.
    • Identificació de propietats, mètodes i constants internes (privades) definits però no utilitzats.
    • Passant devolucions de trucada incompatibles a funcions de matriu com ara array_map i usort.
    • Inspecció de tipus per a les anotacions que falten.
    • Fet que les declaracions de tipus siguin compatibles amb PHPDocs, permetent que els tipus de missatges d'error s'utilitzin a PHPDocs.

    Font: opennet.ru

  • Afegeix comentari