phpstorm — стиль кода PSR2 и PHP Code Sniffer не согласованы?

Я установил настройки стиля кода моего редактора из Editor > Code Style > PHP как Predefined Style >PSR1/PSR2, У меня также установлен и настроен PHP Code Sniffer и PHP Mess Detector. Каждый раз, когда я форматирую код, используя CTRL+ALT+L Я получаю следующую проблему:

введите описание изображения здесь

Это почему? Исходный код выглядит так (я думаю, что это не очень полезно, но в любом случае здесь это):

public function myTestFunction()
{
$is_valid = true;

if ($this->manual_value && !$this->_InputValidator->isValidString(
$this->manual_value,
1,
2,
Regex::STRING
)
) {
$is_valid = false;
}

return $is_valid;
}

3

Решение

PSR2 на самом деле не говорит, что многострочное условие IF должно быть отступом, но PHPStorm явно вставляет 1 отступ, потому что ваши строки находятся внутри условия IF, и 1 дополнительный отступ, потому что ваши строки находятся внутри многострочного вызова функции.

PSR2 делает говорят, что вызовы многострочных функций должны быть с отступом, но он говорит, что они должны быть с отступом один раз. Это задокументировано здесь: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#46-method-and-function-calls

Таким образом, правильный код PSR2, вероятно, таков:

public function myTestFunction()
{
$is_valid = true;

if ($this->manual_value && !$this->_InputValidator->isValidString(
$this->manual_value,
1,
2,
Regex::STRING
)
) {
$is_valid = false;
}

return $is_valid;
}

Но это не выглядит великолепно.

Я склоняюсь к тому, чтобы объединить PSR2 с некоторыми многострочными правилами условий из стандарта PEAR, что даст вам этот действительный код PSR2:

public function myTestFunction()
{
$is_valid = true;

if ($this->manual_value
&& !$this->_InputValidator->isValidString(
$this->manual_value,
1,
2,
Regex::STRING
)
) {
$is_valid = false;
}

return $is_valid;
}

Я понятия не имею, согласится ли PHPStorm с этим, но я думаю, что это может дать правила отступа, которые, по-видимому, имеются.

Вы также можете положить && в конце первой строки, а не в начале второй. Код, который я разместил выше, как раз то, что использует стандарт кодирования PEAR, но PSR2 не определяет никаких правил для этого.

1

Другие решения

Это неудачно; похоже, что вы просто столкнулись с ошибкой в ​​интерпретации правил PSR в вашей IDE или PHPCS. Один из них неверен и нуждается в отчете об ошибке, но вам нужно внимательно прочитать правила PSR, чтобы решить, какое именно. (Может быть проще поднять отчет об ошибке для них обоих и позволить им разобраться с этим)

(Я, конечно, предполагаю, что у вас уже установлены последние версии обеих версий; я отмечаю, что новая версия PHPStorm только что вышла, так что, если вы еще не обновили ее, это может быть хорошим шансом сделать это )

В то же время, я бы предложил рефакторинг вашего кода, чтобы остановить ваш if() заявления в конечном итоге выглядят так — если честно, это не чистый код, независимо от того, соответствует ли он правилам PSR.

Я бы рефакторинг это выглядит примерно так:

public function myTestFunction()
{
$input_is_valid = $this->_InputValidator->isValidString(
$this->manual_value,
1,
2,
Regex::STRING
);

return ($this->manual_value && !$input_is_valid);
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector