概要
今携わっているプロジェクトのコードが、だいぶ昔のソースコードで、かつ色んな人が触っているから書き方がバラバラという、まぁなるべくしてなったレガシーコードでした。
せっかくなので、php-cs-fixerを導入して、PSR2を守らせたコードにしたいと奮起して導入まではしたのですが、厄介な問題がありました。
インデントがタブだった。
↑のせいで、rules=PSR2とかってやると、ほぼほぼ全部のコードが修正入れられてしまい、レビューが死んでしまいます。
なんとかPSR2を守らせつつ、インデントはタブでやりたい!
と思い、csfixerのコードをおってると、なんのことはない以下が、そうでした。
setIndent("\t")
楽勝でしたねw
せっかくなんで、簡単に作った設定ファイルを貼っておきます。
<?php return PhpCsFixer\Config::create() ->setRiskyAllowed(true) ->setIndent("\t") ->setRules([ '@PSR2' => true, 'array_syntax' => ['syntax' => 'short'], 'blank_line_before_return' => true, 'function_typehint_space' => true, 'method_separation' => true, 'binary_operator_spaces' => [ 'align_double_arrow' => true, 'align_equals' => true ], ]) ->setFinder(PhpCsFixer\Finder::create() ->exclude('vendor') ->in(__DIR__) );
おまけ
みなさんいつcs-fixer流していますか?
自分はコチラの記事を参考にさせてもらい、pre-commitで実行するようにしていますが、これだと個人個人実装する必要あるので、ちょっと面倒だなと思いました。
cs-fixer掛けるとかけた後でcommitを分けられるのはいいんですけどね。
自分はcomposerのscriptに以下の様に書いて、都度実行しています。
"scripts": { "dry-fix": [ "target_file_list=$(git status -uno --short | grep -E '^ [AUM].*.php$' | cut -c4-); for php_file in $target_file_list; do php-cs-fixer fix --dry-run --diff --config=.php_cs.dist $php_file; done" ], "fix": [ "target_file_list=$(git status -uno --short | grep -E '^ [AUM].*.php$' | cut -c4-); for php_file in $target_file_list; do php-cs-fixer fix --config=.php_cs.dist $php_file; done" ] }
git status
で表示されるphpファイルだけをcs-fixerかけるという感じです。
毎回実行していますが、composer installすればみんな一緒に使えるのでそれで良いかなと。
今回は小ネタでしたが、こんな感じです。