0

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

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

当我从命令行运行 PHPCS 时,我应该能够传递一个参数“错误代码”,以便根据它过滤报告。(只显示错误代码的结果,比如 630)

例如

 $ 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 并在扔到控制台之前对其进行操作。但是,我认为这不是最好的解决方案.

4

2 回答 2

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,留给读者练习。

于 2011-10-04T00:49:24.293 回答
0

想到了一个使用 grep 和 wc 的 bash 脚本。

于 2011-06-22T13:59:51.350 回答