phpcs: как я могу изменить PSR2, чтобы проверить, что скобка находится на той же строке, что и метод?

Я потратил более 2 часов на то, чтобы выяснить, как требовать { в той же строке, что и объявление метода, вместо требования по умолчанию следующей строки. Как я могу это сделать? Я скопировал стандарт PSR2 в новую папку с именем PSR2, чтобы иметь возможность изменить его по своему вкусу. Таким образом, база, над которой я работаю, — это в основном стандарт PSR2, который я хотел бы изменить.

Я пробовал файл ruleset.xml и пытался изменить его в коде напрямую, но безуспешно.

<rule ref="PEAR.Classes.ClassDeclaration">
<properties>
<property name="eolChar" value="{"/>
</properties>
</rule>
<rule ref="PSR2R.Classes.ClassDeclaration">
<properties>
<property name="eolChar" value="{"/>
</properties>
</rule>

Я уже понял, что это неправильно. EOL устанавливается phpcs. Но я не могу понять, есть ли вообще значение, которое я могу настроить с помощью правила.

Пока это прекрасно работает для меня (закрутить глупые пробелы !!!):

<?xml version="1.0"?>
<ruleset name="PSR2R">
<description>PSR2 with tabs instead of spaces.</description>
<arg name="tab-width" value="4"/>
<rule ref="PSR2">
<exclude name="Generic.WhiteSpace.DisallowTabIndent"/>
</rule>
<rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/>
<rule ref="Generic.WhiteSpace.ScopeIndent">
<properties>
<property name="indent" value="4"/>
<property name="tabIndent" value="true"/>
</properties>
</rule>
</ruleset>

Но я бы хотел добавить правило выше.

12

Решение

Поместите этот код в ваш файл ruleset.xml:

<rule ref="PSR2">
<exclude name="Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine" />
</rule>
<rule ref="Generic.Functions.OpeningFunctionBraceKernighanRitchie" />

Это будет включать в себя стандарт PSR2, но исключит конкретное сообщение о том, что скобка должна быть в одной строке. Затем он включает в себя общий сниффер, который вынуждает скобки метода и функции находиться на следующей строке.

С этим изменением этот код:

<?php
namespace Test;

class Foo
{
public function bar() {
}
}

Не будет выдавать ошибок, но при запуске PSR2 непосредственно над ним выдается одна ошибка:

FILE: temp.php
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
6 | ERROR | [x] Opening brace should be on a new line
----------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------
11

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

В дополнение к ответу Грега, если вы используете PHPStorm, перейдите на Settings -> Editor -> Inspections -> PHP -> Code Sniffer и вы увидите вариант Show sniff name,

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

Это даст вам имя нарушающего правила (сначала настройте путь к исполняемому файлу PHP Code Sniffer в Settings -> Languages and frameworks -> PHP -> Code sniffer). Затем на всплывающей подсказке в файле исходного кода осторожно переместите курсор, выделите текст и, не отпуская кнопку, нажмите Control C скопировать это.

Затем вы вставляете это в правила:

<?xml version="1.0"?>
<ruleset name="PSR2R">
<rule ref="PSR2">
<exclude name="Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine" />
<exclude name="PSR2.Classes.ClassDeclaration.OpenBraceNewLine" />
</rule>
<rule ref="Generic.Functions.OpeningFunctionBraceKernighanRitchie" />
</ruleset>

Я добавил сюда PSR2.Classes.ClassDeclaration.OpenBraceNewLine исключенным правилам.

3

По вопросам рекламы [email protected]