Pull to refresh

CodeSniffer и PhpEd

Reading time2 min
Views7.3K
На хабре уже ни раз встречалось описание интструмента PHP_CodeSniffer, который используется для проверки соответствия написанного кода стандартам кодирования. Инструмент очень удобный и полезный, думаю, спорить никто не станет. В интернете есть статьи, которые описывают как интергрировать его с системой контроля версий, чтобы осуществлять проверку перед очередным коммитом, но мне захотелось прикрутить его к своей IDE, чтобы проверять код во время его написания.

Исторически сложилось, что в работе я использую IDE от Nusphere – PhpEd. PhpEd позволяет подключать к себе скрипты на php, которые могут выполнять произвольные операции над кодом в редакторе. Скрипт также может запустить внешнюю программу и вернуть данные со стандартного потока вывода непосредственно в редактор кода.

На форуме Nusphere есть целый раздел, посвященный скриптам автоматизации

Об этой возможности я давно знал, но она не совсем подходит для использования CodeSniffer. Объясню почему. Мы можем перенаправить все данные, полученные в результате анализа нашего кода в отладочное окно редактора, но это будет всего лишь статичный текст. Номера строк с ошибками являются тоже обычным текстом и перемещаться по коду будет невозможно. Придется глазками смотреть номер строки с ошибкой, переходить руками на эту строку и править ее. Разумеется, это дело мне совершенно не нравилось.

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

File location regexp: ^([^ ]+) (\([0-9]*\)) .*$
(or say Output location regexp)
by applying this regexp on each line in the output, IDE will get array of two elements (when matched, of course). And one of the elements will be file name and the other is line number.


Иными словами, если сформировать выходную строку в соответствии с данным регулярным выражением, то IDE поймет, что мы передаем ей информацию о файле и номере строки в нем. Задача сводилась к тому, чтобы запустить CodeSniffer, получить от него данные, немного переформатировать вывод и направить в окно логов редактора, что является сущим пустяком.

Теперь все по шагам:

0. Устанавливаем pear для php, который идет в составе PhpEd
c:\Program Files\NuSphere\PhpED\php5> go-pear.bat

и пакет php_sniffer
c:\Program Files\NuSphere\PhpED\php5> pear install php_sniffer

1. Качаем мой небольшой класс-обертку над CodeSniffer. Кладем его, скажем, в
c:\Program Files\NuSphere\PhpED\scripts\

2. Открываем PhpEd.

Settings > Tools > Integration
Создаем новое меню «Scripts»
Создаем новое подменю «CodeSniffer»

3. Редактируем созданный пункт:

— Execute with «Shell»
— Command line:
"c:\Program Files\NuSphere\PhpED\php5\php.exe" "c:\Program Files\NuSphere\PhpED\scripts\codesnifferwrapper.php" "@Fname@"
— Shortcut: CTL-ALT-0 (или любой удобный)
— Ставим крестики в следующих пунктах:
Show this command in Workspace popup – for files
Show this command in Explorer popup – for files
Show this command in File Bar popup
Redirect Output Stream to log window


Сохраняем результат, открываем любой php файл, жмем назначенное сочетание клавиш и любуемся.

Tags:
Hubs:
+4
Comments10

Articles

Change theme settings