扩展phpcodesniffer以根据错误代码过滤报告

时间:2011-06-22 06:46:33

标签: php pear codesniffer

我正在尝试扩展PHPCodeSniffer。我想要实现的是使用错误代码过滤报告。

为了解释这一点,我想有一条错误消息,如“错误代码:630,功能不兼容”

当我从命令行运行PHPCS时,我可以传递参数“错误代码”,以便根据它过滤报告。(仅显示错误代码的结果,如630)

e.g。

 $ phpcs --standard=mystanderd /path/to/code/myfile.php --errorcode=603

并输出

FILE: /path/to/code/myfile.php
--------------------------------------------------------------------------------
FOUND 4 ERROR(S) AFFECTING 4 LINE(S)
--------------------------------------------------------------------------------
  2 | ERROR   | 603 | function is  not compatible      
 20 | ERROR   | 603 | function is  not compatible      
 51 | ERROR   | 603 | function is  not compatible      
 88 | ERROR   | 603 | function is  not compatible      
--------------------------------------------------------------------------------

获得它的最佳方式是什么?就我所理解的情况而言,我们只能基于环境过滤,因为它有内置的支持。

我想避免修改PHPCodeSniffer的核心。我想要做的是编写一个包装器脚本,该脚本将接受来自CLI的参数并执行PHPCS捕获o / p并在抛出到控制台之前对其进行操作。但是,我认为这不是最佳解决方案

2 个答案:

答案 0 :(得分:0)

使用grep和wc的bash脚本会浮现在脑海中。

答案 1 :(得分:0)

您也可以使用这样的PHP脚本(假设这个名为my_wrapper.php):

<?php

$legal_codes = array(
    '603' => true
);

$f = fopen('php://stdin', 'r');
while ($line = fgets($f)) {
    if (preg_match("/^\s*(\d+)\s*\|\s*([A-Z]+)\s*\|\s*(\d+)\s*\|\s*(.*)/", $line, $match)) {
        $code = trim($match[3]);
        if (!isset($legal_codes[$code])) {
            continue;
        }
    }
    echo $line;
}

?>

当这样调用时:

php my_wrapper.php < cs_out.txt

使用cs_out.txt:

FILE: /path/to/code/myfile.php
--------------------------------------------------------------------------------
FOUND 4 ERROR(S) AFFECTING 4 LINE(S)
--------------------------------------------------------------------------------
  2 | ERROR   | 601 | function is  not compatible
 20 | ERROR   | 602 | function is  not compatible
 51 | ERROR   | 603 | function is  not compatible
 88 | ERROR   | 604 | function is  not compatible
--------------------------------------------------------------------------------

生成如下输出:

FILE: /path/to/code/myfile.php
--------------------------------------------------------------------------------
FOUND 4 ERROR(S) AFFECTING 4 LINE(S)
--------------------------------------------------------------------------------
 51 | ERROR   | 603 | function is  not compatible      
--------------------------------------------------------------------------------

将通过命令行参数指定的$ legal_codes数组的键设置为my_wrapper.php留给读者练习。