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フレームワークに移行するためのリソースがないことを考慮して)。だから私はそれを無視してください。
「行のインデントが正しくない」エラーを削除するための解決策を見つけましたが、最初に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 をご覧ください。
HTMLにPHPコードを混ぜてPHPCSを実行すると、多くの問題が発生します。 PHPCSは、純粋なPHPスクリプトを解析する場合にのみ本当に役立ちます。組み込みのコーディング標準は、PHP/HTMLの混合ではなく、純粋なPHPを中心に構築されています。
1つのオプションは、独自のカスタム標準を作成し、代わりにそれを使用することです。カスタム標準では、コードの混合を考慮に入れますが、おそらく書くのは面倒です。
フレームワークに移行したくないと言ったので、もう1つのオプションはテンプレートシステムを使用することです。 Smarty と Twig は両方ともMVCフレームワークの外部で使用できます。それらのいずれかに移動し、PHPCSでテンプレートファイルではなく.PHPファイルのみを解析します。