2012-10-11 3 views
6

Ich finde, dass bestimmte Arten von Code-Aufreinigungen und Refactorings sehr schwierig durch die Schwierigkeit gemacht werden, eine Einheit zu den Use-Klauseln eines großen Projekts hinzuzufügen.Hinzufügen einer Einheit zu den uses-Klauseln aller Einheiten in einem Projekt?

Ich möchte eine Unit zu der interface-uses-Klausel aller Delphi. PAS-Einheiten in einem einzigen Projekt hinzufügen, und das bedeutet manuell an über 500 Orten zu tun. Jedes Mal, wenn ich eine riesige Einheit umgestalte und sie von einer Einheit in zwei teile, kann ich wahrscheinlich mit etwas wie "notepad ++" suchen und ersetzen, um "MyOldUnit" zu "MyOldUnit, MyNewUnit" zu ändern, aber manchmal ist das nicht sicher . Es fehlen auch die Fälle, in denen "MyOldUnit" die letzte Sache in der uses-Klausel ist ("uses MyOldUnit;").

Wie auch immer, suchen und ersetzen in Dateien ist ein gefährliches Geschäft. Wenn es kein solches Werkzeug gibt, erwäge ich, es mit dem Castalia-Delphi-Parser zu schreiben. Ich habe GExperts, Castalia, ModelMakerCodeExplorer überprüft und keiner von ihnen hat eine Möglichkeit, Einheiten in alle uses-Klauseln in einem Projekt im Batch einzufügen. Ich hoffe, dass ein Werkzeug dazu existiert. Zweitens verschiebe ich in vielen Fällen eine Funktion von einer Einheit, wo sie nicht zu einer anderen gehört, aber das bedeutet, dass ich diese Einheit zu 30% der Projekteinheiten hinzufügen muss, aber nicht zu den anderen 70 Einheiten %, wo es bereits hinzugefügt wurde. Das bedeutet, dass ein Parser-Ansatz erforderlich ist, kein Regex-Ansatz.

+2

Es gibt die (sehr alt) 'JclUsesWizard' in jcl \ experts \ useswizard, vielleicht kann es Sie als Ausgangspunkt dienen. –

+0

Sie brauchen dazu keinen echten Parser. Nur ein fieses Regex-basiertes Skript, das Perl oder Python oder was auch immer Sie für das Regex-Scripting verwenden. Sie würden einen echten Parser benötigen, wenn Sie etwas Robustes wollen, aber für eine One-Shot-Anwendung auf Ihre eigene Codebasis nicht. –

+4

Haben Sie CnPack schon probiert? – kobik

Antwort

3

Da wir alle Code schreiben, werden wir sicherlich in anderen Projekten verwenden. Wenn Sie Schnittstellenteile von einer Einheit zur anderen verschieben, werden Ihre Projekte unterbrochen. Gleiches gilt für alte und neue Einheiten.

Aber Sie können refaktorieren, ohne Ihre Projekte zu brechen. Markieren Sie einfach die Teile (Einheit, Klasse, Methode, Prozedur) als veraltet. Ihr Code funktioniert, aber Sie werden vom Compiler gewarnt.

Hier ein Beispiel für ein Verfahren von einer Einheit in einer anderen:

unit Foo; 

interface 

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

implementation 

uses 
    FooNew; 

procedure FooProc; 
begin 
    FooNew.FooProc; 
end; 

end. 
+0

Dies ist eine sehr praktische Idee. +1. –

Verwandte Themen