2012-10-11 33 views
6

Estoy descubriendo que ciertos tipos de limpieza y refactorización de códigos se hacen MUY difíciles debido a la dificultad de agregar una unidad a las cláusulas de uso de un proyecto grande.¿Agregar una unidad a las cláusulas de uso de todas las unidades en un proyecto?

Quiero agregar una unidad a la interfaz-uses-clause de todas las unidades delphi .pas en un solo proyecto, y eso significa hacerlo manualmente en más de 500 lugares. Cada vez que refactorizo ​​una unidad gigante y la divida de una unidad en dos, probablemente pueda buscar y reemplazar utilizando algo como "notepad ++" para cambiar "MyOldUnit", "MyOldUnit, MyNewUnit", pero a veces, eso no es seguro. . También falla en los casos en que "MyOldUnit" es lo último en la cláusula uses ("usa MyOldUnit;").

De todos modos, buscar y reemplazar en archivos es un asunto peligroso. Si no existe tal herramienta, estoy considerando escribir una, usando el analizador de Castalia delphi. He comprobado GExperts, Castalia, ModelMakerCodeExplorer y ninguno de ellos tiene una forma de insertar unidades por lotes en todas las cláusulas de uso en un proyecto. Espero que exista una herramienta para hacer esto.

En segundo lugar, en muchos casos, muevo una función de una unidad donde no pertenece a otra, pero esto significa que necesito agregar esa unidad al 30% de las unidades del proyecto, pero no a las otras 70 % donde ya está agregado. Eso significa que se requiere un enfoque de analizador, no un enfoque de expresiones regulares.

+2

Ahí está el (muy antiguo) 'JclUsesWizard' en JCL \ expertos \ useswizard, quizá se le puede servir como punto de partida. –

+0

No necesita un analizador real para hacer esto. Solo una desagradable secuencia de comandos basada en expresiones regulares que usa Perl o Python o lo que quieras para las secuencias de comandos de expresiones regulares. Necesitarías un analizador real si quisieras algo sólido, pero para una aplicación de un solo uso a tu propia base de código, no es así. –

+4

¿Ya probaste CnPack? – kobik

Respuesta

3

Porque todos escribimos el código que sin duda utilizaremos en otros proyectos. Si mueve partes de la interfaz de una unidad a otra, romperá sus proyectos. Lo mismo con unidades viejas y nuevas.

Pero puede refactorizar sin romper sus proyectos. Simplemente marque las partes (unidad, clase, método, procedimiento) como obsoletas. Su código funciona, pero el compilador le advertirá.

Aquí un ejemplo de movimiento de un procedimiento de una unidad a otra:

unit Foo; 

interface 

procedure FooProc; deprecated; // new location in unit FooNew 

implementation 

uses 
    FooNew; 

procedure FooProc; 
begin 
    FooNew.FooProc; 
end; 

end. 
+0

Esta es una idea muy práctica. +1. –

Cuestiones relacionadas