PHPMD 是 PHP Depend 的衍生项目,旨在成为知名的 Java 工具 PMD 的 PHP 等价物。

资助包维护!
Tidelift

安装: 89

依赖: 0

建议: 0

安全: 0

星星: 0

观察者: 0

分支: 347

2.7.0 2019-07-30 21:13 UTC

README

PHPMD 是 PHP Depend 的衍生项目,旨在成为知名的 Java 工具 PMD 的 PHP 等价物。PHPMD 可以看作是 PHP Depend 测量的原始指标流的用户友好的前端应用程序。

https://phpmd.org

Latest Stable Version License Travis Build Status AppVeyor Build Status Scrutinizer Build Status Scrutinizer Code Quality Chat with us on Gitter Monthly downloads Total downloads

安装

查看 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 "外部链接")