我在遗留项目中只有一个PHP文件,其长度至少为几千行。它主要由一个大约10个案例的switch语句分成许多不同的条件块。在每种情况下,似乎都有一个非常相似的 - 如果不是完全相同的 - 代码块。有哪些方法可以让我将这些代码块识别为相同或接近相同 - 因此我可以抽象出代码并开始重构整个文件?我知道这可以用非常手动的术语(将代码中的每个case语句分成单个文件和Diff)但我对可以用来加速这个过程的工具感兴趣。
感谢。
答案 0 :(得分:13)
答案 1 :(得分:3)
您可以使用phpunit PMD(Project Mess Detector)来检测重复的代码块。
它还可以计算代码的Cyclomatic complexity。
以下是phpuc中的pmd标签的屏幕截图:
答案 2 :(得分:2)
请参阅我们的PHP Clone Detector工具。
尽管重新格式化,插入/删除注释,替换变量名称,添加/替换子块等,这仍然可以找到精确副本和接近未命中。
据我所知,PHPCPD只找到完全相同的(令牌)序列。这会错过很多克隆,因为复制粘贴后最常见的操作是编辑到自定义。所以它会错过OP试图找到的克隆。
答案 3 :(得分:0)
您可以将这些块放在单独的文件中,然后在它们上运行diff吗?
然而,我认为最终你需要手动完成所有操作,因为听起来这段代码需要大量的重构,即使有差异你也可能需要评估这是故意的还是错误。