【问题标题】:Custom codesniffer rules / sniffs自定义代码嗅探器规则/嗅探
【发布时间】:2016-11-13 15:01:45
【问题描述】:

我正在寻找扩展 CodeSniffer 的 PSR2 标准的自定义规则,但找不到可靠的解决方案。

这是一个示例代码:

if ($var1==$var2) {
    $var3=1;
    $var4 = array("test"=>"test1");
}

我需要在 == >= <=!= 以及在分配变量 $var3 = 1;=> 时强制使用空格。

我创建了一个名为 MyStandard 的自定义标准,它扩展了 PSR-2,我在其中设置了圈复杂度、行长和制表符缩进而不是空格的规则,但无法解决最后这些问题。

编辑:我当前的 ruleset.xml 如下所示:

<?xml version="1.0"?>
<ruleset name="MyStandard">
    <description>PSR2 with tabs instead of spaces.</description>
    <arg name="tab-width" value="4"/>
    <rule ref="PSR2">
        <exclude name="Generic.WhiteSpace.DisallowTabIndent"/>
        <exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace"/>
    </rule>
    <rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/>
    <rule ref="Generic.WhiteSpace.ScopeIndent">
        <properties>
            <property name="indent" value="4"/>
            <property name="tabIndent" value="true"/>
        </properties>
    </rule>
    <rule ref="Generic.Files.LineLength">
        <properties>
            <property name="lineLimit" value="140"/>
            <property name="absoluteLineLimit" value="160"/>
        </properties>
     </rule>
     <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
         <properties>
             <property name="ignoreBlankLines" value="false"/>
         </properties>
     </rule>
     <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile">
         <severity>10</severity>
     </rule>
     <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile">
         <severity>10</severity>
     </rule>
     <rule ref="Generic.Metrics.CyclomaticComplexity"/>
</ruleset>

【问题讨论】:

  • github.com/squizlabs/PHP_CodeSniffer/blob/master/CodeSniffer/… 可能是连接运算符周围间距的起点
  • @MarkBaker 谢谢!似乎有什么东西压倒了这种嗅觉。我目前只是将代码粘贴到具有适当类名的MyStandard/Sniffs/MyStandard_ConcatenationSpacingSniff.php 中,并且没有出现任何可见的变化......
  • 感谢@MarkBaker,我已经弄明白了。我使用了建议的示例并对其进行了修改以检查T_EQUAL, T_IS_NOT_EQUAL, T_IS_EQUAL,T_DOUBLE_ARROW, T_IS_IDENTICAL, T_IS_NOT_IDENTICAL, T_IS_GREATER_OR_EQUAL, T_IS_SMALLER_OR_EQUAL。你能提供你的评论作为答案吗?

标签: php codesniffer phpcodesniffer


【解决方案1】:

感谢@MarkBaker

我使用了建议的sample 并对其进行了修改以检查T_EQUALT_IS_NOT_EQUALT_IS_EQUALT_DOUBLE_ARROWT_IS_IDENTICALT_IS_NOT_IDENTICALT_IS_GREATER_OR_EQUALT_IS_SMALLER_OR_EQUAL

如果有人有兴趣,这里是complete ruleset

【讨论】:

  • 嗨 Stanimir,很高兴您找到了解决方案。您能否将其标记为已接受的答案?这将有助于其他人看到问题概述中有解决方案。
  • 谢谢@TomášVotruba
  • 不客气。如果您想了解更多关于 CodingStandard 的信息,请查看:tomasvotruba.cz/blog/2017/05/03/…
  • 答案中的链接断开
  • 感谢@ScottAnderson。我找到了相同的文件并使用 2020 年的有效链接更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 2010-10-20
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多