0

我在 XML 中定义了一个自定义规则集。

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

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

问题是 PHP CodeSniffer 抱怨和 value 之间有超过 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是执行此规则的人。现在,根据文档,我无法配置此属性以排除=>操作员。有没有其他方法可以做到这一点?

4

1 回答 1

2

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

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 子目录结构来保存你的嗅探。

于 2018-07-11T23:02:27.480 回答