如何忽略PHP_CodeSniffer中的一些错误或警告

时间:2018-07-23 07:35:58

标签: php

我正在使用PHP_CodeSniffer分析我的php代码。问题在于我的应用程序代码非常复杂(大约10,000个文件),并且有点旧(大约15年),因此它没有遵循PSR之类的标准。
这就是CodeSniffer生成非常大的报告的原因。因为解决所有“问题”需要花费太多时间,所以我正在考虑忽略某些事情,例如。

Class name must begin with a capital letter

Opening brace of a class must be on the line after the definition

是否有一种方法可以告诉CodeSniffer在创建报告时忽略此类错误?

3 个答案:

答案 0 :(得分:2)

要仅针对给定的代码片段禁用/重新启用整个编码标准或特定嗅探,请使用一些特殊注释

// phpcs:disable Generic.Commenting.Todo.Found
$xmlPackage = new XMLPackage;
$xmlPackage['error_code'] = get_default_error_code_value();
// TODO: Add an error message here.
$xmlPackage->send();
// phpcs:enable

// phpcs:disable PEAR,Squiz.Arrays
$foo = [1,2,3];
bar($foo,true);
// phpcs:enable PEAR.Functions.FunctionCallSignature
bar($foo,false);
// phpcs:enable

注意:所有phpcs:disablephpcs:enable注释仅适用于它们所包含的文件。文件处理完毕后,将为将来的文件重新启用所有嗅探。

您也可以使用phpcs:ignore注释忽略一行。该注释将忽略注释所在的行以及下一行。

// phpcs:ignore
$foo = [1,2,3];
bar($foo, false);

// phpcs:ignore Squiz.Arrays.ArrayDeclaration.SingleLineNotAllowed
$foo = [1,2,3];
bar($foo, false);

如果您只想检查文件中的一小部分嗅探,则可以在命令行中指定它们

$ phpcs --standard=PEAR --sniffs=Generic.PHP.LowerCaseConstant,PEAR.WhiteSpace.ScopeIndent /path/to/code

或者您可以运行整个编码标准,并排除一小部分嗅探

$ phpcs --standard=PEAR --exclude=Generic.PHP.LowerCaseConstant,PEAR.WhiteSpace.ScopeIndent /path/to/code

答案 1 :(得分:1)

您将需要创建自己的规则集。 以下是有关可用选项的信息:​​https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-ruleset.xml,在这里您可以找到如何创建这样的选项:https://ncona.com/2012/12/creating-your-own-phpcs-standard/

您可以复制现有的一个(例如PSR2)并根据需要进行调整。

在codeniffer项目的github上,您可以找到PSR2规则集:https://github.com/squizlabs/PHP_CodeSniffer/blob/master/src/Standards/PSR2/ruleset.xml

答案 2 :(得分:0)

由于我有大量文件,可能还有一些排除文件,所以定义自己的规则集似乎是个好主意。我按照链接页面下的说明创建了这个文件:

<?xml version="1.0"?>
<ruleset name="MyRuleset">
    <description>Coding standard based on Zend with some additions.</description>

    <!-- Include the whole Zend standard -->
    <rule ref="Zend"/>

    <!-- Exclude some rules -->
    <rule ref="Generic.Classes.OpeningBraceSameLine">
        <exclude name="Generic.Classes.OpeningBraceSameLine"/>
    </rule>

</ruleset>

我通过以下方式开始分析过程:

./vendor/bin/phpcs --standard=/path/to/my/ruleset.xml /path/to/my/app

该过程已成功完成,但仍然出现错误:

Opening brace of a class must be on the line after the definition

我的php文件中的类定义如下:

class MyTool {
}