it-gundan.com

PHP CodeSniffer에서 특정 코딩 표준 오류를 무시하는 방법

우리는 PHP 5 웹 응용 프로그램을 보유하고 있으며 현재 코드 표준을 강요하여 두통을 유발하지 않으면 서 코드 품질을 향상 시킬지 여부를 결정하기 위해 PHP CodeSniffer 를 평가하고 있습니다. 이것이 좋을 경우 SVN 사전 커밋 후크를 추가하여 dev 브랜치에서 커밋 된 모든 새 파일에 표준 냄새 코딩이 없도록합니다.

특정 유형의 오류를 무시하도록 PHP codeSniffer를 구성하는 방법이 있습니까? 또는 특정 오류를 경고로 취급하도록하십시오.

다음은 문제를 보여주는 예입니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
    <?php
    echo getTabContent('Programming', 1, $numX, $numY);

    if (isset($msg)) {
        echo $msg;
    }
    ?>
</div>
</body>
</html>

그리고 이것은 PHP_CodeSniffer의 출력입니다 :

> phpcs test.php 
 
 ------------------------------ -------------------------------------------------- 
 FOUND 2 ERROR (S) and 1 WARNING (S) AFFECTING 3 LINE (S) 
 ---------------------- -------------------------------------------------- -------- 
 1 | 경고 | 줄이 85자를 초과합니다. 121 자 포함 
 9 | 오류 | 파일 문서 주석 누락 
 11 | 오류 | 줄이 잘못 들여 쓰기되었습니다. 예상되는 0 개의 공백, 발견 된 4 
 --------------------------------------- ----------------------------------------- 

" 줄이 잘못 들여 쓰기되었습니다 "오류 문제가 있습니다. PHP 들여 쓰기와 HTML 들여 쓰기를 혼합하여 발생하는 것 같습니다. 그러나 이것이 더 읽기 쉬운가? ( 현재 MVC 프레임 워크로 이동할 수있는 리소스가 없다는 것을 고려하고 있습니다 ). 그래서 나는 그것을 무시하고 싶습니다.

13
Tom

" 줄이 잘못 들여 쓰기 "오류를 제거하는 해결책을 찾았지만 먼저 dragonmantank 에 대한 훌륭한 지적이 있습니다. PHP와 HTML을 혼용해서는 안됩니다. 두통의 레시피입니다. 그러나 불행히도 나는 PHP와 HTML을 혼합하는 것이 레거시 소프트웨어에서 특히 일반적이라고 생각합니다.

phpcs 기본 코딩 표준 ( PEAR 표준)을 사용한다고 가정 할 때 가장 빠르고 더러운 수정은 관련 Sniff 파일을 제거하는 것입니다. bunt 를 사용하여 나를 위해 PEAR 표준의 위치를 ​​찾으십시오.

> cd /usr/share/php/PHP/CodeSniffer/Standards/PEAR/Sniffs/WhiteSpace

코드 들여 쓰기를 확인하는 스 니프가 더 이상 실행되지 않도록 ScopeIndentSniff.php 파일의 이름을 바꾸십시오.

> Sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

작업 완료 -이제 들여 쓰기가 확인되지 않고 " 줄이 잘못 들여 쓰기 "오류가 발생 함 '( 발생하지 않으며 코드가 표준이 아니며 고품질이 아닙니다! ).


위의 솔루션은 매우 아마추어 적입니다.보다 깨끗한 솔루션은 체리 선택 사용자 정의를 제외한 모든 PEAR 표준을 사용하는 새로운 코딩 표준을 만드는 것입니다. 이것은 매우 빠릅니다. getIncludedSniffs()getExcludedSniffs() 및 일부 phpcs 명명 규칙을 사용하여 수행하는 방법은 다음과 같습니다.

Go to the directory where the phpcs coding standards are defined:
> cd /usr/share/php/PHP/CodeSniffer/Standards

Create a new directory for your new standard:
> Sudo mkdir PEARish
> cd PEARish

Create your new standard by saving the following in the file:
> Sudo emacs PEARishCodingStandard.php
<?php
class PHP_CodeSniffer_Standards_PEARish_PEARishCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard
{
    public function getIncludedSniffs()
    {
      return array('PEAR');
    }

    public function getExcludedSniffs()
    {
      return array('PEAR/Sniffs/WhiteSpace/ScopeIndentSniff.php');
    }
}
?>

--standard 플래그를 사용하여 phpcs을 (를) 호출하여 새로운 사용자 정의 코딩 표준을 테스트하십시오. 예를 들면 다음과 같습니다.

> phpcs --standard=PEARish Test.php

작동하면 새 표준을 기본값으로 설정할 수 있습니다. 이는 phpcs을 사용할 때마다 --standard 플래그를 입력 할 필요가 없음을 의미합니다.

> Sudo phpcs --config-set default_standard PEARish

자세한 내용은 phpcs manual 을 참조하십시오.

11
Tom

HTML과 혼합 된 PHP 코드로 PHPCS를 실행하는 데 많은 문제가 발생합니다. PHPCS는 순수한 PHP 스크립트를 구문 분석 할 때만 유용합니다. 내장 된 코딩 표준은 PHP/HTML이 아닌 순수 PHP를 기반으로합니다.

하나의 옵션은 사용자 정의 표준을 작성하고 대신 사용하는 것입니다. 사용자 지정 표준은 코드 혼합을 고려하지만 작성하기가 어려울 수 있습니다.

다른 옵션은 프레임 워크로 이동하고 싶지 않다고 템플 레이팅 시스템을 사용하는 것입니다. SmartyTwig 는 모두 MVC 프레임 워크 외부에서 사용할 수 있습니다. 그중 하나로 이동 한 다음 PHPCS가 템플릿 파일이 아닌 .PHP 파일 만 구문 분석하도록하십시오.

7
dragonmantank