如何忽略行长度PHP_CodeSniffer

时间:2012-02-14 16:45:07

标签: php jenkins continuous-integration pear codesniffer

我一直在使用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
--------------------------------------------------------------------------------

我怎么能忽略行长警告?

4 个答案:

答案 0 :(得分:44)

您可以创建自己的标准。 Zend的一个非常简单(在使用PEAR安装它之后,在我的Debian安装中/usr/share/php/PHP/CodeSniffer/Standards/Zend/ruleset.xml)。根据它创建另一个,但忽略行长度位:

<?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>

答案 1 :(得分:4)

  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(行的最大长度)更改为您想要的数据。

  4. 请注意,phpc的默认编码标准是PEAR标准。因此,您需要在此位置编辑ruleset.xml:CodeSniffer / Standards / PEAR / ruleset.xml

答案 2 :(得分:4)

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

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

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

vendor/squizlabs/php_codesniffer/src/Standards/<coding standard>/ruleset.xml

规则名称将位于 ref 节点中:

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

比创建单独的规则集更快,更省力。

答案 3 :(得分:1)

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

<?xml version="1.0"?>
<ruleset name="PHP_CodeSniffer">
    <rule ref="PSR2"> <!-- ruleset standard -->
        <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