引用来自不在标准目录中的规则集的自定义php代码嗅探器嗅探


Reference custom php codesniffer sniffs from a ruleset that is not in the standards directory

我有一个带有一些自定义嗅探器的规则集。我的项目目录/存储库中有规则集,但我不知道如何将自定义嗅探器保留在那里。

如果我在规则集中放入一个相对链接:

 <rule ref="./MySniffs/foo"/> 

然后它抛出这个错误:

PHP_CodeSniffer_Exception: Referenced sniff "./MySniffs/foo" 
does not exist in C:'path'to'php'php'pear'PHP'CodeSniffer.php

因此,相对路径是从CodeSniffer.php文件计算出来的,而不是从规则集计算出来的。

是否可以在不使用绝对路径的情况下使规则集指向自定义嗅探?

我需要使用相对路径,因为这是一个包含多个实例的存储库。

排序。

它确实有效。我的问题是sniff类名的命名不正确。

包含规则集的文件夹必须是探查类名的一部分。需要以下路径。

/path/to/project/MyRuleset/ruleset.xml
/path/to/project/MyRuleset/Sniffs/SniffGroup/SniffNameSniff.php

这将使以下规则发挥作用。

 <rule ref="MyRuleset.SniffGroup.SniffName"/> 

这就是嗅探类的名称:

class MyRuleset_Sniffs_SniffGroup_SniffNameSniff implements PHP_CodeSniffer_Sniff