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