Я потратил более 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>
Но я бы хотел добавить правило выше.
Поместите этот код в ваш файл 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
----------------------------------------------------------------------
В дополнение к ответу Грега, если вы используете 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
исключенным правилам.