Laravel の app/Providers など、php-cs-fixer がかかるとアプリケーションの動作に影響が出てしまう場合があるところなどを除外する設定についてだいたい把握したと思うので記事にします

Version

  • php-cs-fixer + suin/php-cs-fixer-rules を利用
    • “friendsofphp/php-cs-fixer”: “^2.15”
    • “suin/php-cs-fixer-rules”: “^2.0”
  • PHP 7.3
  • Composer version 1.8.5 2019-04-09 17:46:47

ポイント

  • .php_cs.dist
    • 配列で指定する
    • 複数指定できて、コメントアウトで除外を除外することが可能
    • 指定はディレクトリ単位
      • ファイルを個別には指定できない模様
  • 実行時オプション
    • --path-mode=intersection をつける

設定例 (.php_cs.dist)

<?php
$finder = PhpCsFixer\Finder::create()
    ->exclude([
        'app/Console',
        'app/Exceptions',
        'app/Providers',       // <- ★★★
    ])
    ->in(__DIR__)
;

return PhpCsFixer\Config::create()
    ->setRiskyAllowed(true)
    ->setRules(Suin\PhpCsFixer\Rules::create([
        // If you want to overwrite default rules
        // add rules here.
        'declare_strict_types' => false,
//・・・
        'php_unit_method_casing' => false,
        'php_unit_test_case_static_method_calls' => false,
    ]))
    ->setFinder($finder);

実行例

❯ ./vendor/bin/php-cs-fixer fix --path-mode=intersection --config=./.php_cs.dist --verbose --dry-run ./app
Loaded config default from "./.php_cs.dist".
Using cache file ".php_cs.cache".
(以下、自主規制。期待動作はしてました)

その他

  • 簡素化を意図して、以下のように Makefile を準備してみたのだが、phpunit は期待動作になるのに php-cs-fixer が動かないのが謎。

    >//・・・
    CS_TG    := $(CURDIR)/app/
    UT_TG    := $(CURDIR)/tests/Unit/
    FT_TG    := $(CURDIR)/tests/Feature/
    //・・・
    
    csd: vendor
    		vender/bin/php-cs-fixer fix --path-mode=intersection --config=.php_cs.dist --verbose --dry-run $(CS_TG)
    
    cs: vendor
    		vender/bin/php-cs-fixer fix --path-mode=intersection --config=.php_cs.dist --verbose $(CS_TG)
    
    test: ft ut
    
    ft: vendor
    		vendor/bin/phpunit --configuration=phpunit.xml $(FT_TG)
    
    ut: vendor
    		vendor/bin/phpunit --configuration=phpunit.xml $(UT_TG)
    
    
    vendor: composer.json composer.lock
    		composer self-update
    		composer validate
    		composer install
    
    • console
      ❯ make csd
      vender/bin/php-cs-fixer fix --path-mode=intersection --config=.php_cs.dist --verbose --dry-run /path/to/app/
      make: vender/bin/php-cs-fixer: No such file or directory
      make: *** [csd] Error 1
      

参考・関連情報