如何编写一个PHP Mess Detector规则,该规则具有项目范围的上下文,而不是仅在类级别上


How to write a PHP Mess Detector rule that has a project wide context instead of only on a class level?

我想写一条规则来查找项目中所有公共未使用的函数。我已经复制并修改了原始的UnusedPrivateMethod。但遗憾的是,它工作得太好了,在项目中找到了所有的公共功能。

这样做是因为公共函数通常是从其他类调用的,而且规则的范围似乎在类级别。因此,在每个类中都不使用公共函数,这也是结果的一部分。

因此,问题是,我如何在项目级别而不仅仅是类级别的上下文中编写规则?

仅仅通过解析项目源代码是不可能获得所有公共方法调用的,因为有些调用可以使用进行

call_user_func()

$object->$method()

我建议你尽可能全面地用单元测试来覆盖这个项目。当您执行它们时,您将获得代码覆盖率统计信息。它可以以易读的形式呈现。你会看到哪些方法被调用,哪些没有被使用。

是的,您将不得不花一些时间来编写这些单元测试。但这完全值得。

看看php单元测试和代码覆盖率。

我之前也遇到过同样的问题,最终为此进行了动态代码分析。基本上,我运行我的网站一段时间,并有xdebug输出使用文件。为了解析所有这些,我创建了一个小工具PHPAnalyzer,它遍历这些文件并输出所有使用(或未使用)的函数的统计信息。在这些统计数据中,它被调用的次数是多少。该工具并没有经过真正的打磨,任何贡献都是受欢迎的。