问题标签 [phpmd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
235 浏览

php - 有没有分析PHP代码的工具来检查返回值是否被正确使用?

假设我有以下代码:

我在整个代码中都有很多调用$thirdPartyAPI,所以我不想忘记检查是否$result是有效的或发生了错误。

我检查了PHP Code SnifferPHP Mess Detector工具,但我发现它们的规则都不适合这种特殊情况。

我想知道是否有一种工具(例如静态代码分析工具)能够报告我是否忘记检查返回值是否具有特定值。

0 投票
2 回答
199 浏览

php - PHP Mess Detector 给出误报

我正在使用一个开源项目,并认为使用phpmd实现自动代码修订是个好主意。

它向我展示了许多我已经修复的编码错误。但是其中一个让我很好奇。

考虑以下方法:

在这里,phpmd 说Else 从来没有必要

...永远不需要带有 else 分支的 if 表达式。您可以以不需要 else 的方式重写条件,并且代码变得更易于阅读。...

is_dir只要给定路径是文件或根本不存在,就会返回 false,因此,在我看来,此测试根本无效。

有没有办法解决它,或者可能只是忽略这样的情况?

0 投票
1 回答
1081 浏览

laravel - laravel 需要解释避免使用静态访问

我想更深入地了解有关使用静态方法的知识。我正在为我的应用程序使用 laravel 5.2 框架。

在我的应用程序中,我主要使用静态函数例如,我有模型类名称,如 post,方法名称是 get_post(),只有当我错过 laravel 中的静态关键字时,它才声明为静态,它会引发错误

在我的控制器中,我将调用此方法

我怎样才能避免将此方法称为静态方法?根据PHPMD 1.4.0 规则

请任何人解释清楚。

0 投票
1 回答
413 浏览

php - 了解php静态代码分析结果

我需要一个建议。找不到任何关于静态代码分析结果的信息。例如,我使用 phploc,并生成报告。但我不知道这是一个好结果还是一个坏结果。据我了解,我不会喜欢报告的实用程序必须相同。看到结果后,你可以解决坏代码与否。

我在哪里可以看到有关此结果中所有行的信息?

感谢帮助!

我发现的所有内容是:最大方法复杂度不得大于 10。 CyclomaticComplexity - 1-4 低 - 5-7 表示中等复杂度 - 8-10 表示高复杂度 - 11+ 非常高复杂度。

0 投票
1 回答
2110 浏览

php - PHPMD 不能带参数运行

我一直在尝试将 phpmd 配置为与 PhpStorm 一起使用,但我被困在这里。这是我遇到的错误:

PHP Mess Detector
phpmd:无法正确运行带有参数的工具:
C:/Users/me/AppData/Local/Temp/___18.tmp/folder/myclass.php
xml codesize,controversial,design,naming,unusedcode
可能的工具进程挂起5秒后。

我在 Windows 上使用 PhpStorm。奇怪的是,当我这样做时,它似乎会运行Code > Inspect Code,只是没有进行现场检查。事情是我的路径不是这个,我的文件位于C:/Users/Code/myapp.

谁能帮我解决这个错误?

0 投票
2 回答
2572 浏览

sublimetext3 - SublimeLinter:模块 phpcs 和 phpmd 不工作

Sublime Text 3我已经通过Package Manager以下软件包安装:

  • SublimeLinter
  • SublimeLinter-phpmd
  • SublimeLinter-phpcs
  • 和其他几个..

问题是两者phpmd都没有phpcs工作。在 ST3 中打开php文件然后单击:ctrl和 ` 我得到以下调试信息:

我对这两行特别感兴趣:

  • SublimeLinter:警告:phpcs 已停用,无法找到“ phpcs
  • SublimeLinter:警告:phpmd 已停用,无法找到“ phpmd

我试图解决这个问题的是编辑用户配置文件: Sublime text 3: Preferences -> package settings -> sublime linter-> settings - user

然后添加cmd如下密钥:

正如您所猜到的 - 这并没有解决问题。我还尝试在末尾写不带 / 的路径,并尝试使用 \ 分隔符而不是 /。而且我还尝试直接指定 PFAM 文件。并且还尝试使用 ${project} 变量而不是整个 C:/ 路径。ST3 重启后我仍然收到警告。

我的另一个问题是 - 如何在调试窗口中输出“${project}”目录?因为我不确定它是否设置正确,所以我想对其进行测试。

更多信息:

Sublime 项目目录为:C:\xampp\htdocs\web\test.sublime-project

这是 phpmdphpcs安装:

  • "C:\xampp\htdocs\web\vendor\bin\phpcs\phpcbf.phar"
  • "C:\xampp\htdocs\web\vendor\bin\phpcs\phpcs.phar"
  • "C:\xampp\htdocs\web\vendor\bin\phpmd\phpmd.phar"

编辑:

好像我做错了。我在composer.json项目目录中添加了以下内容:

使用命令安装所有内容后composer install- 我vendor为我创建了包含大量目录的文件夹,包括该bin文件夹。它现在拥有所有必要的文件,但我仍然遇到同样的错误。由于某种原因找不到模块。

0 投票
0 回答
795 浏览

php - PHPMD - 检查重复的代码

我刚刚发现了 PHPMD 工具,我注意到它真的很有用,问题是我阅读了有关创建自定义规则和东西的文档,但它只是谈论使用 PHPDepend 的软件指标。

我想知道是否可以实施特定规则来检查重复代码?

我注意到我也可以在自定义规则中使用特定节点的抽象语法树,但这可能对我没有多大帮助,对吧?

因为要检查重复的代码,我需要比较几个不同的函数/方法节点,并且每个节点都调用一次 apply 方法?

我如何扩展 PHPMD 来实现这样的深度代码分析?我想远远超出软件指标..

谢谢!

0 投票
1 回答
541 浏览

php - 使用 extract() 时的显式变量声明

我有以下片段:

此代码完美运行(此处为完整源代码)。但是,我想确保在旅途中遵循一些好的做法。我现在收到 [一些 CodeClimate 警告] (PHPMD)( https://codeclimate.com/github/timegridio/timegrid/app/Listeners/SendBookingNotification.php ):

  • 避免使用未使用的局部变量,例如“$locale”。
  • 避免使用未使用的局部变量,例如“$timezone”。
  • 避免使用未使用的局部变量,例如“$template”。
  • 避免使用未使用的局部变量,例如“$subject”。
  • 避免使用未使用的局部变量,例如“$header”。
  • 避免使用未使用的局部变量,例如“$params”。

哪些是优雅的方法?

list()我应该用或类似的东西明确声明变量吗?

提前致谢

0 投票
0 回答
1517 浏览

php - PHPMD忽略规则集

我在phpmd.xml文件中设置了这个规则:

但是这个规则被忽略了,我仍然得到这个错误:

/var/www/html/tests/Model/AdvertTest.php:18 The class AdvertTest has 1026 lines of code. Current threshold is 1000. Avoid really long classes.

知道为什么 phpmd 不阅读此规则。实际上,修复它的唯一方法是在类的顶部添加抑制错误。

更多信息:我在 MAC 上运行 phpmd,使用 Docker 使用以下命令: docker-compose exec php sh -c "./vendor/bin/phpmd ./tests text phpmd.test.xml"

完整的 XML:PHP Mess Detector 规则集

0 投票
1 回答
716 浏览

php - PHPCS / PHPMD:是否有 PHP Code Sniffer / Mess Detector 方法来确保有 docblocks?

有没有办法可以使用 PHP Code Sniffer 和/或 PHP Mess Detector 来检测我的类/属性/方法是否有正确的文档块?例如:

上面的例子应该引发危险信号。但是,以下示例应该通过:

如果文档块正确(如果返回类型与返回的内容匹配),我对每个定义不感兴趣,我的意思是:如果它也这样做会很好,但我要采取的第一步是确保存在文档块。