我安装了PTI Eclipse插件.
有可能改变PDepend,CodeSniffer并且UnitTest
当我尝试右键单击任何文件时,我也有一个Mess Detector选项,但单击它时没有任何反应.在搜索完所有配置选项后,我找不到任何设置PHPMD.
有谁知道如何解决它?
我有这个函数负责将文件名和mime-type转换成更"人性化"的东西(例如file.png,image/png到[Image,PNG]).我发现有趣的是,if() elseif()语句组的复杂度高于switch(true)语句.
使用以下代码,PHP Mess Detector输出一个4410的NPath:
public function humanKind()
{
$typeRA = explode("/", strtolower($this->type));
$fileRA = explode(".", $this->name);
$fileType = strtoupper($fileRA[count($fileRA) - 1]);
switch($typeRA[0]) {
case "image":
$humanType = "Image";
break;
case "video":
$humanType = "Video";
break;
case "audio":
$humanType = "Sound";
break;
case "font":
$humanType = "Font";
break;
default:
$humanType = "File";
}
switch ($this->type) {
case "application/msword":
case "application/pdf":
case "applicaiton/wordperfect":
case "text/plain":
case "text/rtf":
case "image/vnd.photoshop":
case "image/psd":
case "image/vnd.adobe.photoshop":
case "image/x-photoshop":
case "application/xml": …Run Code Online (Sandbox Code Playgroud) 我在函数中有这个代码:
if ($route !== null) { // a route was found
$route->dispatch();
} else {
// show 404 page
$this->showErrorPage(404);
}
Run Code Online (Sandbox Code Playgroud)
现在PHPmd给出了一个错误:
run方法使用else表达式.否则永远不需要,您可以简化代码,而无需其他工作.
现在我想知道是否真的会更好的代码来避免else而只是在if部分添加一个return语句?
我有Ubuntu 14.04 + Sublime text 3并安装了phpcs软件包
我安装了附加件phpcs 并php-cs-fixer 在我的系统上
来自这个博客
我发现phpmd(PHP Mess Detector)也是一个必需的库,因此根据官方php md 页面上的给定指令使用替代方法安装phpmd 从github存储库 一切都已完成.
:~/phpmd$ curl -s http://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: /home/keshav/phpmd/composer.phar
Use it: php composer.phar
Run Code Online (Sandbox Code Playgroud)
但现在我在终端上写字
phpmd /opt/lampp/htdocs/myproject, myfile.php
Run Code Online (Sandbox Code Playgroud)
phpmd:找不到命令
主目录上有phpmd文件夹,没有任何错误.
composer.json根据github上的建议,我在项目文件夹中创建了核心PHP创建的本地项目.
请告诉我是什么意思
然后在项目中安装Composer (或直接下载composer.phar):
我刚刚第一次启动了PHPMD,可以预见的是,我有一个我无法弄清楚的错误.错误是
避免在方法'setLang'中使用对'InvalidArgumentException'类的静态访问.
而代码是
public function setLang($val0) {
switch ($val0) {
case ENG:
case FRE:
case SPA;
$this->lang = $val0;
break;
default:
throw new InvalidArgumentException("Invalid language choice.");
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了各种不同的东西,但我认为在一天结束时Exception是静态工厂(???)所以它必须具有静态访问权限.但是,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.
谁能帮我解决这个错误?
命令
phpmd app,config,routes text phpmd.xml
Run Code Online (Sandbox Code Playgroud)
我在 Laravel 项目上使用 phpmd,在 design.xml 下有一个名为的规则CouplingBetweenObjects,我想忽略 app/Http/Controllers 目录中的所有文件到此规则,phpmd 只提供--exclude使该目录通过所有规则的选项,是否可能通过 XML 文件或命令行忽略特定目录的规则
phpmd.xml
<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="Netask 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>Netask code style rule set
</description>
<rule ref="rulesets/codesize.xml/CyclomaticComplexity"/>
<rule ref="rulesets/codesize.xml/NPathComplexity"/>
<rule ref="rulesets/codesize.xml/ExcessiveMethodLength"/>
<rule ref="rulesets/codesize.xml/ExcessiveClassLength"/>
<rule ref="rulesets/codesize.xml/ExcessiveParameterList"/>
<rule ref="rulesets/codesize.xml/ExcessivePublicCount">
<properties>
<property name="minimum" value="30"/>
</properties>
</rule>
<rule ref="rulesets/codesize.xml/TooManyFields">
<properties>
<property name="maxfields" value="20"/>
</properties>
</rule>
<rule ref="rulesets/codesize.xml/TooManyMethods"/>
<rule ref="rulesets/codesize.xml/ExcessiveClassComplexity">
<properties>
<property name="maximum" value="30"/>
</properties>
</rule>
<rule ref="rulesets/controversial.xml"/>
<rule …Run Code Online (Sandbox Code Playgroud) 我试图了解圈复杂度的工作原理以及如何避免警告。是的,我明白编写代码的目的不是避免任意警告,但我至少想知道发生了什么,以便我可以决定我看到的代码是好还是坏。
我有一个看起来像的函数:
protected function update($uuid, $data, $householdUuid, $androidId) {
$household = $this->householdService->getHouseholdByUuid($householdUuid);
$this->updatePeriod($household, $data);
$this->updateNickname($household, $data, $androidId);
$this->updateDateOrder($household, $data);
$this->updateCurrency($household, $data);
$this->updateAccounts($household, $data);
$household->save();
return $this->respondUpdated();
}
Run Code Online (Sandbox Code Playgroud)
这被标记为具有 10 的圈复杂度。这怎么可能?从文档中,我将其视为 1。唯一的可能性是 PHPMD 正在下降到各种方法调用中。
但如果是这样,那么我就没有办法“修复”这个方法了。通常,我会通过提取较小的辅助方法来降低方法的复杂性。该方法已经被重构为各种 update() 方法,以消除发生的一堆条件更新。原始方法的圈复杂度也为 10,并且重构没有做任何事情。
或者问题可能更简单——我通过与 Jenkins 设置的持续集成来运行 PHPMD。PHPMD 没有使用最新的代码会不会有问题?在我已经将类重构到行数限制以下之后,我遇到了一些类似的问题,它会将类标记为行数过多。
我在 Laravel 控制器可调用类上使用 PHP Mess Detector,我收到这样的消息
Avoid using static access to class 'Illuminate\Support\Facades\Cache' in method '__invoke'
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么我必须避免在调用方法上使用静态访问?
phpmd ×10
php ×8
code-cleanup ×1
composer-php ×1
controller ×1
eclipse ×1
exception ×1
illuminate ×1
jenkins ×1
laravel ×1
phpstorm ×1
sublimetext3 ×1
testing ×1
ubuntu-14.04 ×1
unit-testing ×1