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

grep と wc を使用する bash スクリプトが思い浮かびます。

于 2011-06-22T13:59:51.350 に答える
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 に答える