【问题标题】:How can I suppress PHPCS warnings using comments?如何使用注释抑制 PHPCS 警告?
【发布时间】:2013-04-08 23:52:34
【问题描述】:

我的TestMyClass.php 在同一个文件(单元测​​试类)中有两个类定义,PHP Code Sniffer 抱怨每个类都必须单独在一个文件中。如何取消此警告?

class MyClassImpl implements MyInterface
{
    // ...
}

class MyClassTest extends \PHPUnit_Framework_TestCase
{
    // ...
}

【问题讨论】:

    标签: php phpunit phpcs


    【解决方案1】:

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

    在这种情况下,错误将在您的第二个类定义中生成,因此您必须像这样编写第二个定义:

    // @codingStandardsIgnoreStart
    class MyClassTest extends \PHPUnit_Framework_TestCase
    {
        // @codingStandardsIgnoreEnd
        // ...
    }
    

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

    如果您发现自己经常这样做并且不想将 cmets 添加到代码中,您还可以创建自己的自定义编码标准。假设您现在使用的是 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>
    

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

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

    【讨论】:

    • +1 用于跳过测试文件。或者也许你可以使用PHPUnitStandard :-)
    • 来自documentation:您也可以使用@codingStandardsIgnoreLine 注释忽略一行。此评论将忽略评论所在的行和以下行。
    • 请注意,语法现在已更改。 @codingStandards 符号已被弃用并替换为 //phpcs:disable 等。上面的 original link 仍然有效并讨论了新语法。
    【解决方案2】:

    使用以下 cmets,您可以忽略文件的任何部分。

    忽略文件的所有嗅探:

    <?php
    // phpcs:ignoreFile
    

    只忽略当前行和下一行:

    // phpcs:ignore
    public function store($myArray)
    

    忽略当前行:

    public function store($myArray) // phpcs:ignore
    

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

    // 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
    

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

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

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

    【讨论】:

      【解决方案3】:

      @codingStandards 语法自 3.2.0 版本起已弃用,请改用 phpcs

      一些例子:

      // phpcs:disable
      // phpcs:ignore
      // phpcs:enable
      

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

      【讨论】:

        【解决方案4】:

        尽管我喜欢最佳答案,但如果您不关心特定文件,我也会建议您使用此答案。

        运行这个命令:

        phpcs --config-set show_warnings 0

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-23
          • 2013-08-02
          • 2021-08-28
          • 2021-02-08
          • 1970-01-01
          • 1970-01-01
          • 2018-07-11
          • 2019-02-25
          相关资源
          最近更新 更多