it-swarm.cn

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

我们有一个PHP 5 Web应用程序,我们目前正在评估 PHP CodeSniffer 以确定强制代码标准是否可以提高代码质量而不会引起太多麻烦。如果看起来不错,我们将添加一个SVN预提交钩子,以确保在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个错误(S)和1个警告(S)影响3行(.____。)---------------------- -------------------------------------------------- -------- 
 1 |警告|行超过85个字符;包含121个字符
 9 |错误|缺少文件doc评论
 11 |错误|线缩进不正确;预期0个空格,找到4 
 --------------------------------------- ----------------------------------------- 

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

13
Tom

我找到了一个解决方案,用于删除“行缩进错误”错误,但首先我应该说dragonmantank有一个很好的观点 - 你不应该混合PHP和HTML。这是头痛的秘诀。但是,不幸的是,我认为混合PHP和HTML非常常见,特别是在传统软件中。

假设我们使用phpcs默认编码标准( PEAR 标准),最快和最简单的解决方法是删除相关的Sniff文件。找到PEAR标准的位置,对我来说,使用 bunt ,它在这里:

> 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');
    }
}
?>

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

> phpcs --standard=PEARish Test.php

一旦它工作,您可以将新标准设置为默认值,这意味着每次使用phpcs时都不需要键入--standard标志:

> Sudo phpcs --config-set default_standard PEARish

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

11
Tom

使用HTML混合PHP代码运行PHPCS会遇到很多问题。 PHPCS仅在解析纯PHP脚本时非常有用。内置编码标准是围绕纯PHP构建的,而不是混合PHP/HTML。

一种选择是建立自己的自定义标准并使用它。自定义标准会考虑代码的混合,但写入可能会很痛苦。

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

7
dragonmantank