sublime-phpcsでPSR-2準拠のコーディング

みなさんPSR-2してますか。してませんか。しましょう。

PSR-2(日本語)

PSR-1に準拠しなければなりません。
インデントには4つのスペースを使用し、タブは使用してはいけません。
行の長さに対してハードリミットがあってはいけません。ソフトリミットは120文字を上限とし、実際は80文字以内に抑えるべきです。 名前空間定義のあとには空行を挟まなければいけません。またuse定義ブロックのあとにも同様に空行を挟まなければなりません。 クラスの開き括弧は次の行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。 メソッドの開き括弧は次の行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。 アクセス修飾子は、全てのプロパティ、メソッドに定義しなければなりません。またabstractとfinalはアクセス修飾子の前に定義し、staticはアクセス修飾子の後に定義しなければなりません。 制御構造の開始時は、その後に1スペースを開けなければなりません。メソッドや関数の呼び出しはスペースを開けてはいけません。 制御構造の開き括弧は同じ行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。 制御構造の開始前にスペースがあってはいけません。また閉じる際もその前にスペースがあってはいけません。

すみませんでしたorz

ちなみにPHPコーディング標準であるPSRについてはこちらが分かりやすいです。 →新標準PSRに学ぶきれいなPHP

ということで、これにちゃんと準拠するためには自動チェックしないと無理ですねと思ったのでsublimeでチェックできるように環境を整えました。

phpcs

まずphpcs(= PHP CodeSniffer)をpear経由でインストール。

pear install PHP_CodeSniffer

これで

phpcs hoge.php --standard=PSR2

とするとPSR2に準拠していない点が表示されます。

ちなみに

phpcs -i

とすると、どんなコーディング規約が使えるかチェックできます。

sublime-phpcs

次に、 sublimeのpackage controllからPhpcsをインストール。 その後、Preferences > Package Settings > PHP Code Sniffer > Settings - Userを開く。

ファイルに

{
    // "phpcs_execute_on_save": false,
    "phpcs_additional_args": {
        // "-n": "",
        "--standard": "PSR2"
    }
}

と書き込む。 (保存時に自動実行されたくない場合は--phpcs_execute_on_saveのコメントを外してください。warningを表示したくない場合は-nのコメントを外してください。)

以上でめでたく

Ctrl + P → sniffとかすれば準拠してない点を羅列してくれます。

f:id:matsu_chara:20131123184727p:plain

f:id:matsu_chara:20131123190740p:plain

と思ったら

なんにもでなかった。windowsだとだめな様子。 ctrl+pでコンソールの出力を見ると、どうも

subprocessが悪さをしているようなので、 Problems using subprocess.call() in Python 2.7.2 on Windows - Stack Overflowとか、17.1. subprocess — サブプロセス管理 — Python 2.7ja1 documentationを参考に

phpcs.pyの162行目の
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, startupinfo=info, cwd=home)

proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, startupinfo=info, cwd=home, shell=True)
にしました。(shell=Trueを追加)

phpcs.pyはPreferences > Browse PackagesからPhpcsに移動すればあります。

上記の修正を加えると、ちゃんと出来ました。 終わり。

参考