如何使用注释来抑制PHPCS警告?

gre*_*emo 41 php phpunit phpcs

TestMyClass.php在同一个文件中有两个类定义(单元测试类),并且PHP Code Sniffer抱怨每个类必须自己在一个文件中.我怎么能压制这个警告?

class MyClassImpl implements MyInterface
{
    // ...
}

class MyClassTest extends \PHPUnit_Framework_TestCase
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*ood 75

您可以使用注释来获取PHP_CodeSniffer以忽略文件中的特定文件或行:https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#ignoring-files-and-folders

在这种情况下,将在您的第二个类定义上生成错误,因此您必须写下第二个定义,如下所示:

// @codingStandardsIgnoreStart
class MyClassTest extends \PHPUnit_Framework_TestCase
{
    // @codingStandardsIgnoreEnd
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是,如果不应该检查整个文件,您可以选择忽略整个文件,使用@codingStandardsIgnoreFile注释或在命令行上指定排除项(请参阅上一个链接获取信息).

如果您发现这么做很多,并且您不想在代码中添加注释,那么您还可以创建自己的自定义编码标准.假设您现在正在使用PSR2标准,您将创建一个XML文件(例如,mystandard.xml)并包含以下内容:

<?xml version="1.0"?>
<ruleset name="MyStandard">
 <description>My custom coding standard.</description>
 <rule ref="PSR2" />
 <rule ref="PSR1.Classes.ClassDeclaration.MultipleClasses">
   <severity>0</severity>
 </rule>
</ruleset>
Run Code Online (Sandbox Code Playgroud)

然后像这样运行PHP_CodeSniffer: phpcs --standard=/path/to/mystandard.xml /path/to/code

拥有自己的规则集可以让您做很多事情,包括更改错误消息,更改消息的严重性或类型,包括检查其他标准以及设置全局忽略规则.更多信息:https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-ruleset.xml

  • 请注意,语法现在已更改。`@codingStandards` 表示法已被弃用并替换为 `//phpcs:disable` 等。 [原始链接](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#ignoring-files-and -folders) 仍然有效并讨论了新语法。 (7认同)
  • 从[文档](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#ignoring-files-and-folders):您也可以使用`@ codingStandardsIgnoreLine`注释忽略一行.此注释将忽略注释所在的行以及以下行. (3认同)

pis*_*tor 43

使用以下注释,您可以忽略您想要的文件的任何部分。

忽略文件的所有嗅探:

<?php
// phpcs:ignoreFile
Run Code Online (Sandbox Code Playgroud)

仅忽略当前行和下一行:

// phpcs:ignore
public function store($myArray)
Run Code Online (Sandbox Code Playgroud)

忽略当前行:

public function store($myArray) // phpcs:ignore
Run Code Online (Sandbox Code Playgroud)

忽略文件中一定数量的行:

// phpcs:disable
public function store($myArray): void
{
    if (count($myArray) > 3) {
        // Humongous amount of legacy code you don't want to look at
    }

    return;
}
// phpcs:enable
Run Code Online (Sandbox Code Playgroud)

您还可以使用// phpcs:ignore// phpcs:disable指定要禁用的消息、嗅探、类别或标准,例如:

// phpcs:ignore Squiz.Arrays.ArrayDeclaration.SingleLineNotAllowed
$foo = [1,2,3];
Run Code Online (Sandbox Code Playgroud)

如果您想阅读有关此主题的更多信息,可以访问wiki。一些例子取自那里。


Wil*_*ill 11

@codingStandardsversion开始不推荐使用该语法3.2.0,请phpcs改用。

一些例子:

// phpcs:disable
// phpcs:ignore
// phpcs:enable
Run Code Online (Sandbox Code Playgroud)

请参阅此页面以获取更多信息:https : //github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#ignoring-parts-of-a-file


Bra*_*rad 7

虽然我喜欢最上面的答案,但如果您不关心特定文件,我也会建议这个答案。

运行这个命令:

phpcs --config-set show_warnings 0

如下所示: https: //github.com/squizlabs/PHP_CodeSniffer/wiki/Configuration-Options#hiding-warnings-by-default

关于以这种方式设置配置的注意事项是,如果您删除供应商文件夹或更新库,它们将被清除,并且您必须再次设置它们。