如何配置PHP CodeSniffer以允许使用任何缩进的数组



我在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在执行这个规则。现在,根据文档,我无法将此属性配置为排除=>运算符。有其他方法吗?

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

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

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

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

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

如果你这样做,你需要维护你自己的sniffs标准,这意味着把一个目录放在某个地方,用sniffs子目录结构来保存你的sniff。

相关内容

最新更新