Delphi:如何自动删除未使用的变量(“变量’x’已声明但从未使用
是否有任何工具(最好是免费软件)可以分析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,J-(I+1)); Exit (True); end; end; end; 好吧,阅读源文件应该很容易,因此唯一的剩余部分是从其声明行中删除变量.我们可以简单地在行中搜索HintInfo.VarName的出现,并检查出现之前和之后的字符是否不是字母而只是”,’,’或’:’.如果是这种情况,我们可以删除它.这包括所有这些情况: var UnusedVar : Integer; var UnusedVar,AnotherVar : Integer; var UnusedVar,AnotherVar : Integer; 告诉我,如果我错了或者我忘记了任何情况,但我认为这会有效,并且使用编译器生成的提示来解决从delphi源文件中删除未使用的变量的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |