Як ігнорувати певні стандартні помилки кодування в PHP CodeSniffer


14

У нас є веб-додаток 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 

-------------------------------------------------- ------------------------------
ЗНАЙДЕНО 2 ПОМИЛКИ ТА 1 ПОПЕРЕДЖЕННЯ, ЯКІ ВПЛИВИ 3 ЛІНІЇ
-------------------------------------------------- ------------------------------
  1 | ПОПЕРЕДЖЕННЯ | Рядок перевищує 85 символів; містить 121 символ
  9 | ПОМИЛКА | Відсутній коментар до файлу файла
 11 | ПОМИЛКА | Рядок з відступом неправильно; очікується 0 пробілів, знайдено 4
-------------------------------------------------- ------------------------------

У мене виникла помилка " Неправильно відрізана лінія ". Я думаю, це відбувається тому, що я змішую відступ PHP з відступом HTML. Але це робить його більш читабельною, чи не так? ( беручи до уваги, що я не маю можливості переходити на рамки MVC зараз ). Тож я хотів би проігнорувати це, будь ласка.


1
це трохи занадто багато питань щодо програмування IMO, щоб тут бути. Оскільки мова йде про "LINT", подібну утиліту, яка здебільшого зацікавить важких програмістів, не обов'язково веб-майстрів. Але це красиво запитується та відформатовано, тому ми можемо покинути це.
Джефф Етвуд

2
Про попередження першого рядка: чи можу я запропонувати використовувати DOCTYPE HTML5?
luiscubal

Дякую за відгук Джефф - я радий перенести його. Я, мабуть, мав зрозуміти, коли не було тегу 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 .


Це було дуже зручно - я використовував цю відповідь, щоб видалити помилки, що виникають уздовж рядків "Клас повинен знаходитись у просторі імен принаймні одного рівня", а також помилки іменування функції верблюда. Я використовую 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.