Uso de PHP CS Fixer
Voy a trabajar en Windows con una vieja instalación de Laravel 5 que uso para pruebas y la consola de Git. Además, Composer está instalado globalmente en mi sistema.
Instalar la herramienta globalmente:
composer global require friendsofphp/php-cs-fixer
Actualizar la herramienta:
composer global update friendsofphp/php-cs-fixer
Uso básico
Comprobar ficheros que requieren cambios en mi proyecto
(no cambia nada, sólo informa):
php-cs-fixer fix c:/xampp/htdocs/pruebas/xxx/ --dry-run
Aparece un listado como éste:
Loaded config default.
Using cache file ".php_cs.cache".
1) \app\Helpers\aaa.php
2) \app\Helpers\bbb.php
3) \app\Http\Controllers\TestController.php
4) \app\Http\Requests\Request.php
5) \app\Http\routes.php
6) \app\Libraries\dtraz\dtraz.php
7) \app\Libraries\dtraz\resources\clases\configfile.php
Checked all files in 2.127 seconds, 8.000 MB memory used
Ahora sí, para "corregir" ficheros tenemos dos opciones básicas:
1. Corregir ficheros de un directorio
php-cs-fixer.phar fix /path/to/dir
2. Corregir un fichero concreto
php-cs-fixer.phar fix /path/to/file
Voy a corregir el código del directorio "helpers":
php-cs-fixer fix c:/xampp/htdocs/pruebas/xxx/app/Helpers
La respuesta ha sido:
Loaded config default.
Using cache file ".php_cs.cache".
1) app\Helpers\\aaa.php
2) app\Helpers\\bbb.php
Fixed all files in 0.058 seconds, 8.000 MB memory used
El código cambia desde éste:
<?php namespace App\Helpers;
class Aaa {
/**
* Method description
*
* @param type $a
*/
public static function
fa( $a=NULL ) {
echo( get_class() .
' / fa() <hr>' );
$arr1 = array();
$arr2 = [
1,
2,
'str',
];
$flag = TRUE;
/**
* Pruebas
*
*/
}
} //class
a este otro:
<?php namespace App\Helpers;
class Aaa
{
/**
* Method description
*
* @param type $a
*/
public static function
fa($a=null)
{
echo(get_class() .
' / fa() <hr>');
$arr1 = array();
$arr2 = [
1,
2,
'str',
];
$flag = true;
/**
* Pruebas
*
*/
}
} //class
Los cambios (sobre mi manera de escribir código) han sido:
- Las llaves de apertura (en clases, métodos y funciones) pasan
a una nueva línea.
- Se usan 4 espacios para indentar en lugar de un tabulador.
- Se eliminan espacios en blanco después de abrir un paréntesis y antes de cerrarlo.
- NULL, TRUE y FALSE, pasan a minúscula.
- Se eliminan líneas en blanco*
* Las líneas las elimina la herramienta si realiza cambios
en líneas consecutivas, aunque es algo que según el estándar no debe
ser así en todos los casos, es decir, que para:
la salida no varía (no se elimina la línea vacía), sin embargo, si lo
que aparece es la declaración de una propiedad o función, esta línea
en blanco si es eliminada.
Uso de PHP CS Fixer - Errores comunes
Para no tener que escribir la ruta completa a un directorio a la hora
de comprobar / corregir aquellos ficheros que requieren cambios, podemos abrir la consola directamente en el directorio afectado, o ir hasta el antes de invocar los comandos:
php-cs-fixer fix --dry-run
php-cs-fixer fix
Sin embargo, en ambos casos se producirá un mismo error:
[LogicException]
You must call one of in() or append()
methods before iterating over a Finder.
Normalmente, este mensaje es el resultado de no usar un path donde buscar.
Podemos evitarlo indicando que busque en el directorio actual.
En este caso los comandos serían:
php-cs-fixer fix ./ --dry-run
php-cs-fixer fix ./
Al usar la herramienta se crea en el directorio actual el fichero
".php_cs.cache" que contiene: la versión de
PHP y de la herramienta, reglas que se utilizan y ficheros que pueden
verse afectados (del directorio actual y anidados). Habrá que tenerlo
en cuenta si no queremos añadirlo a nuestro repositorio.
30-11-2017 (10-12-2017)