6

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

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

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

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

4

1 に答える 1

3

私たちは皆、他のプロジェクトで確実に使用するコードを書いているからです。インターフェイス パーツをあるユニットから別のユニットに移動すると、プロジェクトが壊れます。新旧ユニットも同様。

しかし、プロジェクトを壊すことなくリファクタリングできます。パーツ (ユニット、クラス、メソッド、プロシージャ) を非推奨としてマークするだけです。コードは機能していますが、コンパイラから警告が表示されます。

手順をあるユニットから別のユニットに移動する例を次に示します。

unit Foo;

interface

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

implementation

uses
  FooNew;

procedure FooProc;
begin
  FooNew.FooProc;
end;

end.
于 2012-10-14T01:34:05.433 に答える