PHPCS嗅探名称似乎与PHPCBF修复程序不匹配

时间:2015-08-21 09:09:23

标签: php phpcodesniffer

我在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)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

确保标准是通过以下方式注册的:

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