【问题标题】:How to Ignore Line Length PHP_CodeSniffer如何忽略行长 PHP_CodeSniffer
【发布时间】:2012-03-06 01:07:39
【问题描述】:

我一直在使用带有 jenkins 的 PHP_CodeSniffer,我的 build.xml 是为 phpcs 配置的,如下所示

<target name="phpcs">
    <exec executable="phpcs">
        <arg line="--report=checkstyle --report-file=${basedir}/build/logs/checkstyle.xml --standard=Zend ${source}"/>
    </exec>
</target> 

我想忽略以下警告

FOUND 0 ERROR(S) AND 1 WARNING(S) AFFECTING 1 LINE(S)
--------------------------------------------------------------------------------
 117 | WARNING | Line exceeds 80 characters; contains 85 characters
--------------------------------------------------------------------------------

如何忽略行长警告?

【问题讨论】:

  • 嗨,dextervip。您是否使用 Jenkins 插件来发布您的 phpcs 结果?我想知道这是如何在 Jenkins 中设置的。干杯,ns
  • @nonshatter 我一直在使用 Violations puglin 来发布我的结果。它工作得很好,只需安装它并在您的项目中启用它链接到您的 xml 文件。
  • 谢谢@dextervip 我会检查一下。我昨天刚刚使用“checkstyle”插件进行了设置。它提供了一些不错的报告和一些趋势图等。更多信息给那些感兴趣的人:stackoverflow.com/a/12197103/1016364

标签: php jenkins continuous-integration pear codesniffer


【解决方案1】:

您可以创建自己的标准。 Zend 非常简单(在我使用 PEAR 安装后,在我的 Debian 安装中位于 /usr/share/php/PHP/CodeSniffer/Standards/Zend/ruleset.xml)。在此基础上再创建一个,但忽略 line-length 位:

<?xml version="1.0"?>
<ruleset name="Custom">
 <description>Zend, but without linelength check.</description>
 <rule ref="Zend">
  <exclude name="Generic.Files.LineLength"/>
 </rule>
</ruleset>

并设置--standard=/path/to/your/ruleset.xml

或者,如果您只想在触发之前增加字符数,请重新定义规则:

 <!-- Lines can be N chars long (warnings), errors at M chars -->
 <rule ref="Generic.Files.LineLength">
  <properties>
   <property name="lineLimit" value="N"/>
   <property name="absoluteLineLimit" value="M"/>
  </properties>
 </rule>

【讨论】:

  • 谢谢,这就是我要找的!
  • 嗨 Wrikken,你知道我在哪里可以找到编辑规则的文件吗?谢谢
  • @DanJ.:如上所述,不要编辑现有规则,扩展您喜欢的规则集并重写一些规则。如果您真的想访问该文件:这取决于,通常他们会在/usr/share/php/ 的某个地方闲逛,就像答案中一样。
  • 或者您可以:&lt;rule ref="Generic.Files.LineLength"&gt; &lt;exclude-pattern&gt;src/Migrations&lt;/exclude-pattern&gt; &lt;/rule&gt; 示例:PHP_CodeSniffer Annotated Ruleset
【解决方案2】:

忽略消息Line超过x个字符的另一种方法是使用--exclude标志来排除规则。

vendor/bin/phpcs --standard=PSR2  --exclude=Generic.Files.LineLength app/

为了找到要排除的规则名称,请在以下目录中找到您对应的规则集:

vendor/squizlabs/php_codesniffer/src/Standards/&lt;coding standard&gt;/ruleset.xml

规则名称将在 ref 节点中:

 <rule ref="Generic.Files.LineLength">
        <properties>
            <property name="lineLimit" value="120"/>
            <property name="absoluteLineLimit" value="0"/>
        </properties>
 </rule>

这比创建单独的规则集更快、更简单。

【讨论】:

    【解决方案3】:
    1. 查找文件 CodeSniffer/Standards/PEAR/ruleset.xml - 在 mac/linux 上,您可以在终端中搜索:

      locate PEAR/ruleset.xmlsudo find / -name "ruleset.xml"

    2. 那么你需要在ruleset.xml中找到以下几行:

      <!-- Lines can be 85 chars long, but never show errors --> <rule ref="Generic.Files.LineLength"> <properties> <property name="lineLimit" value="85"/> <property name="absoluteLineLimit" value="0"/> </properties> </rule>

    3. 只需将数字 85(行的最大长度)更改为您想要的。

    请注意,phpc 的默认编码标准是 PEAR 标准。所以你需要在这个位置编辑ruleset.xml:CodeSniffer/Standards/PEAR/ruleset.xml

    【讨论】:

      【解决方案4】:

      如果您不想每次都输入带有参数--standard=PSR2 --exclude=Generic.Files.LineLength app/ 的整个命令,您可以在主目录中创建文件phpcs.xml 并覆盖规则设置。

      <?xml version="1.0"?>
      <ruleset name="PHP_CodeSniffer">
      
          <rule ref="PSR2" /> <!-- ruleset standard -->
          <rule ref="Generic.Files.LineLength"> <!-- rule to override -->
              <properties>
                  <property name="lineLimit" value="150"/> <!-- maximum line length -->
              </properties>
          </rule>
          <file>app</file> <!-- directory you want to analyze -->
          <arg name="encoding" value="utf-8"/>
      </ruleset>
      

      然后您只需键入以下命令:

      vendor/bin/phpcs
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-17
        • 1970-01-01
        • 2016-09-10
        • 2013-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多