2012-10-11 18 views
6

大規模なプロジェクトのuses節にユニットを追加することが難しいため、特定の種類のコードのクリーンアップとリファクタリングが非常に難しくなっています。プロジェクト内のすべてのユニットのuses節にユニットを追加しますか?

1つのプロジェクト内のすべてのdelphi .pasユニットのinterface-uses-clauseにユニットを追加したいと思います。これは、手動で500以上の場所で行うことを意味します。私が巨大なユニットをリファクタリングして1つのユニットから2つに分割するたびに、 "notepad ++"のようなものを使用して "MyOldUnit"を "MyOldUnit、MyNewUnit"に変更して置換することはおそらく可能です。また、 "MyOldUnit"がuses句の最後のもの( "MyOldUnitを使用する")の場合がありません。

とにかく、ファイルの検索と置換は危険な仕事です。そのようなツールが存在しない場合、私はCastalia delphiパーサーを使用して、ツールを作成することを検討しています。私はGExperts、Castalia、ModelMakerCodeExplorerをチェックしており、プロジェクト内のすべてのuses節にユニットをバッチ挿入する方法はありません。私はこれを行うためのツールが存在することを望んでいます。

第2に、多くの場合、別のユニットに属さない1つのユニットから関数を移動していますが、これはユニットをプロジェクトのユニットの30%に追加する必要があることを意味します。既に追加されている%。つまり、正規表現のアプローチではなく、パーサのアプローチが必要です。

+2

JCL \専門家で(非常に古い) 'JclUsesWizard'があります\ useswizard、おそらくそれが出発点としてあなたを提供することができます。 –

+0

これを行うには実際のパーサは必要ありません。 PerlやPythonを使った正規表現ベースのスクリプト、正規表現のスクリプトのようなものです。堅牢なものが必要な場合は実際のパーサが必要ですが、独自のコードベースにワンショットアプリケーションを使用する場合はそうしないでください。 –

+4

まだCnPackを試しましたか? – kobik

答えて

3

私たちはすべてコードを書くので、私たちは確かに他のプロジェクトで使用します。インターフェース部品をあるユニットから別のユニットに移動すると、プロジェクトが中断されます。古いユニットと新しいユニットと同じです。

しかし、プロジェクトを壊すことなくリファクタリングすることができます。パーツ(ユニット、クラス、メソッド、プロシージャ)を廃止予定とマークするだけです。 コードは動作していますが、コンパイラから警告があります。ここで

別のユニットからの手順を移動させる例:

unit Foo; 

interface 

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

implementation 

uses 
    FooNew; 

procedure FooProc; 
begin 
    FooNew.FooProc; 
end; 

end. 
+0

これは非常に実用的なアイデアです。 +1。 –

関連する問題