расширение phpcodesniffer для фильтрации отчетов на основе кодов ошибок - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь расширить 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 и манипулирует им, прежде чем выбросить в консоль. Однако я не думаю, что это лучшее решение .

Ответы [ 2 ]

0 голосов
/ 04 октября 2011

Вы также можете использовать такой скрипт 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, оставлено в качестве упражнения длячитатель.

0 голосов
/ 22 июня 2011

На ум приходит bash-скрипт, использующий grep и wc.

...