18 abril 2008

Formateando código automáticamente con DelForExp

Esta es otra herramienta que con el tiempo se me ha ido haciendo imprescindible junto con Delphi. DelForExp es un experto (y gratuito) que se puede instalar en cualquier versión de Delphi y que formatea el código fuente automáticamente según nuestras preferencias.

Con esta utilidad ya no será necesario utilizar las combinaciones de teclas CTRL + K + I y CTRL + K + U para identar las líneas de código cada vez que copiamos un trozo de código de un lugar a otro. Otro de los “desastres” que suele solucionar es cuando se trabaja en equipo y cada programador escribe el código a su manera (los begin, end, los espacios, los paréntesis, etc.).

Para descargar esta interesante utilidad hay que irse a la siguiente dirección:

http://www.aew.wur.nl/UK/Delforexp/

La instalación va comprimida en un zip de 564 KB. Al no llevar realmente una instalación como Dios manda hay que descomprimirlo en alguna carpeta donde sepamos que no se va a borrar (ya que contiene librerías DLL que se van a enganchar a Delphi como lapas). Después ejecutamos el archivo SetupEx.exe y comenzará a instalarse en todos los Delphi que tengamos instalados:

Es una instalación algo cutre pero efectiva, ya que si abrimos Delphi y miramos en el menú superior la opción Tools aparecerá una opción nueva llamada Source Formatter:

Al ejecutar esta opción nos aparece esta ventana:

Mucho cuidado de pulsar los primeros tres botones (Current File, All Open Files y Whole Project) antes de establecer el tipo de formateo de texto. Antes de hacer experimentos recomiendo hacer una copia de seguridad de nuestro proyecto, sobre todo para evitar sustos.

ESTABLECIENDO EL FORMATO DE TEXTO

Para seleccionar nuestro propio estilo de programación debemos pulsar el botón Options:

En la primera pestaña (ident) establecemos los espacios que vamos a meter para identar nuestro código. Lo ideal es dejar el campo Number of spaces per ident a 2, que es lo estándar en Delphi. También es conveniente identar los comentarios mediante la opción Ident comments para que la alineación de nuestros comentarios no se quede descolocada respecto al código.

Igual se puede hacer con las directivas del compilador, los bloques de código después del comando else, etc. Lo mejor es dejarlo como se ve en la foto que he mostrado, con los comentarios es suficiente.

En la siguiente pestaña (Spacing) le indicamos cuantos espacios queremos alrededor de los símbolos (paréntesis, comas, etc.):

A mí por ejemplo me gusta que deje un espacio después de abrir un paréntesis y otro antes de cerrarlo:

procedure TForm1.FormCreate( Sender: TObject );

Para ello debemos seleccionar en la línea Left Parenthesis el valor Alter only (sólo después) y en la línea Right Parenthesis el valor Befote Only (sólo antes). También se puede hacer lo mismo con los corchetes.

En la tercera pestaña (Line breaks) le podemos indicar cuando debe hacer un Intro para pasar a la línea siguiente. En el siguiente ejemplo lo he puesto para procedimientos y funciones:

La cuarta pestaña (Capitalization) se utiliza para pasar a mayúsculas la primera letra de las palabras reservadas o comandos:

Por defecto, están ambas opciones desactivadas. Si activamos la opción Reserved words pasará a mayúsculas la primera letra de todas la palabras reservadas (While, Begin, etc.).

La quinta pestaña (Align) se utiliza para alinear los comentarios a una línea que solemos poner detrás de nuestro código para dejarlos alineados:

Por ejemplo, en este bloque de código hay comentarios detrás de cada línea:

procedure TFPrincipal.Inicializar( Sender: TObject; var Done: Boolean );
begin
Done := True; // El proceso se ha realizado correctamente
Application.OnIdle := nil; // Liberamos el uso de la aplicación
Liberar_Memoria; // Liberamos memoria
Bloquear_Ventana( True ); // Impedimos que usuario modifique los datos
end;

Como puede verse los comentarios quedan sin alinear respecto al código. Para corregir ese problema activo la opción Aling simple comments alter code con el valor 40 y así quedaría al formatear el código:

procedure TFPrincipal.Inicializar( Sender: TObject; var Done: Boolean );
begin
Done := True; // El proceso se ha realizado correctamente
Application.OnIdle := nil; // Liberamos el uso de la aplicación
Liberar_Memoria; // Liberamos memoria
Bloquear_Ventana( True ); // Impedimos que usuario modifique los datos
end;

Como puede verse el código queda mucho más elegante y nos evita machacar la barra de espacio o el tabulador.

La sexta pestaña (Misc.) se utiliza para dar formateo a las directivas del compilador. También podemos establecer qué combinación de teclas vamos a utilizar para formatear el código fuente de la unidad que estamos tocando en ese momento (que por defecto es la combinación de teclas CTRL + D):

Y en la última pestaña (Preview) podemos ir viendo en tiempo real cómo quedaría el código fuente según apliquemos unas opciones u otras:

También podemos pulsar el botón Borland Style para que lo deje al estilo clásico de Borland (por si la hemos fastidiado con alguna opción y no sabemos dejarlo como estaba).

Después de haber establecido nuestro estilo de código, ahora podemos aplicarlo pulsando los botones:

Current File -> Formatea el código fuente de la unidad donde estamos situados.

All Open Files -> Formatea el código de todas las pestañas de código que tengamos abiertas en el proyecto.

Whole Proyect -> Formatea el código de todas las unidades del proyecto.

Como he dicho anteriormente, antes de pulsar los botones All Open files o Whole Proyect sería aconsejable hacer copia de seguridad del proyecto (o por lo menos de los archivos .pas).

De todas formas, llevo más de una año utilizando esta herramienta y jamás me ha jodido el código fuente o me ha provocado ningún problema. Es fiable 100%.

Cuando estemos escribiendo código fuente y queramos formatear el código sólo hay que pulsar la combinación de teclas CTRL + D (aparecerá la ventana de DelForExp) y luego la tecla Intro (ya que estará enfocado el botón Current File).

Con herramientas como esta se ahorra mucho tiempo y además se puede compartir el código fuente con otros usuarios sin que hayan quejas sobre los estilos de escritura de cada programador.

Pruebas realizadas en Delphi 7.

10 comentarios:

Anónimo dijo...

Hola. Felicitarte por la página... muy buena. Gracias a DelForExp la he encontrado, estaba reinstalando el delphi y se me ocurrio buscar la última versión de esta herramienta y aparecia este blog. Y tienes razón al clasificar esta herramienta como "imprescindible", yo junto con Gexperts nunca faltan en mi delphi. :D

un saludo,
Lunik

Arsenio Lupín dijo...

Uso mucho Delphi 7 hace más de 4 años y estaba buscando una herramienta así... es genial.
Muchas gracias, muy bueno tu blog.

Guillem dijo...

Genial este blog y esta utilidad, hace hace mucho tiempo q la buscaba. Enhorabuena.

Salu2

Alejandro dijo...

Esto esta buenisimo!!!
Muy bueno tu blog espero q sigas asi.

Anónimo dijo...

Hola!,

Te felicito!

Sin duda, uno de los mejores Blog en lengua castellana sobre delphi que he encontrado.

La verdad, es que he aprendido mucho con tus entradas, las cuales realmente son muy variadas, didácticas y repletas de detalles, ClienDataSet, Multicapa, DelForexp, EurekaLog, etc., todo muy ,pero que muy, interesante!

Espero que podamos disfrutar de tus aportaciones al mundo de la programación por mucho tiempo...

Administrador dijo...

Muchas gracias por vuestro apoyo.

Espero seguir dando guerra durante mucho tiempo.

Saludos.

Jose dijo...

Hola a todos.

Estoy buscando la posibilidad de hacer lo siguiente, bien con DelForExp o con gExperts.
Mi codigo sería este:

procedure miProc;
begin
texto1:= 'esto es un texto';
var:= 76;
lblTit.caption:= 'Bienvenido';
end;

Tras formatear mi objetivo es que quede como sigue:

procedure miProc;
begin
texto1 := 'esto es un texto';
var := 76;
lblTit.caption := 'Bienvenido';
end;

Soy un maniatico de la identacion post ":=" y me gusta que todas las asignaciondes en un bloque queden a la misma altura.

Alguna idea de como conseguir este efecto?

Saludos y gracias

Arsenio Lupín dijo...

Con el DelForExp (está por defecto así) entrando en las opciones, solapa Spacing, fijate que la primera opción es:

Equals - :=

En Spacing ponele "Before and after"

Y listo...

En realidad tu código te va a quedar:

procedure miProc;
begin
texto1 := 'esto es un texto';
var := 76;
lblTit.caption := 'Bienvenido';
end;

Jose dijo...

Hola de nuevo. Gracias por la respuesta, pero en realidad no es ese el objetivo que busco. El problema es que blogger no formateo bien mi post, de ahi la confusión. En realidad quiero que quede asi, siendo cada "_" un espacio en blanco:

procedure miProc;
begin
texto1______ :=_'esto es un texto';
var__________:=_76;
lblTit.caption:=_'Bienvenido';
end;

Administrador dijo...

Ya entiendo lo que quieres: alinear verticalmente las variables, los iguales y los valores.

Creo que eso no se puede hacer con DelForExp.

Saludos.

Publicidad