3

我在 phpcs.xml 中定义了一些嗅探,如下所示:

<rule ref="PSR2">
    <exclude name="Generic.ControlStructures.InlineControlStructure.NotAllowed"/>
</rule>

我的意图是以细化的方式逐渐收紧 CS 规则(还有更多的排除规则)。

但是,当我尝试运行 CBF 时,它会以相同的嗅探名称失败:

$ ./vendor/bin/phpcbf --standard=PEAR --sniffs=Generic.Sniffs.ControlStructures.InlineControlStructure.NotAllowed path/to/code

生产:

错误:指定的嗅探代码“Generic.Sniffs.ControlStructures.InlineControlStructure.NotAllowed”无效

如果它适用于phpcs,它如何无效?我似乎在文档中找不到映射或命名约定映射。

(我已经尝试将“PEAR”、“PSR2”和“Generic”作为标准,我也尝试过将其作为 Generic.ControlStructures.InlineControlStructure.NotAllowed)

4

2 回答 2

2

当您运行 PHPCBF 时,使用与 PHPCS 完全相同的参数运行它。PHPCBF 将正常读取您的 ruleset.xml 文件并处理其中找到的所有规则。您排除在报告为错误之外的任何内容也将被排除在修复之外。如果您设置了任何配置变量,它也会读取这些变量。PHPCBF 和 PHPCS 共享相同的代码库。

您遇到的具体错误是这Generic.Sniffs.ControlStructures.InlineControlStructure.NotAllowed不是嗅探名称。这是一个完整的错误代码。您不能在命令行上排除特定的错误代码。如果您Generic.Sniffs.ControlStructures.InlineControlStructure改用它,它会起作用,但它也会排除该嗅探中的所有错误,而不仅仅是您提供的特定消息。

因此,最好的办法是为 PHPCS 创建自定义编码标准,并确保您想要修复的所有错误都被报告,并且您想要排除的错误被隐藏。当您对该结果感到满意时,只需将phpcs命令更改为phpcbf并让它运行。

如果您发现自己需要不同的规则来检查和修复,您可以标记 ruleset.xml 文件以告诉 PHPCS 和 PHPCBF 执行哪些规则:https ://github.com/squizlabs/PHP_CodeSniffer/wiki /Annotated-ruleset.xml#selectively-applying-rules

于 2015-08-22T10:28:25.093 回答
2

确保标准由以下人员注册:

phpcs -i

否则通过以下方式添加:

phpcs --config-set installed_paths path/to/coder_sniffer/standards

注册后,您可以通过以下方式列出所有嗅探:

phpcs -e --standard=PEAR

在我的phpcs这个嗅探中称为:Generic.ControlStructures.InlineControlStructure

$ phpcs -e --standard=PEAR | grep ControlStructures.InlineControlStructure
  Generic.ControlStructures.InlineControlStructure
于 2018-03-26T11:12:05.670 回答