Yunseok's Dev Blog

배운 것을 적는 블로그입니다.

PHP Coding Standards Fixer Install

homebrew를 이용한 설치

brew install php-cs-fixer
php-cs-fixer --version

사용법

  • fix커맨드를 이용해서 사용하는 방법
php-cs-fixer fix ./file.php
php-cs-fixer fix ./dir/
  • 다음과 같이 입력하면 파일은 수정하지 않으면서 차이만 보여줍니다.
php-cs-fixer fix ./dir/ --diff --dry-run

Config 파일

  • command line으로 옵션들을 입력할 필요 없이 project설정을 project root폴더에 .php_cs.dist설정파일로 관리할 수 있습니다.
  • 설정파일은 반드시 PhpCsFixer\ConfigInterface 인터페이스를 만족해야 합니다.
  • .php_cs파일로 root폴더의 설정을 덮어쓸 수 있습니다.

Example #1

<?php

$finder = PhpCsFixer\Finder::create()
    ->exclude('somedir')
    ->notPath('src/Symfony/Component/Translation/Tests/fixtures/resources.php')
    ->in(__DIR__)
;

return PhpCsFixer\Config::create()
    ->setRules([
        '@PSR2' => true,
        'strict_param' => true,
        'array_syntax' => ['syntax' => 'short'],
    ])
    ->setFinder($finder)
;
  • exclude는 오직 폴더만 가능합니다. 만약 특정파일을 exclude하고 싶다면 notPath를 사용해야 합니다.
  • 더 자세한 내용은 Symfony\Finder 를 참조하세요.

Example #2

  • 특정 옵션들을 whitelist로 관리할 수 있지만 blacklist로도 관리할 수 있습니다.
<?php

$finder = PhpCsFixer\Finder::create()
    ->exclude('somedir')
    ->in(__DIR__)
;

return PhpCsFixer\Config::create()
    ->setRules([
        '@Symfony' => true,
        'full_opening_tag' => false,
    ])
    ->setFinder($finder)
;

Example #3

  • 만약 프로젝트에서 linux가 아닌 공백을 이나 빈 라인을 사용할 경우 다음과 같이 설정할 수 있습니다.
<?php

return PhpCsFixer\Config::create()
    ->setIndent("\t")
    ->setLineEnding("\r\n")
;

Caching

  • 캐싱은 기본적으로 됩니다.
  • 수정된 파일만 검사하므로 속도를 올릴 수 있습니다.
  • 캐싱은 --usting-cache 옵션으로 끌 수 있습니다.
<?php

return PhpCsFixer\Config::create()
    ->setUsingCache(false)
;
  • 혹은 특정 디렉토리는 다른 캐싱 옵션을 주기 위해 다음과 같이 작성할 수 있습니다.
<?php

return PhpCsFixer\Config::create()
    ->setCacheFile(__DIR__.'/.php_cs.cache')
;

CI에서 사용하기

  • composer에 다음과 같이 추가합니다.
$ ./composer.phar require --dev friendsofphp/php-cs-fixer
  • CI 커맨드에 다음과 같이 추가합니다.
$ IFS='
$ '
$ CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRTUXB "${COMMIT_RANGE}")
$ if ! echo "${CHANGED_FILES}" | grep -qE "^(\\.php_cs(\\.dist)?|composer\\.lock)$"; then EXTRA_ARGS=$(printf -- '--path-mode=intersection\n--\n%s' "${CHANGED_FILES}"); else EXTRA_ARGS=''; fi
$ vendor/bin/php-cs-fixer fix --config=.php_cs.dist -v --dry-run --stop-on-violation --using-cache=no ${EXTRA_ARGS}
  • 여기서 $COMMIT_RANGE는 커밋의 길이입니다.

Helpers

Sources

  • https://cs.symfony.com/