将单元添加到项目中所有单元的uses子句中?

时间:2012-10-11 15:02:35

标签: delphi gexperts uses-clause

我发现,由于难以在大项目的uses-clause中添加单元,某些类型的代码清理和重构变得非常困难。

我想在单个项目中的所有delphi .pas单元的interface-uses-clause中添加一个单元,这意味着在500多个地方手动执行该操作。每当我重构一个巨大的单元并将其从一个单元拆分为两个单元时,我可以使用“notepad ++”之类的东西进行搜索和替换,将“MyOldUnit”更改为“MyOldUnit,MyNewUnit”,但有时候,这样做是不安全的。它还错过了“MyOldUnit”是uses子句中的最后一个(“使用MyOldUnit;”)的情况。

无论如何,搜索和替换文件是危险的事情。如果不存在这样的工具,我正在考虑使用Castalia delphi解析器编写一个。我检查了GExperts,Castalia,ModelMakerCodeExplorer,但没有一种方法可以将单元批量插入到项目的所有使用子句中。我希望有一个工具可以做到这一点。

其次,在很多情况下,我将一个功能从一个不属于另一个单元的单元中移动,但这意味着我需要将该单元添加到项目单元的30%,而不是其他70%已经添加的地方。这意味着需要解析器方法,而不是正则表达式方法。

1 个答案:

答案 0 :(得分:3)

因为我们都编写代码,我们肯定会在其他项目中使用。如果将接口部件从一个单元移动到另一个单元,则会破坏您的项目。与旧单位和新单位相同。

但是你可以在不破坏你的项目的情况下进行重构。只需将部件(单元,类,方法,过程)标记为已弃用。 您的代码正在运行,但编译器会向您发出警告。

这是一个将程序从一个单位移动到另一个单位的例子:

unit Foo;

interface

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

implementation

uses
  FooNew;

procedure FooProc;
begin
  FooNew.FooProc;
end;

end.