Могу ли я переопределить используемый набор правил phpcs для каждого файла, если да, то как?

Недавно мы перешли на git и реализовали (на данный момент публикуем) хуки получения на нашем центральном сервере для отправки отчетов разработчикам, а также создали несколько инструментов, позволяющих нам автоматически проверять наш стандарт кода с помощью phpcs в наших средах разработки.

Все это красиво и стильно, работает хорошо, но мы хотим иметь возможность всегда полагаться на наш стандарт кода, не игнорируя каждый файл, который не соответствует логическому принципу. Теперь у нас есть собственный набор правил, который переопределяет некоторые элементы стандарта PEAR по умолчанию, но мы хотим пойти немного дальше, если это возможно.

Наша проблема заключается в том, что хотя стандарт PEAR идеально подходит для всех классов/бизнес-логики, но в файлах представлений мы хотим ослабить правила, например, закрывающие скобки должны быть на отдельной строке. Проблема в том, что мы в основном определяем html в этих файлах, и единственные управляющие структуры, которые у нас есть, — это простые операторы if-else или foreach, а открытие php, затем добавление новой строки, закрывающей скобки, новой строки и закрытие php — это немного глупо.

Необходимый синтаксис для корректности:

<?php
}
// end of some if statement ?>

Что мы вместо этого хотели бы использовать для представлений:

<?php } // end of some if statement ?>

Это сделало бы наш код более читабельным...

Нам также не нравится альтернативный синтаксис (if(..): ... endif;), на самом деле, в основном потому, что здесь также были некоторые проблемы с достоверностью (все дело в пробелах...).

Игнорировать весь файл (с // @codingStandardsIgnoreFile) для нас не вариант.

тл;др

Итак, что мы хотели бы сделать, так это определить отдельный набор правил для наших файлов представлений, чтобы у нас все еще был стандарт, которого нужно придерживаться, но с ослабленными правилами на этих фронтах, чтобы наш код все еще можно было сделать читаемым.

Я еще не слишком хорошо разбираюсь в phpcs и не смог найти никаких решений самостоятельно, используя ключевые слова, которые, как мне казалось, были логичны... Также приветствуются любые предложения по созданию аккуратных файлов просмотра, которые также соответствуют PEAR...


person sg3s    schedule 12.11.2012    source источник


Ответы (1)


Если дело доходит до нескольких сообщений, которые вы хотите исключить из некоторых файлов, вы можете поместить эти исключения непосредственно в свой файл ruleset.xml. Например:

<!--
  You can also be more specific and just exclude some messages.
  Please note that all message-specific ignore patterns are
  checked using absolute paths.

  The code here will just hide the ContainsVar error generated by the
  Squiz DoubleQuoteUsage sniff for files that match either of the two
  exclude patterns.
 -->
<rule ref="Squiz.Strings.DoubleQuoteUsage.ContainsVar">
  <exclude-pattern>*/tests/*</exclude-pattern>
  <exclude-pattern>*/data/*</exclude-pattern>
</rule>

Я не уверен, где хранятся ваши файлы просмотра, но если вы можете сопоставить их с помощью шаблона исключения (в основном просто регулярного выражения), вы сможете ослабить некоторые правила для них.

Лучший способ узнать этот бит ref="" — запустить phpcs для ваших файлов представления и использовать аргумент командной строки -s. Для каждого сообщения вы получите уникальный код, который затем сможете использовать для добавления конкретных шаблонов исключений в свой набор правил.

Есть множество других вещей, которые вы можете сделать в файлах набора правил. Ознакомьтесь с документацией здесь.

person Greg Sherwood    schedule 12.11.2012
comment
Забыл упомянуть: убедитесь, что вы используете PHP_CodeSniffer версии 1.4.2 (последняя стабильная версия), так как в версии 1.4.1 была ошибка правила исключения. - person Greg Sherwood; 13.11.2012
comment
Спасибо, это было в основном то, что я искал. Я намеренно оставил расположение файлов представления неясным, поскольку они находятся в разных местах для разных типов проектов. Мы можем это выяснить :) - person sg3s; 13.11.2012
comment
Ага! -s только что избавил меня от большого количества поисков через Sniffs. Спасибо :) - person markdwhite; 10.04.2015