在 PHP_CodeSniffer 中强制使用 space 缩进而不是制表符?

Force space indentation instead of tabs in PHP_CodeSniffer?

在我的自定义嗅探中,我添加了

<rule ref="Generic.WhiteSpace.ScopeIndent">
    <properties>
        <property name="indent" value="2" />
        <property name="tabIndent" value="false" />
    </properties>
</rule>

这适用于内部的功能和控制结构,但例如

function test_plugin_admin_enqueue( $hook ) {
  /**
   * Load only on ?page=test-ajax-admin.php
   * The easiest way to find out the hook name is to go to the
   * options page and put print_r( $hook ); before the conditional.
   */
  if ( $hook !== 'toplevel_page_test-ajax-admin' ) {
    return;
  }

  wp_enqueue_script( 'test-plugin-admin-script', plugin_dir_url( __FILE__ ) . 'js/admin.js', array( 'jquery' ) );
}

return 会出现错误 Tabs must be used to indent lines, spaces are not allowed

有没有办法在不使用制表符而只使用空格的情况下也检查正确的间距?

如果您想使用 WordPress 编码标准但想使用 spaces 缩进,您将需要覆盖 ScopeIndent 设置(正如您所做的那样),排除提供毯子的嗅探禁止 space 缩进,并包括全面禁止制表符缩进的嗅探。

这个规则集可能就是您想要的:

<?xml version="1.0"?>
<ruleset name="MyStandard">
    <description>WordPress with space indent.</description>
        <rule ref="WordPress">
            <exclude name="Generic.WhiteSpace.DisallowSpaceIndent" />
        </rule>
        <rule ref="Generic.WhiteSpace.ScopeIndent">
            <properties>
                <property name="indent" value="2"/>
                <property name="tabIndent" value="false"/>
            </properties>
        </rule>
        <rule ref="Generic.WhiteSpace.DisallowTabIndent" />
</ruleset>

如果其他人想做类似的事情但使用 4-space 缩进,只需将规则集中的 2 更改为 4,它就会按照您想要的方式工作。

如果您实际上没有包含整个 WordPress 标准(可能只是 WordPress-Core),则相应地更改 WordPress 引用。