Hatred's Log Place

DON'T PANIC!

Oct 22, 2009 - 2 minute read - linux programming

medit: 'PHP check syntax' tool

Medit(( http://mooedit.sf.net)) замечательный редактор, написанный на Gtk, пока, за малым исключением, удовлетворяет все мои запросы. Корнями уходит графическому интерфейсу GGAP(( http://ggap.sourceforge.net/)) для GAP(( http://www.gap-system.org/)). Будет время, напишу более полную заметку про него, благо, писать есть что.

Но сегодня рассмотрим вопрос создания тула ‘PHP syntax check’.

Делаем тул

Первым делом идем в Изменить -> Параметры -> Инструменты вкладка Панель инструментов и создаем новый инструмент, даем ему имя ‘PHP syntax check’ и нажимаем Enter. Далее заполняем поля инстумента:

  • Файлы: langs:php
  • Параметры: need-doc или need-save (подробности в документации)
  • Тип команды: команда оболочки
  • Вывод: Панель вывода
  • В окне ввода скрипта пишем: bashphp -l $DOC

Все, сохраняем, выходим. Теперь, когда мы будем редактировать php скрипт, у нас в меню Инструменты будет появляться пункт ‘PHP syntax check’, вывод по которому будет производиться в окно вывода.

Оптимизируемся

Тул работает, но если возникает ошибка, удобно было бы переходить по клику по не в окне вывода в нужное место документа.

Вспоминаем, что при создании инструмента был пункт Фильтр… Они нужны как раз, что бы Medit из потока вывода мог выбрать для себя нужные данные, на основе которых сделать какие-то действия. Только для наших задач фильтра нет. Нет, так создадим!

Идем в ~/.local/share/medit и создаем там файл filters.xml с, примерно, таким содержимым:

<filter id="php-syntax-check" name="php-syntax-check">
  <match what="stderr" pattern=".*Parse error:.* in (?P&lt;file&gt;[^:]+) on line (?P&lt;line&gt;<br/>d+)"/>
  <match what="stdout" pattern=".*Parse error:.* in (?P&lt;file&gt;[^:]+) on line (?P&lt;line&gt;<br/>d+)"/>
</filter>

Описания формата нет, а мои изыски на официальной вики канули в лету, поэтому пока так:

  • `?P````((в XML: xml?P&lt;file&gt;)) говорит Medit, что в этой позиции находится имя файла.
  • ?P<line>((в XML: xml?P&lt;line&gt;)) говорит Medit, что в этой позиции идет строка.

Все остальное - обычные регулярные выражения. Более подробные применения фильтров, можно глянуть в /usr/share/moo/filters.xml, особенно пасы с pop/push

Теперь идем обратно в Изменить -> Настройки -> Инструменты, ‘PHP syntax check’ и в качестве фильтра выбираем наш ‘php-syntax-check’ сохраняемся. Теперь если при проверке синтаксиса вылетит ошибка, мы можем перейти на неё, просто щелкнув по строчке с сообщением о ней.

В качестве дополнительного тюнинга, идем Изменить -> Настройка горячих клавиш, в списке находим ‘PHP syntax check’ и задаем горячую клавишу, я задал F9.

Несколько снимков экрана, всё кликабельно:

Настройка инструмента

Настройка горячей клавиши, пример работы на заднем фоне