2012-10-11 10 views
6

Zauważyłem, że niektóre rodzaje oczyszczeń kodu i refaktoryzacji są BARDZO trudne ze względu na trudność dodania jednostki do klauzul zastosowań dużego projektu.Dodawanie jednostki do klauzul zastosowań wszystkich jednostek w projekcie?

Chcę dodać jednostkę do interfejsu-uses-clause wszystkich jednostek delphi .pas w jednym projekcie, a to oznacza ręczne robienie tego w ponad 500 miejscach. Za każdym razem, gdy przeliczam gigantyczną jednostkę i dzielę ją z jednej jednostki na dwie, mogę prawdopodobnie wyszukiwać i zastępować za pomocą czegoś takiego jak "Notatnik ++", aby zmienić "MyOldUnit" na "MyOldUnit, MyNewUnit", ale czasami nie jest to bezpieczne. . Pomija także przypadki, w których "MyOldUnit" jest ostatnią rzeczą w klauzuli uses ("używa MyOldUnit;").

W każdym razie wyszukiwanie i zastępowanie plików jest niebezpieczne. Jeśli takie narzędzie nie istnieje, rozważam napisanie takiego, używając parsera Castalia delphi. Sprawdziłem GExperts, Castalia, ModelMakerCodeExplorer i żaden z nich nie ma sposobu na wstawianie jednostek wsadowych we wszystkie klauzule zastosowań w projekcie. Mam nadzieję, że narzędzie do tego istnieje.

Po drugie, w wielu przypadkach przenoszę funkcję z jednej jednostki, w której nie należy ona do innej, ale oznacza to, że muszę dodać tę jednostkę do 30% jednostek projektu, ale nie do drugiej 70 % tam, gdzie jest już dodany. Oznacza to, że wymagane jest podejście parsera, a nie podejście regex.

+2

Jest (bardzo stary) 'JclUsesWizard' w JCL \ experts \ useswizard, chyba że może służyć jako punkt wyjścia. –

+0

Aby to zrobić, nie potrzebujesz prawdziwego parsera. Po prostu paskudny skrypt oparty na regexie z użyciem Perla lub Pythona lub cokolwiek chcesz na skrypty regex. Potrzebujesz prawdziwego analizatora składni, jeśli chcesz czegoś solidnego, ale w przypadku aplikacji jednorazowej do własnej bazy kodu, nie musisz. –

+4

Czy próbowałeś już CnPack? – kobik

Odpowiedz

3

Ponieważ wszyscy piszemy kod, z pewnością użyjemy go w innych projektach. Jeśli przeniesiesz części interfejsu z jednej jednostki do drugiej, złamiesz swoje projekty. To samo dotyczy starych i nowych jednostek.

Ale można refaktoryzować bez przerywania projektów. Po prostu zaznacz części (jednostka, klasa, metoda, procedura) jako przestarzałe. Twój kod działa, ale zostaniesz ostrzeżony przez kompilator.

Oto przykład przesuwając procedurę z jednej jednostki do drugiej:

unit Foo; 

interface 

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

implementation 

uses 
    FooNew; 

procedure FooProc; 
begin 
    FooNew.FooProc; 
end; 

end. 
+0

To bardzo praktyczny pomysł. +1. –

Powiązane problemy