PHPMD 是 PHP Depend 的一个衍生项目,旨在成为著名的 Java 工具 PMD 的 PHP 等价物。 PHPMD 可以被视为一个用户友好的前端应用程序,用于由 PHP Depend 测量的原始指标流。
https://phpmd.org
请参阅 https://phpmd.org/download/index.html
输入phpmd [filename|directory[,filename|directory[,...]]] [report format] [ruleset file]
,即:
mapi@arwen ~ $ phpmd php/PDepend/DbusUI/ xml 规则集.xml
虽然rulesets.xml
规则集文件可能如下所示:
<? xml version = " 1.0 " ?>
< ruleset name = " My first PHPMD rule set "
xmlns = " https://phpmd.org/xml/ruleset/1.0.0 "
xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : schemaLocation = " https://phpmd.org/xml/ruleset/1.0.0
http://phpmd.org/xml/ruleset_xml_schema_1.0.0.xsd "
xsi : noNamespaceSchemaLocation = "
http://phpmd.org/xml/ruleset_xml_schema_1.0.0.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 代码大小
命令行界面还接受以下可选参数:
--verbose, -v, -vv, -vvv
- 输出详细级别。将打印正在处理或缓存的更多信息。将发送到STDERR
以不干扰报告输出。每个错误下的text
输出还会有一个指向规则文档的链接,并以大多数 IDE 会转换为链接的方式格式化该位置,以便在单击时在错误行打开文件。--minimumpriority
- 规则优先级阈值;优先级低于它们的规则将不会被使用。--reportfile
- 将报告输出发送到指定文件,而不是默认输出目标STDOUT
。--suffixes
- 有效源代码文件扩展名的逗号分隔字符串,例如 php、phtml。--exclude
- 用于忽略目录的以逗号分隔的模式字符串。使用星号按模式排除。例如*src/foo/*.php
或*src/foo/*
--strict
- 还使用 @SuppressWarnings 注释报告这些节点。--ignore-errors-on-exit
- 即使出现错误,也会以零代码退出。--ignore-violations-on-exit
- 即使发现任何违规,也会以零代码退出。--cache
- 将启用结果缓存。默认为当前工作目录中的.phpmd.result-cache.php
。--cache-file
- 与--cache
配合会将.phpmd.result-cache.php
的默认结果缓存文件路径覆盖为给定的文件路径。--cache-strategy
- 设置缓存策略以确定文件是否仍然新鲜。要么是基于文件内容的内容,要么是基于文件修改时间戳的时间戳。--generate-baseline
- 将为规则集定义文件旁边的现有违规生成phpmd.baseline.xml
。违规的文件路径将相对于当前工作目录。--update-baseline
- 将删除现有phpmd.baseline.xml
中不再存在的所有违规行为。将不会添加新的违规行为。违规的文件路径将相对于当前工作目录。--baseline-file
- 自定义基线 xml 文件的文件路径。如果不存在将默认为phpmd.baseline.xml
--color
- 在输出中启用颜色,例如文本渲染器将以黄色显示规则名称,以红色显示错误描述。--extra-line-in-excerpt
- 指定在 html 格式的代码片段中添加多少额外行命令行示例:
phpmd PHP/Depend/DbusUI xml 代码大小 --reportfile "phpmd.xml" --suffixes "php,phtml"
选项可以位于参数之前或之后。可以使用空格或等号 ( =
) 将它们与其值分隔开。因此,以下语法与前一个语法等效:
phpmd --reportfile="phpmd.xml" --suffixes="php,phtml" PHP/Depend/DbusUI xml 代码大小
以-
开头的字符串将被识别为选项名称。如果参数以-
开头,请先设置选项,然后使用--
标记显式开始或参数列表:
phpmd --reportfile "phpmd.xml" --suffixes "php,phtml" -- -foo/Folder xml 代码大小
PHPMD 使用所谓的规则集来配置/定义一组将应用于被测源的规则。 PHPMD 的默认发行版已经附带了一些默认集,可以开箱即用。您可以使用集合名称调用 PHPMD 的 cli 工具来应用此配置:
~ $ phpmd /path/to/源文本代码大小
但是,如果您想对源应用多个规则集怎么办?您还可以将规则集名称列表(以逗号分隔)传递给 PHPMD 的 cli 工具:
~ $ phpmd /path/to/源文本代码大小,未使用的代码,命名
您还可以将自定义规则集文件与内置规则集混合使用:
~ $ phpmd /path/to/源文本代码大小,/my/rules.xml
就是这样。通过此行为,您可以指定自己的规则集组合来检查源代码。
PHPMD 还允许您指定多个源目录,以防您想为代码的某些部分创建一个输出
~ $ phpmd /path/to/code,index.php,/another/place/with/code 文本 codesize
或者使用 glob 模式:
~ $ phpmd src/main/php/*/*/*{Renderer,Node}.php 文本 my/rules.xml
PHPMD 还可以读取标准输入 stdin:
〜 $ cat src/MyService.php | phpmd - 文本 my/rules.xml
因此,要扫描的PHP代码可能是由其他程序生成的,不一定存储在文件中。
PHPMD 的命令行工具当前定义了四种不同的退出代码。
--ignore-violations-on-exit
标志来防止此行为,即使发现任何违规,该标志也会导致0 。目前 PHPMD 附带以下渲染器:
对于现有项目,可以生成违规基线。在此基线中的所有违规行为都将在进一步检查中被忽略。
推荐的方法是在项目根目录中添加phpmd.xml
。要生成旁边的phpmd.baseline.xml
:
~ $ phpmd /path/to/源文本 phpmd.xml --generate-baseline
要指定导出的自定义基线文件路径:
~ $ phpmd /path/to/源文本 phpmd.xml --generate-baseline --baseline-file /path/to/source/phpmd.baseline.xml
默认情况下,PHPMD 将在phpmd.xml
旁边查找phpmd.baseline.xml
。要覆盖此行为:
~ $ phpmd /path/to/源文本 phpmd.xml --baseline-file /path/to/source/phpmd.baseline.xml
要清理现有基线文件并仅删除不再存在的违规行为:
~ $ phpmd /path/to/源文本 phpmd.xml --update-baseline
作为 Tidelift 订阅的一部分提供。
PHPMD
和数千个其他软件包的维护者正在与 Tidelift 合作,为您用于构建应用程序的开源依赖项提供商业支持和维护。节省时间、降低风险并改善代码运行状况,同时向您使用的确切依赖项的维护者付费。了解更多。
如果您想为 PHPMD 做出贡献,请参阅贡献指南。