Ya llevamos tiempo hablando de refactorizar, de mejorar nuestro código y de que tengamos testado todo nuestro código para que así podamos hacer cambios y resolver bugs de manera más sencilla. Como dice Martin Fowler: «Refactorizar es una técnica para mejorar el diseño de una base de código existente». Todo este tiempo hemos estado utilizando PHPStorm como IDE, creo que tenemos claro que es una gran herramienta, que nos ayuda a que seamos ma´s productivos, por eso hoy escribiremos una pequeña guía sobre Como refactorizar utilizando PHPStorm.
Empezaremos por lo más simple renombrar una variable e iremos mostrando distintos atajos para que podamos hacer refactoring de manera sencilla
Refactor | Renombrar
Para renombrar una constante, una clase, un método, una variable solo tenemos que poner el cursos encima y pulsar ctrl+T, con esto tendremos el submenu de refactor con el que podremos renombrar lo que queramos.
Si necesitamos un poco más de información podemos utilizar crtl+shift+F6, con ello obtendremos un cuadro de dialogo adicional que nos permitirá buscar también dentro de comentarios y/o cadenas de texto.
Antes de modificar nada, PHPStorm nos muestra una preview de donde se van a realizar los cambios, podemos excluir archivos, por si tenemos archivos que no queremos que sean renombrados.
Una vez que hagamos clic en Do Refactor tendremos actualizado nuestro proyecto.
Refactorizar la signatura de un método | Change Signature Refactoring
La mayor parte de las refactorizaciones tienen atajos de teclado que iremos mostrando, aunque es muy difícil conocerlos y memorizarlos todos, lo mejor es quedarse con ctrl + t ya que así vemos el menu contextual y con los cursores podemos seleccionar el método que mejor nos convenga.
Cuando cambiamos la signatura de un método con el atajo Cmd + F6 podemos ademas:
- Cambiar el nombre de la función
- Añadir/eliminar un parámetro
- Asignar valores por defecto
- Reordenar los parámetros
- Cambiar el nombre de los parámetros
- incluso cambiar la visibilidad
Copiar una clase a un nuevo directorio | Copy/Clone Refactoring
Con el atajo F5 podemos copiar una clase, un archivo o un directorio de un directorio a otro o clonar shift + F5 ese fichero en el mismo directorio
Extraer una constante | Extract Constant Refactoring
Utilizando «Extrar Constant refactoring» podemos seleccionar un valor y extraerlo en una constante ALT + CMD + C conseguiremos que nuestro código esté más limpio.
Extraer a una variable de la clase | Extract Field Refactoring
Es parecido a «Extraer una constante», podemos seleccionar un valor y extraerlo como atributo de la clase con Ctrl + shift + F aunque como ya hemos dicho antes la mejor opción es Crtrl + T En la ventana emergente que nos aparecerá podremos elegir la visibilidad o incluso si queremos iniciarlo.
Extraer una interfaz | Extract Interface Refactoring
Extract Interface Refactoring nos permite crear una interfaz basada en una clase/interfaz seleccionada. Podemos darle el nombre que queramos, el namespace o elegir las funciones.
Extraer un método | Extract Method Refactoring
Siempre que queramos extraer un trozo de código en una función separada podemos utilizar Alt + CMD + M. Con este atajo extraeremos el código a una función, para ello PHPStorm detectará los parámetros y valores de retornos, además podremos elegir la visibilidad.
Extraer una variable | Extract Variable Refactoring
Utilizando Alt + CMD + V podemos extraer a una variable no que necesitemos.
variable
En la misma linea | Inline Refactoring
Es justamente lo contrario a extraer un método, lo que hacemos con el atajo Alt + CMD + N es reemplazar variables o funciones redundantes por su expresión.
Mover | Mover Refactoring
Con Mover F6 podemos cambiar la localización de un archivo, un directorio o una clase.
Tirar o empujar | Pull Members Up / Push Members Down Refactoring
Imaginemos que tenemos la siguiente jerarquía de clases: Customer que extiende de BaseCustomer que a si vez extiende de Person. Tirando y empujando podemos mover cualquier miembro de una clase a otra. Por ejemplo podríamos mover el método getDisplayName de Customer a Person
Borrado seguro | Safe Delete Refactoring
Si no estamos seguros de que al borrar un archivo este archivo lo estuviésemos utilizando en alguna otra clase, ¿por que eliminarlo? cuando tenemos dudas como esta siempre podemos utilizar PHPStorm para hacer borrados seguros y que sea el IDE quien se encargue de buscar referencias al archivo, notificandonos antes de borrarlo. Esto nos permite eliminar archivos que no estamos utilizando.
Moviendo métodos estáticos | Move Static Member Refactoring
Aparte de mover archivos, también podemos mover métodos estáticos de una clase a otra, de maneras similar a como se mueven ficheros
PSR-2 y formateo del código
PHPStorm tiene una herramienta muy potente para formatear el código, con CMD+Alt+L podemos formatear el código siguiendo el estándar que hallamos configurado previamente, aunque a veces no es suficiente y necesitamos más, para ello podemos integrar PHP-CS-FIXER
PHP-CS-Fixer analiza el código PHP y trata de solucionar los problemas con los estandars PSR-1 y PSR-2, esta herramienta esta diseñada para utilizarla por linea de comandos, por ello puede ser tediosa de utilizar. Ahora veremos como integrarla dentro de PHPStorm para que podamos utilizarla de una manera cómoda.
- Con composer instalamos php-cs-fizer de manera global
$ composer global require FriendsOfPHP/PHP-CS-Fixer
Debemos tener configurado Composer para que funcione de manera global en nuestro sistema
export PATH="$PATH:$HOME/.composer/vendor/bin"
- Vamos a herramientas y buscamos Tools -> External Tools y añadimos una nueva
Name: Nombre de la herramienta php-cs-fixer Program: Ruta hacia php-cs-fixer /User/JesusLC/.composer/vendor/bin/php-cs-fixer Parameters: Parametros que necesita el programa fix fileDir –level=psr2 WOrking Directory: Directorio de trabajo ProjectDirFile
Ahora solo tenemos que ir en la configuración de PHPStorm a KeyMap y asignarle la combinación de teclas que queramos, yo le he asignado CMD + ALT + Ñ para que esté al lado del reformar code.
Conclusiones
Este post está basado en la documentación de PHPStorm, además si quieres aprender todo sobre PHPStorm tienes el proyecto phpstorm-workshop, yo solo he visto la parte de refactoring y está genial, ya que es posible ir paso a paso por cada una de los apartados que hemos visto en el post.
¿Y tú? ¿qué IDE utilizas? Lo conoces a la perfección, o al menos ¿te pica la curiosidad de tocar botoncitos para saber que hacen?
4 comentarios en “Como refactorizar utilizando PHPStorm”