Posted at

[php-cs-fixer] 除外(exclude)Finderの設定例

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





参考・関連情報