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

标签 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

制作:

ERROR: The specified sniff code "Generic.Sniffs.ControlStructures.InlineControlStructure.NotAllowed" is invalid

对phpcs有效怎么会无效呢?我似乎无法在文档中找到映射或命名约定映射。

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

最佳答案

当您运行 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

关于PHPCS 嗅探名称似乎与 PHPCBF 修复不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32136566/

相关文章:

php - mysql 获取所有其他行如何从同一个表中获得相同的 id

php - PSR2 代码风格和 PHP Code Sniffer 不一致?

php - 如何为php代码嗅探器调用自定义ruleset.xml

php - 是否有使用 PHP 代码嗅探器执行严格比较 (===) 的规则?

javascript - 您能捕获连接错误吗?

php - 在 phpStorm 中指定 php.ini

php - 使用PHP从文件夹中获取图像:代码可以正常工作并获取图像路径,但img未被放入HTML中

php - 无法以编程方式更改WordPress用户头像

php - 如何正确覆盖 PHP CodeSniffer 规则集中的规则/嗅探并避免代码的双重检查?

eclipse - symfony2 php codeniffer 标准错误