我正在使用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在创建报告时忽略此类错误?
答案 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:disable
和phpcs: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 {
}