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


14

У нас есть веб-приложение на PHP 5, и в настоящее время мы оцениваем PHP CodeSniffer , чтобы решить, улучшает ли применение стандартов кода качество кода, не вызывая слишком много головной боли. Если это будет хорошо, мы добавим хук SVN pre-commit, чтобы гарантировать, что все новые файлы, зафиксированные в ветке 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 ОШИБКИ (S) И 1 ПРЕДУПРЕЖДЕНИЕ (S), ВЛИЯЮЩИЕ НА 3 ЛИНИИ (S)
-------------------------------------------------- ------------------------------
  1 | ВНИМАНИЕ | Строка превышает 85 символов; содержит 121 символов
  9 | ОШИБКА | Отсутствует комментарий к файлу документа
 11 | ОШИБКА | Неверный отступ строки; ожидается 0 пробелов, найдено 4
-------------------------------------------------- ------------------------------

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


1
это слишком сложный вопрос программирования IMO, чтобы быть здесь ... поскольку речь идет об утилите, подобной "LINT", которая в основном будет интересна для программистов, не обязательно веб-мастеров. Но он красиво задан и отформатирован, так что мы можем оставить это на время.
Джефф Этвуд

2
О строке 1 предупреждение: Могу ли я предложить использовать HTML5 DOCTYPE?
2010 года

Спасибо за ваш отзыв, Джефф, я рад его перенести. Я, наверное, должен был понять, когда не было тега PHP, когда я создавал вопрос :-).
Том

@luiscubal - он, хорошее предложение; нравится твое мышление ;-)
Том

Ответы:


11

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

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

> 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 для получения дополнительной информации.


Это было очень удобно - я использовал этот ответ, чтобы убрать ошибки, возникающие по типу «Класс должен находиться в пространстве имен хотя бы одного уровня» вместе с ошибками именования функции case верблюда. Я использую PSR2 столько, сколько могу, но редактируя сайт Magento, я не в состоянии пройти и переименовать каждую функцию и разобраться в пространстве имен.
Дейв Чайлд

7

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.