phpcs:如何修改 PSR2 以检查大括号是否与方法在同一行?
phpcs: How can I modify PSR2 to check that the brace is on the same line as the method?
我现在已经花了 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
----------------------------------------------------------------------
除了 Greg 的回答之外,如果您使用的是 PHPStorm,请转到 Settings -> Editor -> Inspections -> PHP -> Code Sniffer
,您将看到一个选项 Show sniff name
。
这将为您提供违规规则的名称(首先,在 Settings -> Languages and frameworks -> PHP -> Code sniffer
中配置 PHP Code Sniffer 可执行路径)。然后在源代码文件的警告工具提示上,小心移动光标,select 文本,不要松开按钮,按 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
排除规则
我现在已经花了 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
----------------------------------------------------------------------
除了 Greg 的回答之外,如果您使用的是 PHPStorm,请转到 Settings -> Editor -> Inspections -> PHP -> Code Sniffer
,您将看到一个选项 Show sniff name
。
这将为您提供违规规则的名称(首先,在 Settings -> Languages and frameworks -> PHP -> Code sniffer
中配置 PHP Code Sniffer 可执行路径)。然后在源代码文件的警告工具提示上,小心移动光标,select 文本,不要松开按钮,按 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
排除规则