17

我现在花了 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>

但我想添加上面的规则。

4

2 回答 2

16

将此代码放入您的 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
----------------------------------------------------------------------
于 2015-09-15T23:40:42.600 回答
9

除了 Greg 的回答之外,如果您使用的是 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到排除规则。

于 2018-03-06T18:11:43.260 回答