PHP CodeSniffer的Generic.WhiteSpace.ScopeIndent规则疑似存在Bug
问题分析与解答
你的示例代码:
<?php while ( false ) for ( $i = 1; $i < 10; $i++ ) { $k = 1; $i = 1; } $t = 3; $s = 5;
PHP CodeSniffer检测报错:
4 | ERROR | [x] Line indented incorrectly; expected 0 spaces, found 4
8 | ERROR | [x] Line indented incorrectly; expected 0 spaces, found 4
这不是Generic.WhiteSpace.ScopeIndent规则的Bug,而是规则的默认行为:
- 不带大括号的控制结构(此处的
while),其紧跟的后续代码块(此处的for循环)不需要缩进,规则要求它和while保持同一缩进级别(0空格)。 - 第8行的闭合大括号属于
for循环的作用域,规则要求它和for语句的缩进级别一致,而非比while多一层缩进。
如果想要让代码符合规则,有两种修改方式:
- 给
while循环添加大括号,使for循环作为while的子代码块,此时缩进4格就符合规则:
<?php while ( false ) { for ( $i = 1; $i < 10; $i++ ) { $k = 1; $i = 1; } } $t = 3; $s = 5;
- 调整缩进,让
for循环与while同级别,闭合大括号与for同级别:
<?php while ( false ) for ( $i = 1; $i < 10; $i++ ) { $k = 1; $i = 1; } $t = 3; $s = 5;
内容的提问来源于stack exchange,提问作者Dmitriy Sirenko
相关产品推荐
相关产品推荐

