0

私は最近コーディング標準に取り組んでおり、codesnifferを使用してこの標準に従ってファイルをチェックしたいと思います。私はCodesnifferを初めて使用するので、独自の標準を作成する前に、まず標準をテストすることにしました。

しかし、codesnifferで問題が発生しました。これがバグなのか、間違っているのかわかりません。

コマンドラインコマンドを使用してpearinstallcode snifferを使用したpear install CodeSniffer後、テストファイルでさまざまな標準を使用してみました。

<?php 
public class Application_IndexController() {

    DEFINE WEBSITE_URL = 'https://localhost/';

    public $avast = '';
    private $_ye = '';
    protected $_swabs = '';

    public setAvast($avast){
        $this->avast = $avast;
    }

    private getYe(){
        return $this->_ye;
    }

    protected changeProtected($_swabs){
        if($_swabs && $this->swabs) {
            $this->_swabs = $swabs;
        } elseif($swabs) {
            $this->_swabs = $swabs;
        } else {
            return null;
        }
    }

    public iDontKnowWhatImDoing($harhar) {
        Switch($harhar) {
            case 1:
                $yargh = "Avast ye "
                       . "swabs!";
                echo $yargh;
                break;
            default:
                $array = array(
                               "Sailor 1", "Sailor 2", "Sailor 3", 
                               "Sailor 4", "Sailor 5", "Sailor 5"
                               );
                break;
        }
    }
}
?>

このファイルを書いている間、私はかなりばかげた気分だったと言えば十分ですが、それが目的を満たしているかどうかは関係ありません。

私はこのファイルですべての標準を実行しましたが、実際に機能するのはそのうちのいくつかだけで、他の標準は常に同じエラーを返すようです。

'generic'、'psr1'、および'psr2'標準は完全に正常に機能しますが、'phpcs'、'pear'、'mysource'、'zend'、および'squiz'標準はすべて単一のエラーになります。

$stackPtr is not a class member var

phpcs独自の標準を含めて、8つのうち5つが機能しないのはかなり奇妙に思えます。

4

1 に答える 1

0

まず、このエラー メッセージが表示される理由は、ファイルに解析エラーがあるためです。クラス定義が正しくDEFINE WEBSITE_URL = 'https://localhost/';なく、有効な PHP コードでもありません。function可視性キーワードの後に​​も、すべての関数宣言が欠落しています。

解析エラーをチェックする最良の方法は、実行することphp -l /path/to/codeです (小文字の L です)。

PHPCS は、実際には PHP のようにファイルを解析しません。代わりに、これは静的コード アナライザーですが、コードが間違っているように見えて続行できない状況に陥ります。これはそれらのケースの 1 つにすぎません。

第 2 に、機能する標準と機能しない標準がある理由は、すべての標準で実行するチェックが異なるためです。標準の多くは、これらのチェックを共有しています。この特定のケースでは、一部の標準に変数名のチェックがあり、関数宣言が正しくないために失敗しました。ファイル (121 個のトークン) に深く入りすぎているため、失敗した理由を実際には理解できませんが、何か問題が発生したことはわかっています。エラー メッセージがあまり役に立たないことはわかっていますが、問題が発生し、ファイルに問題があることを知らせるには十分です。この場合、解析エラー。

要約すると、解析エラーを修正すると、すべての PHP_CodeSniffer 標準がコードで実行されます。

今後は、php -lコマンドを使用するか、(継続的インテグレーションを使用している場合) PHPCS がチェックする前にそれをビルド スクリプトに含めることによって、コードの解析エラーをチェックすることが常に役立ちます。

それが役立つ場合は、解析エラーが修正されたコードを次に示します。

<?php
define('WEBSITE_URL', 'https://localhost/');
class Application_IndexController {

    public $avast = '';
    private $_ye = '';
    protected $_swabs = '';

    public function setAvast($avast){
        $this->avast = $avast;
    }

    private function getYe(){
        return $this->_ye;
    }

    protected function changeProtected($_swabs){
        if($_swabs && $this->swabs) {
            $this->_swabs = $swabs;
        } elseif($swabs) {
            $this->_swabs = $swabs;
        } else {
            return null;
        }
    }

    public function iDontKnowWhatImDoing($harhar) {
        Switch($harhar) {
            case 1:
                $yargh = "Avast ye "
                       . "swabs!";
                echo $yargh;
                break;
            default:
                $array = array(
                               "Sailor 1", "Sailor 2", "Sailor 3", 
                               "Sailor 4", "Sailor 5", "Sailor 5"
                               );
                break;
        }
    }
}
?>
于 2012-08-14T22:24:47.710 に答える