phpcs - 将默认消息类型设置为来自自定义规则集的所有片段的警告

phpcs - Set default message type to warning for all snips from a custom ruleset

我正在配置 phpcs 以使用自定义规则集来使用 WordPress coding standards

我的phpcs.xml看起来像这样

<?xml version="1.0"?>
<ruleset name="Bulk Delete">
    <description>Bulk Delete coding standard</description>

    <file>./</file>

    <!--Docs issues should be shown as warnings -->
    <rule ref="WordPress-Docs">
        <type>warning</type>
    </rule>
</ruleset>

WordPress-Docs 是一个自定义规则集,它是 defined as part of WordPress coding standard 嗅探器,我希望来自该规则集的所有消息都标记为 warnings 而不是 errors.

PHP CodeSniffer wiki 中的 Annotated ruleset file 说我可以做这样的事情。

<!--
    Here we are including a specific sniff but also changing
    the error message of a specific message inside the sniff.
    Note that the specific code for the message, which is
    CommentFound in this case, is defined by the sniff developer.
    You can display these codes by using the -s command line
    argument when checking a file.

    Also note that this message has a variable inside it,
    which is why it is important that sniffs use a printf style
    format for their error messages.

    We also drop the severity of this message from the
    default value (5) so that it is hidden by default. It can be
    displayed by setting the minimum severity on the PHP_CodeSniffer
    command line. This is great if you want to use some messages
    only in code reviews and not have them block code commits.
 -->
 <rule ref="Generic.Commenting.Todo.CommentFound">
  <message>Please review this TODO comment: %s</message>
  <severity>3</severity>
 </rule>

但这只有在您直接包含嗅探时才有效。但就我而言,我想让这项工作适用于使用 rule 标签包含的自定义规则集。

可以吗?

编辑:从 3.0.0 版开始,PHPCS 现在支持更改整个标准、类别或嗅探的消息类型。所以下面的规则集语法现在可以工作了:

<rule ref="WordPress-Docs">
    <type>warning</type>
</rule>

原回答:

不,这在 PHP_CodeSniffer 中是不可能的。您只能更改特定消息代码的类型,而不能更改整个规则集、类别或嗅探文件。

如果您可以控制 WordPress 标准,则可以使用自定义配置选项让用户指定 Doc 标准是否应使用错误或警告,但这将是一个非常具体的用例。

如果没有这种级别的控制,您在一个 运行 中真的无能为力。你必须做 2 运行s;第一个包含除 Doc 标准之外的所有内容,第二个仅包含 Doc 标准。第一个是您要更正的规则错误列表,第二个是您的信息列表。

这不是一个好的解决方案,但如果不对核心 PHP_CodeSniffer 进行更改,我想不出任何办法来完成您想要的事情,您可以在此处提出建议:https://github.com/squizlabs/PHP_CodeSniffer/issues