我在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。