Crea tu GitHook con phpstan y php-cs-fixer

PHP-CS-Fixer – herramientas de desarrollo para proyectos PHP

En el ámbito del desarrollo de software, es crucial mantener un código limpio y de alta calidad para asegurar su sostenibilidad a largo plazo. Herramientas como PHPStan y PHP-CS-Fixer son esenciales para elevar la calidad del código. Este artículo te guiará en la configuración de un hook de Git que ejecute automáticamente estas herramientas antes de cada commit, garantizando así la integridad y limpieza de tu código.


PHPStan: Análisis Estático para PHP

De PHPStan ya hablamos en una entrada anterior pero hagamos un pequeño resumen. Es una herramienta de análisis estático para PHP que nos permite detectar posibles errores, problemas de rendimiento y mejoras en nuestro código sin necesidad de ejecutarlo. Con su análisis exhaustivo, phpstan nos brinda una mayor confianza en la calidad de nuestro código.


PHP-CS-Fixer: Automatización del Estilo de Código

PHP-CS-Fixer es una herramienta de línea de comandos desarrollada por el equipo de Symfony. Su objetivo principal es corregir automáticamente el estilo y formato del código PHP de acuerdo con un conjunto predefinido de reglas. Utiliza un motor de análisis estático para recorrer los archivos PHP y aplicar las correcciones necesarias para asegurar que el código cumpla con las convenciones y estándares establecidos.

Ventajas de utilizar PHP-CS-Fixer:

  1. 1 – Mantenimiento de un estilo de código consistente: PHP-CS-Fixer te permite definir y aplicar un estilo de código consistente en todo tu proyecto. Al seguir un conjunto de reglas predefinidas (como PSR-12 o PSR-2) o reglas personalizadas, puedes asegurarte de que todos los desarrolladores en tu equipo sigan las mismas convenciones de codificación, lo que facilita la lectura y comprensión del código.

  2. 2 – Mejora de la calidad del código: Al corregir automáticamente el estilo del código, PHP-CS-Fixer ayuda a eliminar inconsistencias y errores comunes en el formato, como espacios en blanco incorrectos, indentación inconsistente, uso incorrecto de comillas, etc. Esto mejora la calidad general del código y reduce la posibilidad de errores causados por problemas de formato.

  3. 3 – Ahorro de tiempo y esfuerzo: Al automatizar la corrección del estilo del código, PHP-CS-Fixer ahorra tiempo y esfuerzo a los desarrolladores. En lugar de revisar manualmente cada archivo en busca de problemas de formato, la herramienta se encarga de ello, permitiendo a los desarrolladores concentrarse en escribir un código funcional y de alta calidad.


Git Hooks: Automatización y Calidad

Los Git Hooks son scripts personalizados que se ejecutan automáticamente en eventos específicos de Git, como confirmar cambios, empujar cambios, etc. Nos permiten automatizar tareas y establecer políticas de desarrollo para garantizar un flujo de trabajo consistente en nuestro proyecto.

En este caso, configuraremos un hook pre-commit, que se ejecutará antes de cada confirmación de cambios. Utilizaremos este hook para ejecutar phpstan y php-cs-fixer, asegurando así que nuestro código cumpla con los estándares de calidad establecidos.


Configuración del Hook

Paso 1: Creación de Proyecto e Instalación de Linters

A continuación, detallaremos los pasos necesarios para instalar y configurar el hook. Para eso crearemos un mini proyecto en laravel

Paso 1: Crear un proyecto e instalar los linters


             composer create-project laravel/laravel laravelApp
             cd laravelApp
         

A continuación, instalamos phpstan y php-cs-fixer mediante los siguientes comandos:


            composer require --dev phpstan/phpstan
            composer require --dev friendsofphp/php-cs-fixer
         

Luego, creamos el archivo de configuración .php-cs-fixer.php en la raíz del proyecto y agregamos una configuración básica.

Paso 2: Modificar el archivo composer.json

En el archivo `composer.json`, agregamos las siguientes líneas dentro de la sección «scripts»:


            "php-stan": "vendor/bin/phpstan analyse app tests --level=4",
            "php-fixer": "vendor/bin/php-cs-fixer fix --config .php-cs-fixer.php",
            "tests": "vendor/bin/phpunit"
         

Estos scripts nos permitirán ejecutar phpstan, php-cs-fixer y PHPUnit respectivamente.

Paso 3: Crear un repositorio y enlazarlo con nuestro proyecto

Creamos un repositorio en la plataforma Git de tu elección y, desde la terminal, nos situamos en nuestro proyecto y ejecutamos los siguientes comandos:


            git init
            git remote add origin https://github.com/Username/NombreDelRepol.git
            git add .
            git commit -m "Primer commit"
            git push origin main
         

Estos comandos inicializarán un repositorio Git, lo enlazarán con nuestro repositorio remoto y realizarán el primer envío de cambios.

Paso 4: Creación y Configuración del Hook Pre-Commit

Para configurar el hook pre-commit, creamos la carpeta .githooks en la raíz del proyecto y dentro de ella, creamos el archivo pre-commit con el siguiente contenido:


            #!/usr/bin/env bash
            echo "pre commit hook start"

            echo "init tests and phpstan"
            bash -c "composer tests && composer run php-stan" || exit 1

            CHANGED_FILES=$(git diff --cached  --name-only --diff-filter=ACM -- '*.php' | tr '\n' ' ')
            if [ -n "$CHANGED_FILES" ]; then
               echo "init php-fixer"
               bash -c "composer php-fixer $CHANGED_FILES; git add $CHANGED_FILES;"
               echo "finish tests and php-fixer"
            fi
            echo "pre commit hook finish"
         

Luego, le damos permisos de ejecución al archivo mediante el siguiente comando:


            chmod +x .githooks/pre-commit
         

¡Listo! Ahora, cada vez que realices una confirmación de cambios, phpstan y php-cs-fixer se ejecutarán automáticamente, ayudándote a mantener un código limpio y de calidad.

Para finalizar, configuramos Git para que utilice nuestros hooks al realizar confirmaciones de cambios:

            git config --local core.hooksPath .githooks/
         

La configuración de un hook de Git con PHPStan y PHP-CS-Fixer es un paso fundamental hacia la mejora continua de la calidad del código. Implementar esta automatización no solo asegura un código limpio y sin errores, sino que también fomenta mejores prácticas de desarrollo dentro de tu equipo.

¡Explora más! Si deseas profundizar en estas herramientas, te invitamos a leer nuestros artículos sobre PHPStan y PHP-CS-Fixer en nuestro blog. Descubre cómo pueden transformar tu flujo de trabajo y mejorar la calidad de tu código.

feliz código a tod@s!!

Enlaces relacionados

Configuraciones para PHP-CS-FIXER

PHPDev, web con ejemplo de configuración para PHP-CS-FIXER

Un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *