我们有一个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框架)。所以我想请忽略它。
我找到了一个解决方案,用于删除“行缩进错误”错误,但首先我应该说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手册 。