You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用纯净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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:40:22