phpcs & phpcbf 명령에 대한 비망록

phpcs & phpcbf 명령에 대한 비망록


PHP 인코딩 규칙을 정리할 때 나는 phpcs와 phpcbf에 관한 많은 것을 만져서 적어 놓았다.
단지 필기에 불과하다.(예방선)

개요


phpcs/phpcbf는 아래의 명령명을 간소화하였으며, 각자의 임무는 다음과 같다.

  • phpcs : PHP Code Sniffer
  • 설정된 규칙에 따라 지정된 파일의 인코딩 스타일 판정

  • phpcbf : PHP Code Beautifier and Fixer
  • 설정된 규칙에 따라 지정된 파일의 인코딩 스타일을 정형화한다.
  • 소스 코드는 모두 GiitHubsquizlabs/PHP_CodeSniffer에 공개됩니다.

    설치 방법


    설치 방법은 README에 적힌 바와 같이 관리가 편리하기 때문에composier로 설치하는 것이 가장 좋다.
    {
      "require-dev": {
        "squizlabs/php_codesniffer": "2.*"
      }
    }
    
    composier를 통해 설치한 경우composer.json"config": { "bin-dir": "bin" } 등의 설정을 하지 않으면 ./vendor/bin/phpcs/./vendor/bin/phpcbf에서 실행할 수 있다.

    실행 방법


    실행 방법에 대해서는 도움말$ phpcs --help 또는 기타 기사를 참조하십시오.
    그러나 CLI 실행 시 매개변수는 기본적으로 준비ruleset.xml 기술을 통해 1가지만 제공됩니다.ruleset.xml 프로젝트별 웨어하우스를 통한 관리--standard 옵션이 지정한 형식의 실행 방법으로 대응하는 것을 추천합니다.
    # 判定
    phpcs   --standard=/path/to/MyStandard/ruleset.xml
    
    # 整形
    phpcbf  --standard=/path/to/MyStandard/ruleset.xml
    

    point

    ruleset.xml에서 상세한 설정을 할 수 있기 때문에 글에서 인코딩 규칙을 관리하는 것이 아닙니다
    설정 파일ruleset.xml을 통해 관리 가능
    코딩 규칙 변경 등은 인용 요청을 통해 심사할 수 있다.

    ruleset.xml 설정 방법

  • 참조: squizlabs/PHP_CodeSniffer/wiki
  • Annotated ruleset.xml

  • Advanced Usage도 함께 참조
  • 실행 결과

    --report=csv 또는 --report=xml 옵션을 지정하고 실행할 때 다음과 같은 정보를 얻을 수 있습니다.
    key
    description
    File/Line/Column
    경고 발생처
    Type
    WARNING or ERROR
    Message
    경고 내용
    Source
    규칙【후술】
    Severity
    중증도
    Fixable
    phpcbf로 성형할 수 있습니까

    Source(규칙) 정보


  • Source는 기본적으로 <STANDARD>.<CATEGORY>.<SNIFF>[.<CODE>]로 구분된 네 가지 요소로 구성됩니다.

  • 일부는 . 3개로 구성돼 있다.
  • 예: PEAR.ControlStructures.ControlSignature 등
  • 경고가 발생했을 때 지정하지 않았기 때문<STANDARD>.<CATEGORY>.<SNIFF>?

  • 판정 처리는 <CODE>의 원본 코드로 처리되고 내용/path/to/<STANDARD>/Sniffs/<CATEGORY>/<SNIFF>Sniff.php에 따라 경고를 지정한다.
  • 예: <CODE>의 경우 ./vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/Generic/Sniffs/Files/LineLengthSniff.php에서 처리한다.

  • 여담: 한 줄의 문자수Generic.Files.LineLength의 코드 자체 위반을 판정한다.
  • $ phpcs --sniffs=Generic.Files.LineLength ./vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/Generic/Sniffs/Files/LineLengthSniff.php
    
    FILE: ...r/CodeSniffer/Standards/Generic/Sniffs/Files/LineLengthSniff.php
    ----------------------------------------------------------------------
    FOUND 0 ERRORS AND 5 WARNINGS AFFECTING 5 LINES
    ----------------------------------------------------------------------
      12 | WARNING | Line exceeds 85 characters; contains 94 characters
      28 | WARNING | Line exceeds 85 characters; contains 94 characters
      99 | WARNING | Line exceeds 85 characters; contains 91 characters
     117 | WARNING | Line exceeds 85 characters; contains 88 characters
     138 | WARNING | Line exceeds 85 characters; contains 91 characters
    ----------------------------------------------------------------------
    
    Time: 14ms; Memory: 3.25Mb
    
  • 다음처럼 Generic.Files.LineLength에서 지정한 ruleset.xml로 판단치를 설정합니다.
  • (와이드스크린 화면이 당연한 시대에 default 값은 짧아서 약간 확장됨)

  • [주의] <STANDARD>.<CATEGORY>.<SNIFF> 대신 <STANDARD>.<CATEGORY>.<SNIFF>.<CODE> 지정하여 설정
  • 경고에<STANDARD>.<CATEGORY>.<SNIFF>나옵니다.빠져들지 마세요...
  • <?xml version="1.0"?>
    <ruleset name="...">
      ...
      <rule ref="Generic.Files.LineLength">
        <properties>
          <!--
            lineLimit           : 1 行の文字数が超過すると WARNING が発生
            absoluteLineLimit   : 1 行の文字数が超過すると ERROR が発生
            -->
          <property name="lineLimit" value="160"/>
          <property name="absoluteLineLimit" value="200"/>
        </properties>
      </rule>
      ...
    </ruleset>
    

    Source 자체 제작

  • 신경질적인 사람(자신도?)를 참고하십시오.
  • 참조: Manual :: A list of configuration options
  • 좋은 웹페이지 즐겨찾기