Usando PHP Code Sniffer y PHP Mess Detector con Magento

Php Code Sniffer en Magento

Mucho se habla y más aún mucho se jacta en cuanto a las buenas prácticas de programación y controles de calidad. Lo cierto es que aún cuando adherimos a ser metódicos y dedicar tiempo a dichas prácticas, muchas más veces de las que nos gustaría, la realidad nos «lleva puestos». (Si, esas cosas que no gustan de ser reconocidas pero que todos sabemos que suceden)

A pesar de eso, y para no caer en el extremo opuesto, hay dos sencillas herramientas que podemos (y deberíamos) estar usando para validar nuestro código:

Para ambos casos, a pesar de tratarse de la versión 1 de Magento, podemos usar reglas de validación que nos van a ayudar a no salirnos de ciertas líneas (a pesar que en algunos casos, el propio core de la plataforma no cumple a la perfección con esas reglas).

PHP Code Sniffer

Primero vamos a instalar.

pear install PHP_CodeSniffer

El segundo paso, será clonar el set de reglas desde el repositorio en GitHub del ECG (ECG es el Expert Consulting Group de Magento). El repositorio que buscamos es: coding-standard.

git clone git@github.com:magento-ecg/coding-standard.git /path/local/a/repositorio/clonado

Una vez clonado, vamos a cambiar al directorio en el cual se encuentran las reglas (al momento del post, la versión es la 2.2.0):

cd /usr/share/php/PHP/CodeSniffer/Standards

Y ahora si, para terminar, creamos un link simbólico hacia el código que clonamos en el segundo paso.

ln -s /path/local/a/repositorio/clonado Ecg

A partir de este momento, desde nuestra consola, podemos ejecutar el siguiente comando:

phpcs --standard=Ecg /path/a/nuestro/magento

De ésta forma, la validación se hará usando las reglas, por decirlo de alguna manera, oficiales (o al menos, de lo más oficial que he encontrado).

PHP Mess Detector

La segunda herramienta necesita de algún comando más, pero es igual de sencilla su instalación y su uso.

Primero vamos a agregar los canales en PEAR:

pear channel-discover pear.phpmd.org
pear channel-discover pear.pdepend.org

Nos fijamos qué versión tenemos disponible para instalar:

pear remote-list -c phpmd

Al día de hoy, deberíamos ver el siguiente resultado:

Channel phpmd Available packages:
=================================
Package Version
PHP_PMD 1.5.0

Ahora si, nos disponemos a instalar.

pear install pdepend/php_depend
pear install phpmd/php_pmd-1.5.0

En cuanto a las reglas de validación, el ECG no ofrece ningún set, pero buscando un poco apareció un set bastante actualizado, adaptado del que viene con Magento2: phpmd-magento.

Como hicimos antes, vamos a clonar el repositorio:

git clone git@github.com:kubaceg/phpmd-magento.git /path/local/a/repositorio/clonado

Nos movemos al directorio de PHPMD:

cd /usr/share/php/data/PHP_PMD/resources/rulesets

Y ahí creamos un link simbólico a las reglas:

ln -s /path/local/a/repositorio/clonado/ruleset.xml magento.xml

Nótese que le asigno (por una cuestión totalmente arbitraria) el nombre a las reglas.

Ahora si, ya podemos hacer ejecutar un test contra el código con el siguiente comando:

phpmd /path/a/nuestro/magento text magento

Es cierto que el manual del buen programador e implementador nos sugiere que deberíamos practicar siempre el uso de Unit Test y Continuous Integration, pero como comentaba al comienzo del post, sabemos que la realidad (por los motivos que fueren) no siempre lo permite.

Usar PHPCS y PHPMD es realmente sencillo, no entorpece nuestro flujo de trabajo y nos va a permitir generar código de mejor calidad e incluso nos puede ayudar a prevenir bugs. Deberían ser un MUST para todos los que trabajamos con Magento.