phpcs: Как я могу изменить PSR2, чтобы проверить, что скобка находится на той же линии, что и метод?
Я потратил более двух часов на попытку выяснить, как требовать {
в той же строке, что и объявление метода, вместо требования по умолчанию, являющегося следующей строкой. Как я могу это сделать? Я скопировал стандарт 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>
Но я хотел бы добавить правило выше.
Ответы
Ответ 1
Поместите этот код в свой файл ruleset.xml:
<rule ref="PSR2">
<exclude name="Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine" />
</rule>
<rule ref="Generic.Functions.OpeningFunctionBraceKernighanRitchie" />
Это будет включать стандарт PSR2, но исключить конкретное сообщение о скобе, которое должно быть в одной строке. Затем он включает в себя Generic sniff, который заставляет метод и функции фигурные скобки находиться в следующей строке.
С этим изменением этот код:
<?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
----------------------------------------------------------------------
Ответ 2
В дополнение к ответу Грега, если вы используете 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
к исключенным правилам.