пятница, 21 августа 2009 г.

classbrowser для php5 кода в gedit

Так уж сложилось, что я пишу php (да и js и python) код в редакторе gedit.
Кроме подсветки синтаксиса, мне удобно иметь перед глазами список доступных классов и функций в текущем файле.
В общем случае для этого используется plugin classbrowser, но с php получается одно недоразумение. Дело в том, что этот плагин разбирает код с помощью известной программы ctags, а та, в свою очередь, с php не очень дружит - не работает с классами, например. Подружить их, впрочем, оказалось достаточно несложно.
Поскольку этот плагин для gedit написан на python, то его поведение легко изменить до требуемого.
Для этого находим парсер отвечающий за ctags. Он называется parser_ctags.py и нашелся на моей системе в каталоге /usr/lib/gedit-2/plugins/classbrowser. Правим строку
command = "ctags -n -f %s %s"%(tmpfile,arg)
на
command = "ctags -n --regex-PHP='/(abstract |final )+class ([^ ]*)/\\2/c/' --regex-PHP='/interface ([^ ]*)/\\1/c/' --regex-PHP='/(public |static |abstract |protected |private )+function ([^ (]*)/\\2/f/' -f %s %s"%(tmpfile,arg)
И можем наслаждаться корректным списком функций для php5
Правда мне еще пришелся по душе этот список без показа переменных (их обычно много и они мешают просматривать структуру классов). Так что добавим после строки:
if tokens[0][:2] == "!_": continue
строку:
if tokens[3][:1] == "v": continue