如何配置 PHP CodeSniffer 以允许数组具有任何缩进?
How to configure PHP CodeSniffer to allow arrays with any indentation?
我在 XML.
中定义了一个自定义规则集
我习惯于在每个 =>
之后打一个 tab
这样,如果我的数组是多行的,事情就会很好地对齐。这成了一种习惯,我也将其用于单线阵列。因此,多行数组可能如下所示
$array = array(
'something' => array(
'short' => 1,
'longer' => 1,
),
);
问题是 PHP CodeSniffer 抱怨 =>
和值之间有超过 1 space(因为我总是点击 tab
,所以会有大多数时候不止一个 space - 当然,根据到目前为止的行的长度,有时也可以是一个 space)
我尝试将 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。您可以在规则集中排除 Squiz.WhiteSpace.OperatorSpacing.SpacingAfter
错误代码。这仍然会允许嗅探在运算符之前和按位运算符周围产生间距错误,但是当标准运算符之后有多个空格时,您不会得到任何错误。
要排除错误代码,您可以将其添加到您的规则集中:
<exclude name="Squiz.WhiteSpace.OperatorSpacing.SpacingAfter"/>
2。您可以编写一个扩展 PHP_CodeSniffer\Standards\Squiz\Sniffs\WhiteSpace\OperatorSpacingSniff
并覆盖 isOperator()
方法的自定义嗅探。您覆盖的方法将检测到 T_DOUBLE_ARROW
标记和 return false,这将导致主嗅探代码停止检查双箭头。如果不是双箭头,可以把请求丢回父级class.
如果你这样做,你需要用嗅探维护你自己的标准,这意味着在某个地方放置一个目录,用一个嗅探子目录结构来保存你的嗅探。
我在 XML.
中定义了一个自定义规则集我习惯于在每个 =>
之后打一个 tab
这样,如果我的数组是多行的,事情就会很好地对齐。这成了一种习惯,我也将其用于单线阵列。因此,多行数组可能如下所示
$array = array(
'something' => array(
'short' => 1,
'longer' => 1,
),
);
问题是 PHP CodeSniffer 抱怨 =>
和值之间有超过 1 space(因为我总是点击 tab
,所以会有大多数时候不止一个 space - 当然,根据到目前为止的行的长度,有时也可以是一个 space)
我尝试将 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。您可以在规则集中排除 Squiz.WhiteSpace.OperatorSpacing.SpacingAfter
错误代码。这仍然会允许嗅探在运算符之前和按位运算符周围产生间距错误,但是当标准运算符之后有多个空格时,您不会得到任何错误。
要排除错误代码,您可以将其添加到您的规则集中:
<exclude name="Squiz.WhiteSpace.OperatorSpacing.SpacingAfter"/>
2。您可以编写一个扩展 PHP_CodeSniffer\Standards\Squiz\Sniffs\WhiteSpace\OperatorSpacingSniff
并覆盖 isOperator()
方法的自定义嗅探。您覆盖的方法将检测到 T_DOUBLE_ARROW
标记和 return false,这将导致主嗅探代码停止检查双箭头。如果不是双箭头,可以把请求丢回父级class.
如果你这样做,你需要用嗅探维护你自己的标准,这意味着在某个地方放置一个目录,用一个嗅探子目录结构来保存你的嗅探。