如何忽略PHP CodeSniffer中的某些编码标准错误


14

我们有一个PHP 5 Web应用程序,目前正在评估PHP CodeSniffer,以便确定强制代码标准是否可以提高代码质量而不会引起太多麻烦。如果看起来不错,我们将添加一个SVN pre-commit挂钩,以确保在dev分支上提交的所有新文件都没有编码标准气味。

有没有一种方法可以将PHP codeSniffer配置为忽略特定类型的错误?还是让它将某个错误视为警告?

这里有一个例子来演示这个问题:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
    <?php
    echo getTabContent('Programming', 1, $numX, $numY);

    if (isset($msg)) {
        echo $msg;
    }
    ?>
</div>
</body>
</html>

这是PHP_CodeSniffer的输出:

> phpcs test.php 

-------------------------------------------------- ------------------------------
发现2条错误和1条警告影响3条线
-------------------------------------------------- ------------------------------
  1 | 警告| 行数超过85个字符;包含121个字符
  9 | 错误| 缺少文件doc评论
 11 | 错误| 线缩进不正确;预期有0个空格,找到4个
-------------------------------------------------- ------------------------------

我遇到“ 行缩进不正确 ”错误。我猜是因为我将PHP缩进与HTML缩进混合在一起。但这使它更具可读性,不是吗?(考虑到我现在没有转移到MVC框架的资源)。所以我想忽略它。


1
这与IMO有关的编程问题有点过多。.因为它是关于“ LINT”之类的实用程序,因此铁杆程序员(不一定是网站管理员)最感兴趣。但这是很好的要求和格式,因此我们现在可以保留它。
杰夫·阿特伍德

2
关于第1行警告:我可以建议使用HTML5 DOCTYPE吗?
luiscubal

感谢您的反馈杰夫-我很高兴提出这一建议。创建问题时,我可能应该意识到没有PHP标记时:-)。
汤姆(Tom)2010年

@luiscubal-他,很好的建议;喜欢你的想法;-)
汤姆(Tom)2010年

Answers:


11

我找到了解决“错误地缩进行 ”错误的解决方案,但首先我应该说Dragonmantank有一个优点-您不应该混合使用PHP和HTML。这是头痛的良方。但是,不幸的是,我认为混合使用PHP和HTML非常普遍,尤其是在旧版软件中。

假设我们使用的是phpcs默认编码标准(即PEAR标准),最快,最肮脏的修复方法是删除相关的Sniff文件。使用Ubuntu为我找到PEAR标准的位置,它在这里:

> cd /usr/share/php/PHP/CodeSniffer/Standards/PEAR/Sniffs/WhiteSpace

重命名该ScopeIndentSniff.php文件,以便不再执行检查代码缩进的嗅探:

> sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

完成的工作 -现在将不检查缩进,并且不会发生“ 行缩进不正确 ”错误(并且您的代码将不是标准的,而且质量也不会很高!)。


上面的解决方案非常业余-较干净的解决方案是创建一个新的编码标准,该标准将使用除您挑选的樱桃定制之外的所有PEAR标准。这是非常快的操作。这是使用getIncludedSniffs()getExcludedSniffs()和一些phpcs命名约定的方法:

Go to the directory where the phpcs coding standards are defined:
> cd /usr/share/php/PHP/CodeSniffer/Standards

Create a new directory for your new standard:
> sudo mkdir PEARish
> cd PEARish

Create your new standard by saving the following in the file:
> sudo emacs PEARishCodingStandard.php
<?php
class PHP_CodeSniffer_Standards_PEARish_PEARishCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard
{
    public function getIncludedSniffs()
    {
      return array('PEAR');
    }

    public function getExcludedSniffs()
    {
      return array('PEAR/Sniffs/WhiteSpace/ScopeIndentSniff.php');
    }
}
?>

通过phpcs使用--standard标志调用来测试新的定制编码标准。例如:

> phpcs --standard=PEARish Test.php

一旦运行,您可以将新标准设置为默认标准,这意味着您不必--standard每次使用时都输入标志phpcs

> sudo phpcs --config-set default_standard PEARish

有关更多信息,请参见phpcs手册


这真的很方便-我用这个答案来消除“类必须在至少一个级别的命名空间中”类出现的错误以及驼峰式案例函数命名错误。我正在尽可能多地使用PSR2,但在编辑Magento网站时,我无权检查并重命名每个功能并整理命名空间。
Dave Child

7

在将PHP代码与HTML混合在一起的情况下,运行PHPCS会遇到很多问题。仅当您解析纯PHP脚本时,PHPCS才真正有用。内置的编码标准是基于纯PHP而非混合的PHP / HTML构建的。

一种选择是建立自己的自定义标准,然后改用它。定制标准将考虑代码的混合,但是编写起来可能很痛苦。

另一个选择是使用模板系统,因为您说过不想迁移到框架。SmartyTwig都可以在MVC框架之外使用。移至其中之一,然后让PHPCS仅解析.PHP文件,而不解析模板文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.