Vim + ALE + PHP_CodeSnifferでファイル保存時にPSR-2準拠に自動整形

スポンサーリンク

コーディングスタイルの統一、重要ですよね。
でも自力で正しく書くのは大変だから自動で整形してほしい。エディタに。
ということで今回VimでPHPを自動整形する設定をしました。

PHP_CodeSniffer

PHPの構文チェックをするphpcsコマンドと整形をするphpcbfコマンドのセットです。

インストール

composerを使ってインストールしました。

composer global require "squizlabs/php_codesniffer=*"

~/.composer/vendor/bin/ に実行ファイルが置かれるので、ここにPATHを通してください。

ちなみにphpcsとphpcbfは単体のコマンドとして構文チェックや整形に使うこともできます。
これを下記のALEから呼び出すように設定します。

Asynchronous Lint Engine(ALE)

ALEはLinter(スタイルチェックツール)の実行やFixer(フォーマッター/整形ツール)の実行を自動で行ってくれるVimプラグインです。

インストール

自分はプラグイン管理にVundleを使っているので.vimrcに

Plugin 'dense-analysis/ale'

と書いて :PluginInstallでインストールできます。
その他のインストール方法についてはドキュメント参照

ここまでやってVimでPHPファイルを起動すると構文チェックし指摘をしてくれるようになると思います。
ALEはphpcsがインストールされている場合自動で使用して構文チェックをするようです。

ただしphpcsのデフォルトコーディングスタイルはPEARで、Laravel等が採用している最近流行りっぽいPSR2になっていません。

ALE設定

前述のスタイルをPSR2にする設定と、保存時にphpcbfで自動整形される設定などを.vimrcに書き加えていきます。

"行頭のマークが出る部分を常に表示するようにする
let g:ale_sign_column_always = 1
"phpcbfのスタイルをPSR2に
let g:ale_php_phpcbf_standard = 'PSR2'
"phpcsのスタイルをPSR2に
let g:ale_php_phpcs_standard = 'PSR2'
"ファイル保存時に整形実行
let g:ale_fix_on_save = 1
"ファイルタイプとフォーマッターの対応設定
let g:ale_fixers = {
\   'php': ['phpcbf']
\}

最初のg:ale_sign_column_alwaysは今回の話と関係無いけど出たり消えたりするのが鬱陶しいので設定オススメです。

動作確認

試しに整形の適当なphpファイルを作成してみます。

<?php
$a = 1;
if($a == 1){print(1);}else if($a == 2){
    print(2);
}
else{
    print(3);
}

これを保存すると

<?php
$a = 1;
if ($a == 1) {
    print(1);
} elseif ($a == 2) {
    print(2);
} else {
    print(3);
}

こうなります。便利!

コメント

タイトルとURLをコピーしました