Sniff, известный как PEAR.Whitespace.ScopeIndent
, определен в кодовом файле phpcs\CodeSniffer\Standards\PEAR\Sniffs\Whitespace\ScopeIndentSniff.php
и включает следующий код:
class PEAR_Sniffs_WhiteSpace_ScopeIndentSniff extends Generic_Sniffs_WhiteSpace_ScopeIndentSniff
{
/**
* Any scope openers that should not cause an indent.
*
* @var array(int)
*/
protected $nonIndentingScopes = array(T_SWITCH);
}//end class
Видите $nonIndentingScopes
? Очевидно, это означает, что все, что находится в области действия оператора switch, ожидается, что не будет иметь отступ относительно фигурного открытия области.
Я не смог найти способ настроить этот параметр в PEAR.Whitespace.ScopeIndent
, но .... этот Sniff расширяет более простой Generic.Whitespace.ScopeIndent
, который не включает T_SWITCH
в массиве $nonIndentingScopes
.
Итак, что я сделал для того, чтобы в моих утверждениях case было так, как я хотел, это изменил мой файл ruleset.xml, исключил PEAR-версию этого сниффа и включил универсальную версию этого сниффа. Это выглядит так:
<?xml version="1.0"?>
<ruleset name="Custom Standard">
<!-- http://pear.php.net/manual/en/package.php.php-codesniffer.annotated-ruleset.php -->
<description>My custom coding standard</description>
<rule ref="PEAR">
......
<exclude name="PEAR.WhiteSpace.ScopeIndent"/>
</rule>
....
<!-- not PEAR -->
<rule ref="Generic.WhiteSpace.ScopeIndent">
<properties>
<property name="indent" value="2"/>
</properties>
</rule>
</ruleset>
Этот файл должен присутствовать в поддиректории в каталоге Standards для PHP CodeSniffer. Для меня расположение файла \dev\phpcs\CodeSniffer\Standards\MyStandard\ruleset.xml
Затем я запускаю phpcs так:
\php\php.exe \dev\phpcs\scripts\phpcs --standard=MyStandard --report=emacs -s file.php