Implementar PSR en proyectos o librerías PHP

Author
Por Darío Rivera
Publicado el en PHP

En un post anterior vimos Cómo crear una librería en PHP instalable con Composer. En este post vimos lo suficiente para reutilizar tú código PHP a través de todos tus proyectos de una manera centralizada y eficiente. Sin embargo, si deseas que tu librería o proyecto cumpla los estándares de la comunidad en cuanto estilo de código deberás conocer e implementar PSR (PHP Standard Recomendations).


Instalación

Lo primero que debes hacer es instalar una librería que te ayude a preservar los estilos y recomendaciones de manera automatizada. Para esto puedes instalar la siguiente librería.

composer require --dev squizlabs/php_codesniffer

Configuración

También necesitarás agregar la configuración para el codesniffer en donde se definirán las reglas que aplicará, y los directorios sobre los cuales aplicará estas reglas. Debes crear un archivo en la raíz del proyecto llamado .phpcs.xml. A modo de ejemplo, te presento la siguiente configuración que utilizo en la mayoría de mis proyectos.

<?xml version="1.0"?>
<ruleset name="PHP Coding Standards" namespace="Pleets\CS\Standard">

    <file>./src</file>
    <file>./tests</file>

    <exclude-pattern>./tests/coverage/*</exclude-pattern>

    <rule ref="PSR1"/>
    <rule ref="PSR2"/>
    <rule ref="PSR12"/>

    <rule ref="Squiz.Strings.DoubleQuoteUsage.NotRequired" />

    <rule ref="Zend">
        <exclude name="Zend.NamingConventions.ValidVariableName.PrivateNoUnderscore" />
    </rule>

    <rule ref="Generic.Files.LineLength">
        <properties>
            <property name="lineLimit" value="120"/>
        </properties>
    </rule>

</ruleset>

Puedes profundizar un poco en cada una de las configuraciones posible en la wiki oficial. Lo más importante en la configuración anterior es la definición de los directorios a chequear (./src y ./tests) y la definición de las reglas PSR1, PSR2 y PSR12.

Seguido a esto, puedes agregar un par scripts para facilitar el uso de la librería. Yo en lo personal utilizo los siguientes:

"scripts": {
    "phpcs-check": "phpcs --colors -s",
    "phpcs-fix": "phpcbf --colors -s",
    "phpcs-auto-check": "@phpcs-check --standard=.phpcs.xml",
    "phpcs-auto-fix": "@phpcs-fix --standard=.phpcs.xml",
    "phpcs-auto-check-summary": "phpcs --report=summary -p",
    "phpcs-auto-fix-summary": "phpcbf --report=summary -p"
}

A continuación te explico que hace cada uno de estos scripts:

- phpcs-auto-check: Verifica los errores de PSR que tiene el proyecto a manera detallada.
- phpcs-auto-check-summary: Verifica los errores e PSR que tiene el proyecto a manera de resumen (ideal para ejecutarse en pipelines)
- phpcs-auto-fix: Corrije los errores de PSR y muestra el detalle de los cambios.
- phpcs-auto-fix-summary: Corrije los errores de PSR y muestra un resumen.

Uso

Si has realizado la configuración de script mostrada anteriormente podrías ejecutar el siguiente comando para correr el fixer a modo de chequeo sin modificar nada.

composer phpcs-auto-check

Obtendrás una salida como la siguiente que te muestra los errores por cada archivo.

phpcs example

Este comando lo puedes integrar a tu pipeline para asegurar la homogeneidad del código en la integración continua. Hasta la próxima.


Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.