Как игнорировать некоторые стандартные ошибки кодирования в PHP CodeSniffer


У нас есть веб-приложение на PHP 5, и в настоящее время мы оцениваем PHP CodeSniffer, чтобы решить, улучшает ли применение стандартов кода качество кода, не вызывая слишком большой головной боли. Если это покажется хорошим, мы добавим крючок предварительной фиксации SVN, чтобы убедиться, что все новые файлы, зафиксированные в ветке разработки, свободны от стандартных запахов кодирования.

Есть ли способ настроить 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 | WARNING | Line exceeds 85 characters; contains 121 characters
  9 | ERROR   | Missing file doc comment
 11 | ERROR   | Line indented incorrectly; expected 0 spaces, found 4
--------------------------------------------------------------------------------

У меня проблема с ошибкой " Строка с неправильным отступом". Я предполагаю, что это происходит потому, что я смешиваю отступ PHP с отступом HTML. Но это делает его более читабельным, не так ли? ( принимая во внимание, что у меня сейчас нет ресурсов для перехода на платформу MVC). Поэтому я хотел бы проигнорировать это пожалуйста.

Author: Tom, 2010-07-16

2 answers

Я нашел решение для удаления ошибки "Строка с неправильным отступом", но сначала я должен сказать, что dragonmantank имеет отличную точку зрения - вы не должны смешивать PHP и HTML. Это рецепт от головной боли. Однако, к сожалению, я думаю, что смешивание PHP и HTML очень распространено, особенно в устаревшем программном обеспечении.

Самое быстрое и грязное исправление, предполагающее, что мы используем стандарты кодирования по умолчанию phpcs (которые являются стандартами PEAR), состоит в том, чтобы удалить соответствующий файл обнюхивания. Найдите местоположение стандартов PEAR, для меня, используя Ubuntu, это было здесь:

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

Переименуйте файл ScopeIndentSniff.php, чтобы обнюхивание, проверяющее отступ кода, больше не выполнялось:

> sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

Работа выполнена - теперь отступ не будет проверяться, и ошибка " Строка с неправильным отступом" не возникнет (), и ваш код не будет стандартным и не будет таким качественным!).


Приведенное выше решение довольно любитель - более чистое решение заключается в создании нового стандарта кодирования, в котором используются все стандарты ГРУШИ, за исключением настроек, выбранных вами для вишни. Это очень быстро делается. Вот как это сделать, используя 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 для получения дополнительной информации.

 11
Author: Tom, 2010-07-20 16:03:08

Вы столкнетесь с множеством проблем при запуске PHPC с вашим PHP-кодом, смешанным с HTML. PHPCS действительно полезен только тогда, когда вы анализируете чистые PHP-скрипты. Встроенные стандарты кодирования основаны на чистом PHP, а не на смешанном PHP/HTML.

Одним из вариантов было бы создать свой собственный стандарт и использовать его вместо этого. Пользовательский стандарт будет учитывать смешивание кода, но, вероятно, писать его будет непросто.

Другой вариант - использовать систему шаблонов с тех пор, как вы сказали, что не хотите переходить к рамкам. Smarty и Twig могут использоваться вне рамок MVC. Перейдите к одному из них, а затем попросите PHPC только анализировать.Файлы PHP, а не файлы шаблонов.

 7
Author: dragonmantank, 2010-07-17 03:15:07