Usar PHPStan para evitar que se nos cuelen funciones de depuración

Submitted by Oskar on Thu, 20/05/2021 - 23:39

Vamos por partes, cuando trabajamos con un editor de código en PHP deberíamos usar XDebug para depurar código, pero no siempre es así y a veces usamos funciones de depuración, en Drupal tenemos funciones propias `ddl()` del módulo devel debug log, `dpm`, o las funciones nativas de php `var_dump` o `print_r`, etc...

Si se nos cuela alguna de estas funciones se puede liar, desde errores al invocar una función que no existe en producción* hasta que salga todo el output de depuración a un cliente.

Para evitar este tipo de errores podemos usar PHPStan, en este caso y para ello necesitamos este complemento de PHPStan: https://github.com/spaze/phpstan-disallowed-calls 

Añadimos esta configuración en archivo php.neon

parameters:
    disallowedMethodCalls:
        -
            method: 'PotentiallyDangerous\Logger::log()'
            message: 'use our own logger instead'
        -
            method: 'Redis::connect()'
            message: 'use our own Redis instead'

    disallowedStaticCalls:
        -
            method: 'PotentiallyDangerous\Debugger::log()'
            message: 'use our own logger instead'

    disallowedFunctionCalls:
        -
            function: 'var_dump()'
            message: 'use logger instead'
        -
            function: 'print_r()'
            message: 'use logger instead'

    disallowedConstants:
        -
            constant: 'DATE_ISO8601'
            message: 'use DATE_ATOM instead'
        -
            class: 'DateTimeInterface'
            constant: 'ISO8601'
            message: 'use DateTimeInterface::ATOM instead'

    disallowedNamespaces:
        -
            namespace: 'Symfony\Component\HttpFoundation\RequestStack'
            message: 'pass Request via controller instead'
            allowIn:
                - tests/*
        -
            namespace: 'Assert\*'
            message: 'use Webmozart\Assert instead'


Disfrutadlo.

* Composer permite instalar dependencias en los entornos de desarrollo y que no se instalen en los entornos de producción `composer install XXX/XXXX --dev`