Atom es un proyecto propio de los creadores de Github para desarrollar un editor de código abierto y hackeable hasta el núcleo. Es una variante del navegador Chromiun especializada en la escritura de código. Muchos desarrolladores han ido generando packages para el desarrollo, convirtiendo este versátil editor en un IDE completo. He estado desarrollando con él dos meses este verano, la verdad que la impresión es muy buena. Aunque no sé si el rendimiento de mi vieja máquina esta llegando a su límite o si realmente este editor, con todos los packages necesarios, precisa una maquina muy, muy potente.

Instalación

Es muy simple, desde la propia pagina del proyecto podemos descargar un ejecutable para linux o windows que se encargará del proceso, el proyecto está basado en NodeJs por lo que instala su propio motor node con un complemento muy similar a npm que se llama apm. Este útil nos va a permitir realizar configuraciones sobre el core del editor, instalar packages desde linea de comandos y algunas operaciones más. Como ejemplo, si instalamos Atom tras un proxy, lo configuraremos desde linea de comando con esta sencilla instrucción, de forma muy similar a como haríamos con npm.

1
apm config set https-proxy YOUR_PROXY_ADDRESS

Prerrequisitos

Como vamos a desarrollar PHP, la mayoría de los packages que usaremos nos van a pedir tener el comando php instalado y accesible. En linux la instalación desde repositorio es sencilla. En windows podemos optar por alguna solución tipo XAMPP, si queremos un servidor completo, o, en cualquier otro caso optaremos por la instalación de los ejecutables desde php.net. Después de esto podemos añadir la ruta de php al PATH.

Para evitar que se llene el disco hasta la bandera, es mejor asegurarse que XDEBUG está desactivado. En caso contrario generará archivos de traza para todos los procesos PHP que ejecute Atom, así que en la sección correspondiente de XDebug, en el archivo php.ini, incluiremos la directiva:

1
xdebug.profiler_enable=0

Atajos y comandos


Una de las grandes ventajas de Atom es su interfaz de comandos (shift + control + p), a través de atajos o de una consola podemos invocar cualquier acción dentro del editor. Todos los packages y todas las opciones disponibles se pueden resolver a de esta manera, sin levantar las manos del teclado. Si es un comando relativo a un package determinado, se suele anteponer el nombre del package para filtrar en la consola todos los comandos del mismo.

Packages, Packages, Packages….


La potencia y versatilidad de Atom reside mayormente en sus packages, desde modificaciones del core hasta cualquier complemento que se integre en el editor, lo podremos descargar e instalar como un package. Podemos obtenerlos directamente del repositorio público oficial, a través del apartado de la configuración, File -> Settings -> Packages. Desde ahí modificaremos y ampliaremos el comportamiento del programa para convertirlo en lo mas parecido a un IDE específico del lenguaje que elijamos.

En cuanto a los packages genéricos, he probado:

  • atom-beautify: Formatea y prepara el source de muchos de los lenguajes usados en desarrollo.
  • js-hyperclick: Facilita la navegación a las definiciones de funciones y variables Js.
  • markdown-writer: Un conjunto de utilidades para escribir blogs estáticos Markdown.
  • markdown-scroll-sync: Sincroniza el scroll de la pestaña “preview markdown” con el del source.
  • pigments: Colorea el background de todas las etiquetas CSS con el color definido.
  • minimap: Muestra todo el fuente reducido y estirado a modo de barra de desplazamiento.
  • qolor: Colorea la sintaxis SQL.
  • file-icons: Cambia los iconos del explorador de proyectos con los ico nos de los mime relacionados.
  • git-control: Panel de control que nos muestra un interfaz completo para la interacción con GIT.
  • atom-shell-commands: Permite crear comandos de sistema y relacionarlos con atajos Atom.
  • docblockr: Ayuda para la creación y completado de bloques de documentación como PHPDoc.
  • composer: Permite la ejecución de los comandos de composer para un proyecto a partir de su fichero composer.json.
  • expose: Muestra un conjunto de vistas miniatura de las pestañas del editor abiertas, en una pantalla modal por encima del editor.
  • line-diff-details: Revela a lado de la numeración de lineas iconos con de los cambios con respecto a la versión base. En caso GIT permite ver los cambios y revertirlos pulsando sobre el icono. Para los casos SVN solo muestra que tipo de modificación hubo en esas lineas.
  • remote-sync: Tras definir la información del servidor remoto en un fichero nos permite subir y descargar fuentes al servidor destino.
  • symbols-tree-view: Muestra los nombres de las clases funciones y propiedades halladas en el fuente actual a modo de índice para poder acceder a esas lineas directamente.
  • svn: Conector svn que permite obtener información de los fuentes para el árbol y el linter.
  • rabbitvcs-svn/tortoise-svn: Permite utilizar el programa de rabbitvcs/Tortoise (Linux/Windows) para lanzar comandos SVN directamente desde el editor, de manera que al hacer commit sobre un archivo, nos abre el interfaz para hacer el commit desde Rabbitvcs/Tortoise SVN.
  • tree-view-git-status: Cambia los colores de las entradas del árbol de ficheros del proyecto en función del repositorio, indicando si el archivo es nuevo, ha sido modificado o borrado en nuestra working copy.
  • git-log: Permite visualizar los comentarios y archivos tocados en cada commit en forma de log.
  • git-time-machine: Nos muestra un gráfico de puntos más o menos claros los commits del repositorio en una franja temporal, moviéndonos o pinchando sobre ellos podemos ver la información relevante al commit.
  • language-smarty: Da soporte para la sintaxis de templates Smarty.
  • split-diff: Divide el editor en dos ventanas mostrando de manera gráfica las diferencias entre el repositorio Git y nuestro fichero local, en caso de no tener un repositorio Git asociado al proyecto nos permite hacer el diff con lo que peguemos en la ventana.

La integración de los packages y el flow de trabajo muy bien, especialmente el minimap que nos muestra el documento actual con zoom y estirado a modo de barra de desplazamiento, justo a lado de dicha barra. Marcando en color los cambios respecto a la versión base del repositorio, los colores de los css según pigments, información útil del linter como errores, posibles problemas etc…

La mayor dificultad es instalar los mejores paquetes para lo que deseemos hacer, no hay demasiada información y se puede encontrar diferentes packages que puedan hacerse cargo de una misma tarea, así que toca probar y desechar aquellas cosas que no interesan. Por ejemplo para poder subir los fuentes a los servidores hay un package que muestra un panel doble desde donde arrastrar los ficheros en nuestros directorios a los servidores que tengamos definidos, sin embargo preferí utilizar uno que a través de un fichero de configuración en el proyecto permite subir, bajar o sincronizar los ficheros desde el menú contextual del ratón, en el explorador de proyectos.

Además con php-integrator-* se consiguen todos los complementos PHP necesarios. Los errores, calidad de código, poder acceder a las definiciones haciendo click en las funciones, constantes, o variables. Autocompletado y documentación de funciones, etc… Su única pega es que funciona contra el PHP que se defina en la configuración, lo recomendable por rendimiento es PHP7, pero si tenemos muchos proyectos legacy es posible que tengamos que andar cambiando para que no nos muestre los errores dependientes de la versión.

Con git-control conseguimos un interfaz con el que gestionar el versionado del código.

Y finalmente con flex-toolbar conseguiremos la integración de todos los comandos habituales en una botonera accesible en todo momento. Se puede ver de fondo en casi todas las imágenes, es la barra superior de iconos.

Experiencia de uso

Esteticamente y funcionalmente me ha gustado mucho, he tenido un par de problemas que he podido solventar rápido, como la intrusión de XDebug, algún bug en las librerías php-integrator y algún cambio en la forma de funcionar y las dependencias de un package. Pero en general me ha impresionado, aunque parece que mi máquina es antigua para el rendimiento que exige Atom con todos estos complementos- No he probado a generar el disco en RAM, ni algunas cosas más que recomienda la gente. Creo que afinando un poco el sistema Atom será una gran herramienta libre para cualquier desarrollo que se proponga.