如何配置PHP CodeSniffer允许带有任何缩进的数组?

时间:2018-07-11 12:11:37

标签: codesniffer phpcodesniffer

我有一个用XML定义的自定义规则集。

我习惯于在每个tab之后都击中一个=>,这样,如果我的数组是多行的话,事情就会很好地对齐。这成为一种习惯,我也将其用于单行数组。因此,多行数组可能看起来像这样

$array = array(
    'something' =>  array(
        'short'     =>  1,
        'longer'    =>  1,
    ),
);

问题是PHP CodeSniffer抱怨=>与值之间有1个以上的空格(由于我总是按tab,多数情况下会有多个以上的空格-当然,根据到目前为止的行长,有时也可以是一个空格)

我尝试将T_ARRAY令牌添加到Generic.WhiteSpace.ScopeIndent规则定义中,但没有帮助

<rule ref="Generic.WhiteSpace.ScopeIndent">
    <properties>
        <property name="indent" value="4"/>
        <property name="ignoreIndentationTokens" type="array" value="T_COMMENT,T_DOC_COMMENT_OPEN_TAG,T_ARRAY"/>
    </properties>
</rule>

有解决方案吗?

更新

好吧,我意识到Generic.WhiteSpace.ScopeIndent与此无关,因为执行此规则的是Squiz.WhiteSpace.OperatorSpacing。现在,根据the docs,我无法将此属性配置为排除=>运算符。还有其他方法吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,该嗅探没有任何可忽略此特定情况的配置选项。除了向嗅探添加选项之外,您实际上只有两种方法可以解决此问题。都不是很好。

1。您可以在规则集中排除Squiz.WhiteSpace.OperatorSpacing.SpacingAfter错误代码。这样仍然可以使嗅探器在运算符之前和按位运算符周围产生间距错误,但是当标准运算符之后有多个空格时,您将不会得到任何错误。

要排除错误代码,请将其添加到规则集中:

<exclude name="Squiz.WhiteSpace.OperatorSpacing.SpacingAfter"/>

2。您可以编写扩展PHP_CodeSniffer\Standards\Squiz\Sniffs\WhiteSpace\OperatorSpacingSniff并覆盖isOperator()方法的自定义嗅探。您的重写方法将检测到T_DOUBLE_ARROW令牌并返回false,这将导致主嗅探代码停止检查双箭头。如果不是双箭头,则可以将请求返回给父类。

如果这样做,则需要使用sniffs维护自己的标准,这意味着将目录放置在某个地方,并带有Sniffs子目录结构来保存您的sniff。