Как настроить PHP CodeSniffer, чтобы мои операторы case были отступами так, как мне нравится?
У меня есть код, который выглядит так:
function processRequest() {
// get the verb
$method = strtolower($_SERVER['REQUEST_METHOD']);
switch ($method) {
case 'get':
handleGet();
break;
case 'post':
handlePost();
// $data = $_POST;
break;
case 'delete':
handleDelete();
break;
case 'options':
header('Allow: GET, POST, DELETE, OPTIONS');
break;
default:
header('HTTP/1.1 405 Method Not Allowed');
break;
}
}
PHP CodeSniffer жалуется на отступы этих операторов case. В emacs с flymake это выглядит так:
сообщение:
ошибка-строка с отступом неправильно; ожидается 2 пробела, найдено 4 (груша.пробел.ScopeIndent.Неверно)
очевидно, CodeSniffer хочет, чтобы операторы case были менее отступами, чем они являются.
Как я могу сказать CodeSniffer, чтобы позволить моим заявлениям case быть отступами так, как я хочу. Или лучше, чтобы исполнение что мои заявления по делу отступы таким образом?
1 ответов
нюх, известный как 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
, но.... этот нюх расширяет более основной Generic.Whitespace.ScopeIndent
, который не включает в себя T_SWITCH
на $nonIndentingScopes
матрица.
Итак, что я сделал, чтобы разрешить мои заявления по делу так, как я хотел, это изменить мой набор правил.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>
этот файл должен присутствовать в подкаталог в каталоге стандартов для PHP CodeSniffer. Для меня расположение файла \dev\phpcs\CodeSniffer\Standards\MyStandard\ruleset.xml
затем я запускаю phpcs следующим образом:
\php\php.exe \dev\phpcs\scripts\phpcs --standard=MyStandard --report=emacs -s file.php