如何禁用PSR-12中强制语句与左大括号同行的规则?
如何在PSR-12规范中禁用左大括号同行规则?
你需要保留PSR-12的大部分规范,但让类、函数、if/else等所有语句的左大括号单独换行(而非与语句同行),可以通过修改phpcs.xml配置,排除PSR-12中强制左大括号同行的规则,再启用对应单独换行的规则来实现。
格式示例
错误格式(左大括号与语句同行)
if (true) { } class Test { } function foo() { }
正确格式(左大括号单独换行)
if (true) { } class Test { } function foo() { }
修改后的phpcs.xml配置
<?xml version="1.0"?> <ruleset name="Standard"> <!-- 引入PSR-12基础规范 --> <rule ref="PSR12" /> <!-- 排除PSR-12中强制左大括号同行的规则 --> <rule ref="PSR12.Classes.ClassDeclaration.OpenBraceSameLine"> <severity>0</severity> </rule> <rule ref="PSR12.ControlStructures.ControlStructureOpeningBrace.SameLine"> <severity>0</severity> </rule> <rule ref="PSR12.Functions.FunctionDeclaration.OpenBraceSameLine"> <severity>0</severity> </rule> <!-- 启用左大括号单独换行的规则 --> <rule ref="Squiz.Classes.ClassDeclaration.OpenBraceNewLine" /> <rule ref="Squiz.ControlStructures.ControlStructureOpeningBrace.Newline" /> <rule ref="Squiz.Functions.FunctionDeclaration.OpenBraceNewLine" /> <!-- 保留你原本添加的其他规则 --> <rule ref="Generic.Formatting.MultipleStatementAlignment" /> <rule ref="Generic.Formatting.SpaceAfterCast" /> <rule ref="Generic.Arrays.DisallowLongArraySyntax" /> <exclude-pattern>vendor/*</exclude-pattern> </ruleset>
配置说明
- 先引入
PSR12基础规则集,确保大部分规范保留。 - 通过设置
<severity>0</severity>禁用PSR-12中三个强制左大括号同行的规则,分别对应类声明、控制结构(if/else等)、函数声明。 - 启用Squiz标准中对应的左大括号单独换行规则,覆盖之前的行为。
- 保留你原本配置的其他规则和排除目录。
内容的提问来源于stack exchange,提问作者Dayvson Spacca
相关产品推荐
相关产品推荐

