SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【Vim】php-cs-fixer

問題

簡単な導入手順を教えて

答え

php-cs-fixer は、phpをルールに沿って指摘したり整形したりしてくれるツール。

まず、vimと関係なく php-cs-fixer コマンドが使えるようにする。

composer の場合、global でインストールして $HOME/.config/composer に入れるならこう

composer global require friendsofphp/php-cs-fixer
→ ~/.config/composer/vendor/bin/php-cs-fixer に入る

composerのはphpで書かれたもので、composer管理下に置いておかないとautoload が効かなくてエラーになる。

composer でインストールした php-cs-fixer は /usr/local/bin/php-cs-fixer でリンクを作っておくか、~/.config/composer/vendor/bin にPATHを通しておくと便利。

単体で動く phar を取得してもよい

wget https://cs.symfony.com/download/php-cs-fixer-v3.phar -O php-cs-fixer
chmod a+x php-cs-fixer
mv php-cs-fixer /usr/local/bin/

使えるようになったのを確認

~/.config/composer/vendor/bin/php-cs-fixer --version
PHP CS Fixer 3.8.0 BerSzcz against war! by Fabien Potencier and Dariusz Ruminski.
PHP runtime: 8.0.15
php-cs-fixer fix test.php --rules=@PhpCsFixer
→ test.php が修正される

では、vimで使えるようにする。

プラグイン vim-php-cs-fixer を入れる。

Vim8以降は所定の場所にプラグインを置くとそれだけで使える(packages)。プラグイン管理のVundleやPathogenがなくても置くだけで使える。

packages のルールに従うなら、以下に配置。

~/.vim/pack/(好きな名前)/start/vim-php-cs-fixer/

以下のように git clone する感じ

git clone https://github.com/stephpy/vim-php-cs-fixer.git ~/.vim/pack/(好きな名前)/start/ 

以上で使えるようになる。

素の状態なら、vimでphpファイル編集中に以下コマンドでphp-cs-fixer できる。

:call PhpCsFixerFixFile()

コマンドが長いから短縮したいとか、保存時に自動修正してほしいときは、こちらのガイドの通り、~/.vimrc などに追記する。

保存時の自動修正(.vimrc に書く)

autocmd BufWritePost *.php silent! call PhpCsFixerFixFile()

思ったように修正されないときは、ルールを指定する。

.vimrc ではルールセットの指定ができる。

let g:php_cs_fixer_rules = "@PSR2"

もう少し複雑なルールを設定したいときは以下でconfigファイルを指定するとよい。

let g:php_cs_fixer_config_file = '/home/xxxx/.php_cs'

phpで設定を書く(例)

<?php
$config = new PhpCsFixer\Config();
return $config
    ->setRules([
        '@PhpCsFixer' => true,

        "no_superfluous_elseif" => false,
        "no_useless_else" => false,
        "concat_space" => [
            "spacing" => "one"
        ],
        "array_syntax" => [
            "syntax" => "long"
        ],
        "yoda_style" => false,
        "blank_line_before_statement" => false,
        "visibility_required" => false
    ]);
    ->setIndent("\t")
    ->setLineEnding("\n");

.php-cs-fixer.cache というファイルがあちこちにできるのがイヤだったら場所を指定できる。

let g:php_cs_fixer_cache = "/どこか/別の/場所/.php_cs.cache"

関連するメモ

コメント