jueves, marzo 07, 2013

Astyle - reformateando código desde CLI o vim


En la anterior entrega comenté los diferentes estilos de formato de código y cómo reconfigurar el formateador de código de Eclipse para formatear con el Estilo Allman .

Pero ... ¿y los programadores de C, C++ o Java que no utilizan Eclipse? ¿Alguna buena opción para reformatear el código a un estándar si todos los ficheros del proyecto no lo cumplen?

La solución es AStyle.

Según la documentación, una vez instalado (bien descargado manualmente o bien con "yum install" o "apt-get install" astyle, podemos hacer cosas como:


astyle --style=allman ~/project/foo.cpp

astyle --style=allman --recursive ~/project/*.cpp  ~/project/*.h




astyle [options] < OriginalSourceFile > BeautifiedSourceFile


Si no especificamos ninguna opción adicional, se usarán 4 espacios para los tabuladores.

Si no queremos tener que especificar manualmente ni el estilo ni las opciones largas, podemos crear un fichero $HOME/.astylerc en Linux o %USERPROFILE%\astylerc en Windows, conteniendo las opciones por defecto que queremos, así como opciones que por defecto no podríamos solicitar por la línea de comandos:


#The best formatting style:
--style=allman

# Options:
--indent-classes
--indent-switches
--indent-cases
--indent-namespaces
--indent-labels
--indent-preprocessor
--indent-col1-comments
--break-blocks
--convert-tabs
#--add-brackets <-- add="" after="" codelines="" else...="" font="" if="" single="" to="">

# Short options:
-s4 -p


Además de llamarlo desde línea de comandos, podemos formatear el buffer actual entero en Vim en modo comando con:


:%!astyle


Con esto se filtrará el buffer entero a través de astyle, sustituyendo al actual texto. Se utilizarán los parámetros del .astylerc.

De hecho, si lo usamos normalmente, lo habitual será mapearse una tecla para ello:


map <F8> :%!astyle



Ojo, esto reformateará el archivo entero, ya que tal y como lo estamos haciendo, si le pasamos a Astyle texto seleccionado (:!astyle en una selección) no verá el contexto lo formateará, pero dejándolo en indentado 0 (algo que podríamos solucionar después con >>)...




No hay comentarios: