我们有一个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 

--------------------------------------------------------------------------------
FOUND 2 ERROR(S) AND 1 WARNING(S) AFFECTING 3 LINE(S)
--------------------------------------------------------------------------------
  1 | WARNING | Line exceeds 85 characters; contains 121 characters
  9 | ERROR   | Missing file doc comment
 11 | ERROR   | Line indented incorrectly; expected 0 spaces, found 4
--------------------------------------------------------------------------------


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

评论

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

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

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

@luiscubal-他,很好的建议;喜欢你的想法;-)

#1 楼

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

假设我们使用的是phpcs默认编码标准(即PEAR标准),则最快,最脏的修复是删除相关的嗅探文件。在我使用Ubuntu的情况下,找到PEAR标准的位置,在这里:已执行:

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


作业完成-现在将不检查缩进并且不会出现“行缩进不正确”错误(并且不会标准,不会达到如此高的质量!)。


以上解决方案非常业余-更干净的解决方案是创建一个新的编码标准,该标准使用除PEAR标准之外的所有PEAR标准您的樱桃采摘的定制。这是非常快的操作。以下是使用ScopeIndentSniff.phpgetIncludedSniffs()以及一些getExcludedSniffs()命名约定的方法:通过使用phpcs标志调用phpcs,测试新的自定义编码标准。例如:

> sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk


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

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手册。

评论


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

–戴夫儿童
13年12月31日在16:49

#2 楼

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

一种选择是建立自己的自定义标准,而改用它。定制标准会考虑到代码的混合,但是编写起来可能很麻烦。

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