如何配置PHP CodeSniffer实现基于PHP开标签的自定义起始缩进
开标签后自定义缩进的PHPCS配置实现
定位到的Generic.WhiteSpace.ScopeIndent Sniff 原生支持自定义缩进基准配置,不需要修改PHPCS核心源码,即可实现开标签后强制4空格起始缩进的校验规则,具体配置方式如下:
核心缩进规则适配
在项目根目录的PHPCS规则集文件(常见为phpcs.xml、ruleset.xml)中添加如下配置块:
<rule ref="Generic.WhiteSpace.ScopeIndent"> <properties> <!-- 开启严格缩进匹配模式,取消顶层作用域强制零缩进的默认要求 --> <property name="exact" value="true"/> <!-- 设定全局缩进基准为4个空格,匹配开标签后的起始缩进要求 --> <property name="indent" value="4"/> <!-- 忽略PHP开标签本身的行首缩进校验,避免无意义误报 --> <property name="ignoreIndent" value="T_OPEN_TAG"/> </properties> </rule>
配置生效逻辑说明:
- 默认的ScopeIndent规则会自动将文件顶层(PHP开标签后的第一层代码)的缩进基准设为0,因此会抛出“期望0空格、实际4空格”的报错。开启
exact模式后,规则将严格按照配置的indent值作为所有代码层级的缩进计算基准,不再强制要求顶层零缩进。 - 单独将PHP开标签加入缩进忽略列表,避免因为开标签位置的缩进调整触发额外报错。
配套规则适配
扫描输出的其余报错均为与该缩进写法配套的规则冲突,可同步在规则集中调整匹配:
- 针对多行IF语句开括号换行缩进的写法(
if (...)后换行、缩进后放置{),调整控制结构签名规则的参数:<rule ref="Squiz.ControlStructures.ControlSignature"> <properties> <!-- 允许IF语句闭合括号后换行放置开括号 --> <property name="allowNewlineAfterParenthesis" value="true"/> </properties> </rule> - 不需要强制要求文件级文档注释时,可直接移除
Generic.Commenting.FileComment规则 - 行长度告警可通过调整
Generic.Files.LineLength规则的字符数阈值,匹配项目实际要求 - 条件文件加载的规则报错,可根据项目的加载逻辑,调整
PSR1.Files.SideEffects规则的校验范围
校验与验证
配置完成后,可通过两种方式验证规则是否生效:
- 运行
phpcs扫描目标文件,之前的缩进报错将完全消失 - 运行
phpcbf(PHPCS自动修复工具),可自动将不符合4空格起始缩进的代码调整为匹配自定义规则的格式
内容的提问来源于stack exchange,提问作者Jovan Perovic
相关产品推荐
相关产品推荐

