如何仅用纯净PSR2规则进行Code Sniffer校验及规则文档查询
关于PHP_CodeSniffer仅使用纯净PSR2规则及规则文档的问题
当前配置
命令行配置
phpcs --config-set default_standard PSR2
XML规则集配置
<?xml version="1.0"?> <ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="test"> <file>./../../web</file> <arg name="standard" value="PSR2"/> <arg name="extensions" value="php"/> <arg name="basepath" value="./../../"/> <arg name="tab-width" value="4"/> <rule ref="PSR2"> <exclude name="Generic.WhiteSpace.DisallowTabIndent"/> <exclude name="Generic.Files.LineLength.TooLong"/> </rule> <rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/> <rule ref="Generic.WhiteSpace.ScopeIndent"> <properties> <property name="indent" value="4"/> <property name="tabIndent" value="true"/> </properties> </rule> </ruleset>
问题
当前校验报告里出现了PSR1、PSR2、Generic和Squiz规则,想知道怎么只使用纯净的PSR2规则校验,排除Generic和Squiz规则?另外,Generic和Squiz规则的标准文档在哪里找?
解决方案
首先得明确:PSR2是PSR1的超集,所以没办法完全排除PSR1。但可以去掉额外引入的Generic、Squiz规则,以及你自己添加的Generic规则。
修改XML规则集配置
调整你的规则集文件,移除手动添加的Generic规则,同时明确禁用整个Generic和Squiz规则集:
<?xml version="1.0"?> <ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="test"> <file>./../../web</file> <arg name="standard" value="PSR2"/> <arg name="extensions" value="php"/> <arg name="basepath" value="./../../"/> <arg name="tab-width" value="4"/> <!-- 仅引用PSR2标准,保留你需要排除的特定规则 --> <rule ref="PSR2"> <exclude name="Generic.WhiteSpace.DisallowTabIndent"/> <exclude name="Generic.Files.LineLength.TooLong"/> </rule> <!-- 禁用整个Generic和Squiz规则集 --> <exclude-pattern name="Generic.*"/> <exclude-pattern name="Squiz.*"/> </ruleset>
注意事项
- 删掉之前手动添加的
<rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/>和<rule ref="Generic.WhiteSpace.ScopeIndent">,这些是额外引入的Generic规则,不属于纯净PSR2范畴。 - 如果想连PSR2本身包含的Generic规则也全部排除,就得逐个排除PSR2里引用的Generic规则,而不是直接禁用整个Generic集,比如:
<rule ref="PSR2"> <!-- 排除PSR2内置的所有Generic规则 --> <exclude name="Generic.*"/> <!-- 保留你原本需要排除的规则 --> <exclude name="Generic.WhiteSpace.DisallowTabIndent"/> <exclude name="Generic.Files.LineLength.TooLong"/> </rule>
不过这种做法可能会破坏PSR2标准的完整性,建议优先保留PSR2自带的规则,只排除你明确不需要的特定规则。
规则文档位置
- Generic规则:属于PHP_CodeSniffer内置的通用规则集,文档在PHP_CodeSniffer源码仓库的
src/Standards/Generic/Docs目录下,每个规则都有对应的说明文件。 - Squiz规则:同样是PHP_CodeSniffer内置规则集,文档在源码仓库的
src/Standards/Squiz/Docs目录下,里面有该规则集所有规则的详细说明。
内容的提问来源于stack exchange,提问作者user2219071
相关产品推荐
相关产品推荐

