it-swarm-ja.com

PHP CodeSnifferの特定のコーディング標準エラーを無視する方法

PHP 5 Webアプリケーションがあり、現在、 PHP CodeSniffer を評価しています。これは、コード標準を強制することで頭痛をあまり起こさずにコードの品質が向上するかどうかを判断するためです。良いと思われる場合は、SVN pre-commitフックを追加して、devブランチでコミットされたすべての新しいファイルにコーディング標準の臭いがないようにします。

特定のタイプのエラーを無視するようにPHP codeSnifferを構成する方法はありますか?または代わりに特定のエラーを警告として扱うようにしますか?

ここに問題を実証する例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
    <?php
    echo getTabContent('Programming', 1, $numX, $numY);

    if (isset($msg)) {
        echo $msg;
    }
    ?>
</div>
</body>
</html>

そして、これはPHP_CodeSnifferの出力です:

> phpcs test.php 
 
 ------------------------------ -------------------------------------------------- 
 2行のエラーと1行の警告が3行に影響しています
 ---------------------- -------------------------------------------------- -------- 
 1 |警告|行が85文字を超えています。 121文字が含まれています
 9 |エラー|ファイルのドキュメントコメントがありません
 11 |エラー|行のインデントが正しくありません。 0個のスペースが予想され、4 
が見つかりました------------------------------------------- ----------------------------------------- 

行のインデントが正しくない」エラーの問題があります。 PHPインデントとHTMLインデントを混ぜているために起こると思います。しかし、これにより読みやすくなりますか? (現時点でMVCフレームワークに移行するためのリソースがないことを考慮して)。だから私はそれを無視してください。

13
Tom

行のインデントが正しくない」エラーを削除するための解決策を見つけましたが、最初にdragonmantankが優れている点を言う必要があります-あなたPHPとHTMLを混在させないでください。それは頭痛のレシピです。しかし、残念ながら、PHPとHTMLを混在させることは、特にレガシーソフトウェアでは非常に一般的だと思います。

phpcsのデフォルトのコーディング標準( PEAR 標準)を使用していると仮定した場合の最も迅速で汚い修正は、関​​連するSniffファイルを削除することです。私にとっては、 bunt を使用して、PEAR標準の場所を見つけてください。

> cd /usr/share/php/PHP/CodeSniffer/Standards/PEAR/Sniffs/WhiteSpace

ScopeIndentSniff.phpファイルの名前を変更して、コードのインデントをチェックするスニフが実行されないようにします。

> Sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

完了したジョブ-インデントはチェックされず、「行のインデントが正しくありません」エラーが発生しました'tが発生しません(。コードは標準ではなく、それほど高品質ではありません!)。


上記のソリューションはかなりアマチュアです-よりクリーンなソリューションは、チェリーピックカスタマイズを除くすべてのPEAR標準を使用する新しいコーディング標準を作成することです。これは非常に簡単です。 getIncludedSniffs()およびgetExcludedSniffs()およびいくつかのphpcs命名規則を使用して行う方法は次のとおりです。

Go to the directory where the phpcs coding standards are defined:
> cd /usr/share/php/PHP/CodeSniffer/Standards

Create a new directory for your new standard:
> Sudo mkdir PEARish
> cd PEARish

Create your new standard by saving the following in the file:
> Sudo emacs PEARishCodingStandard.php
<?php
class PHP_CodeSniffer_Standards_PEARish_PEARishCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard
{
    public function getIncludedSniffs()
    {
      return array('PEAR');
    }

    public function getExcludedSniffs()
    {
      return array('PEAR/Sniffs/WhiteSpace/ScopeIndentSniff.php');
    }
}
?>

--standardフラグを使用してphpcsを呼び出して、カスタマイズされた新しいコーディング標準をテストします。例えば:

> phpcs --standard=PEARish Test.php

動作したら、新しい標準をデフォルトとして設定できます。つまり、phpcsを使用するたびに--standardフラグを入力する必要はありません。

> Sudo phpcs --config-set default_standard PEARish

詳細については phpcs manual をご覧ください。

11
Tom

HTMLにPHPコードを混ぜてPHPCSを実行すると、多くの問題が発生します。 PHPCSは、純粋なPHPスクリプトを解析する場合にのみ本当に役立ちます。組み込みのコーディング標準は、PHP/HTMLの混合ではなく、純粋なPHPを中心に構築されています。

1つのオプションは、独自のカスタム標準を作成し、代わりにそれを使用することです。カスタム標準では、コードの混合を考慮に入れますが、おそらく書くのは面倒です。

フレームワークに移行したくないと言ったので、もう1つのオプションはテンプレートシステムを使用することです。 SmartyTwig は両方ともMVCフレームワークの外部で使用できます。それらのいずれかに移動し、PHPCSでテンプレートファイルではなく.PHPファイルのみを解析します。

7
dragonmantank