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


14

우리는 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 

-------------------------------------------------- ------------------------------
파운데이션 2 오류 및 1 경고 3 라인에 영향을 미침
-------------------------------------------------- ------------------------------
  1 | 경고 | 줄이 85자를 초과합니다. 121 자 포함
  9 | 오류 | 누락 된 파일 문서 주석
 11 | 오류 | 줄이 잘못 들여 쓰기되었습니다. 예상되는 0 개의 공간, 발견 된 4
-------------------------------------------------- ------------------------------

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


1
이것은 너무 많은 프로그래밍 질문 IMO입니다. 웹 마스터 일 필요는 없지만 하드 코어 프로그래머들에게 주로 관심을 가질만한 유틸리티와 같은 "LINT"에 관한 것이기 때문입니다. 그러나 그것은 잘 요청되고 형식화되었으므로 우리는 지금 그대로 둘 수 있습니다.
Jeff Atwood

2
1 행 경고 정보 : HTML5 DOCTYPE을 사용하는 것이 좋습니다.
luiscubal

귀하의 의견에 감사드립니다 Jeff-기꺼이 움직입니다. :-) 질문을 만들 때 PHP 태그가 없을 때 깨달았을 것입니다.
Tom

@ luiscubal-그는 좋은 제안입니다. 당신의 생각처럼 ;-)
Tom

답변:


11

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

phpcs기본 코딩 표준 ( PEAR 표준)을 사용한다고 가정하면 가장 빠르고 더러운 수정 은 관련 Sniff 파일을 제거하는 것입니다. Ubuntu를 사용하여 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');
    }
}
?>

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

> phpcs --standard=PEARish Test.php

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

> sudo phpcs --config-set default_standard PEARish

자세한 내용은 phpcs 설명서 를 참조하십시오.


이것은 정말 편리했습니다.이 답변을 사용하여 "클래스는 최소한 한 수준의 네임 스페이스에 있어야합니다"라는 줄과 낙타 사례 함수 이름 지정 오류를 제거했습니다. 나는 PSR2를 최대한 많이 사용하고 있지만 Magento 사이트를 편집 할 때 모든 기능을 수행하고 이름을 바꾸는 위치에 있지 않습니다.
Dave Child

7

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.