damien-list / phpmd
PHPMD 是 PHP Depend 的衍生项目,旨在成为知名的 Java 工具 PMD 的 PHP 等价物。
Requires
- php: >=5.3.9
- ext-xml: *
- pdepend/pdepend: ^2.5
Requires (Dev)
- gregwar/rst: ^1.0
- mikey179/vfsstream: ^1.6.4
- phpunit/phpunit: ^4.8.36 || ^5.7.27
- squizlabs/php_codesniffer: ^2.0
This package is auto-updated.
Last update: 2024-09-26 18:17:11 UTC
README
PHPMD 是 PHP Depend 的衍生项目,旨在成为知名的 Java 工具 PMD 的 PHP 等价物。PHPMD 可以看作是 PHP Depend 测量的原始指标流的用户友好的前端应用程序。
安装
查看 https://phpmd.org/download/index.html
命令行用法
输入 phpmd [filename|directory] [report format] [ruleset file]
,例如
mapi@arwen ~ $ phpmd php/PDepend/DbusUI/ xml rulesets.xml
而 rulesets.xml
规则集文件可能看起来像这样
<?xml version="1.0"?> <ruleset name="My first PHPMD rule set" xmlns="http://pmd.sf.net/ruleset/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd" xsi:noNamespaceSchemaLocation=" http://pmd.sf.net/ruleset_xml_schema.xsd"> <description> My custom rule set that checks my code... </description> <rule ref="rulesets/codesize.xml" /> <rule ref="rulesets/cleancode.xml" /> <rule ref="rulesets/controversial.xml" /> <rule ref="rulesets/design.xml" /> <rule ref="rulesets/naming.xml" /> <rule ref="rulesets/unusedcode.xml" /> </ruleset>
XML 报告可能看起来像这样
<?xml version="1.0" encoding="UTF-8" ?> <pmd version="0.0.1" timestamp="2009-12-19T22:17:18+01:00"> <file name="/projects/pdepend/PHP/Depend/DbusUI/ResultPrinter.php"> <violation beginline="81" endline="81" rule="UnusedFormalParameter" ruleset="Unused Code Rules" externalInfoUrl="https://phpmd.org/rules/unusedcode.html#unusedformalparameter" priority="3"> Avoid unused parameters such as '$builder'. </violation> </file> </pmd>
您可以将包含 PHP 源代码的文件名或目录名传递给 PHPMD。
PHPMD Phar 分发 包括规则集文件在其存档中,即使上面的 "rulesets/codesize.xml" 参数看起来像文件系统引用。
命令行选项
请注意,默认输出是 XML,因此您可以将其重定向到文件并使用 XSLT 或其他方式。
您还可以使用缩短的名称来引用内置的规则集,如下所示
phpmd PHP/Depend/DbusUI/ xml codesize
命令行界面还接受以下可选参数
--minimumpriority
- 规则优先级阈值;优先级低于此的规则将不会使用。--reportfile
- 将报告输出发送到指定的文件,而不是默认输出目标STDOUT
。--suffixes
- 有效源代码文件扩展名的逗号分隔字符串,例如 php,phtml。--exclude
- 要忽略的目录的逗号分隔字符串模式。--strict
- 还报告带有 @SuppressWarnings 注释的节点。--ignore-violations-on-exit
- 即使找到违规行为,也将以零代码退出。
示例命令行
phpmd PHP/Depend/DbusUI xml codesize --reportfile phpmd.xml --suffixes php,phtml
使用多个规则集
PHPMD 使用所谓的规则集,这些规则集配置/定义了要应用于测试源的一组规则。PHPMD 的默认分发已经包含了一些默认集,可以即用即装。您可以使用集的名称调用 PHPMD 的 CLI 工具来应用此配置
~ $ phpmd /path/to/source text codesize
但如果我们想对源代码应用多个规则集怎么办?您也可以传递一个规则集名称列表,用逗号分隔,给 PHPMD 的 CLI 工具
~ $ phpmd /path/to/source text codesize,unusedcode,naming
您还可以将自定义的 规则集文件 与内置规则集混合
~ $ phpmd /path/to/source text codesize,/my/rules.xml
就是这样。通过这种行为,您可以指定要检查源代码的自定义规则集组合。
使用多个源文件和文件夹
PHPMD 还允许您指定多个源目录,如果您想为代码的特定部分创建一个输出
~ $ phpmd /path/to/code,index.php,/another/place/with/code text codesize
退出代码
PHPMD 的命令行工具目前定义了三个不同的退出代码。
- 0,此退出代码表示一切正常。这意味着没有错误/异常,PHPMD 没有检测到测试代码中的任何规则违规。
- 1,此退出代码表示在执行过程中发生了错误/异常,这中断了 PHPMD。
- 2,此退出代码表示 PHPMD 已成功处理测试代码,没有发生错误/异常,但在分析源代码时检测到规则违规。您还可以通过使用
--ignore-violations-on-exit
标志来防止此行为,即使发现违规,也会显示为 0。
渲染器
目前 PHPMD 包含以下渲染器
- xml,将报告格式化为 XML。
- text,简单的文本格式。
- html,单个包含可能问题的 HTML 文件。
- json,格式化为 JSON 报告。
- ansi,一个友好的命令行格式。
企业版 PHPMD
作为 Tidelift 订阅的一部分提供。
PHPMD
的维护者以及成千上万的其他软件包维护者正在与 Tidelift 合作,为您提供构建应用程序时使用的开源依赖项的商业支持和维护。节省时间,降低风险,并提高代码质量,同时支付您确切使用的依赖项的维护者。了解更多信息。[了解详情](https://tidelift.com/subscription/pkg/packagist-phpmd-phpmd?utm_source=packagist-phpmd-phpmd&utm_medium=referral&utm_campaign=enterprise&utm_term=repo "外部链接")