Delphi 是否将一个单位添加到项目中所有单位的uses子句中?

Delphi 是否将一个单位添加到项目中所有单位的uses子句中?,delphi,gexperts,uses-clause,Delphi,Gexperts,Uses Clause,我发现某些类型的代码清理和重构由于在大型项目的uses子句中添加单元的困难而变得非常困难 我想在一个项目中的所有delphi.pas单元的interface uses子句中添加一个单元,这意味着在500多个位置手动执行该操作。每次我重构一个巨大的单元并将其从一个单元拆分为两个时,我可能会使用“记事本++”之类的东西来搜索和替换,将“MyOldUnit”更改为“MyOldUnit,MyNewUnit”,但有时这样做并不安全。它还忽略了“MyOldUnit”是uses子句中的最后一项(“uses M

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

我想在一个项目中的所有delphi.pas单元的interface uses子句中添加一个单元,这意味着在500多个位置手动执行该操作。每次我重构一个巨大的单元并将其从一个单元拆分为两个时,我可能会使用“记事本++”之类的东西来搜索和替换,将“MyOldUnit”更改为“MyOldUnit,MyNewUnit”,但有时这样做并不安全。它还忽略了“MyOldUnit”是uses子句中的最后一项(“uses MyOldUnit;”)的情况

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


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

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

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

以下是将程序从一个单元移动到另一个单元的示例:

unit Foo;

interface

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

implementation

uses
  FooNew;

procedure FooProc;
begin
  FooNew.FooProc;
end;

end.

jcl\experts\useswizard中有一个(非常古老的)
JclUsesWizard
,也许它可以作为您的起点。您不需要真正的解析器来完成这项工作。只是一个讨厌的基于正则表达式的脚本,使用Perl或Python或任何你喜欢的正则表达式脚本。如果你想要一些健壮的东西,你需要一个真正的解析器,但是对于一个只需一次的应用程序到你自己的代码库,你就不需要了。相关的问题,但不一样:@WarrenP好吧,你是个程序员,不是吗?!这就是我们要做的!尴尬的是,为这个问题编写您自己的解决方案,当您完成它时,您会发现已经有了一个工具。这是一个非常实用的想法+1.