- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有任何工具(最好是免费软件)可以分析 Pascal/Delphi 语法并自动删除未使用的变量?
就我而言,我正在使用一个非常大的 Delphi 代码库,编译器提示报告了超过一千个“变量 'x' 已声明但从未使用”的情况。
我需要花费几个小时才能手动删除它们,并且可能会犯错误,但正确的工具应该能够安全且自动地完成此操作。
我在网上搜索但没有找到...这里有人知道这样的工具吗?
谢谢...
马克·布拉福德
最佳答案
我明白你的观点,并且完全同意这样的工具在处理遗留代码时会很有用。不幸的是,我不知道任何现有的工具(我应该在这里添加免费软件工具,静态分析工具当然应该能够轻松做到这一点,但我不知道任何免费的静态代码分析工具)能够做到这一点.
但我想您可以在几分钟内轻松编写这样一个工具。一个带有备忘录和按钮的小型 GUI 就足够了。然后只需将编译器提示复制到备忘录中并按下按钮即可。然后该工具解析每一行。它可以很容易地检查该行是否包含您正在寻找的提示,并且每个这样的行都具有相同的结构,因此解析应该相对容易。然后它可以提取文件名和行号,打开文件并删除变量声明。如果一行中有多个变量声明,这可能有点棘手,但我认为这是可行的。
与您自己删除所有变量声明的任务相比,我不知道这对您来说是否需要花费太多精力。但我希望看到这样一个工具,所以请随意编写它:)
希望至少有一点帮助。
好吧,我真的看不出有什么问题。对于解析部分:
function ParseHint (const HintText : String; out HintInfo : THintInfo) : Boolean;
var
I, J : Integer;
HintName : String;
begin
Result := False;
for I := 1 to Length (HintText) do
begin
if (HintText [I] = '(') then
begin
J := I + 1;
while (HintText [J] <> ')') do Inc (J);
HintInfo.LineNumber := StrToInt (MidStr (HintText, I+1, J-(I+1)));
HintInfo.SourceFile := MidStr (HintText, 12, I-12);
HintName := MidStr (HintText, J+3, 5);
if (HintName <> 'H2164') then Exit (False);
end;
if (HintText [I] = '''') then
begin
J := I + 1;
while (HintText [J] <> '''') do Inc (J);
HintInfo.VarName := MidStr (HintText, I+1, J-(I+1));
Exit (True);
end;
end;
end;
嗯,读取源文件应该很容易,所以唯一剩下的部分就是从声明行中删除变量。我们可以简单地搜索该行中出现的 HintInfo.VarName,并检查出现的前后字符是否不是字母,而只是“”、“,”或“:”。如果是这种情况,我们可以将其删除。这涵盖了所有这些情况:
var UnusedVar : Integer;
var
UnusedVar,
AnotherVar : Integer;
var
UnusedVar, AnotherVar : Integer;
请告诉我,如果我错了或者我忘记了任何情况,但我认为这会起作用,并且会解决使用编译器生成的提示从 delphi 源文件中删除未使用的变量的问题。
关于Delphi:如何自动删除未使用的变量 ("Variable ' x' 已声明但从未使用过“提示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/531873/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!