Мастер сельского афоризму
0,4
рейтинг
5 июня 2013 в 15:51

Разработка → Нормальная поддержка PHP в Ctags

VIM*, PHP*, Emacs*
    С гордостью хочу представить вашему вниманию утилиту ctags с полноценной поддержкой индексации php:
  • Поддержка классов и интерфейсов
  • Поддержка членов классов — функции, переменные, константы
  • Поддержка пространств имен
  • Форматирование тэгов таким образом что вам больше не придется искать нужный __construct по десятку файлов


Подробности под катом. Ссылка на утилиту там же в конце.


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

    В результате разработка сложных проектов с большим числом классов с использованием инструментов вроде Vim или Emacs была далека от идеала. Например, каждый класс имеет метод __construct, и, чтобы найти нужный конструктор приходилось изрядно «попрыгать» по классам, так как тэги с одинаковыми именами индексировались так как будто они все находились в глобальной области видимости.

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

    Так вот и пришла мысль допилить наконец поддержку PHP в Ctags до соответствия современным требованиям. В отличие от других языков мне показалось разумным создавать два тэга для одного члена класса или пространства имен — классическое Class::Member, которое обеспечивает классическую навигацию для которой достаточно указать только Member, а также Member<Class>. Последний вариант удобен когда вы используете автодополнение по тэгам в том же Emacs.

    Оба варианта выглядят так:






    Скачать утилиту можно тут: github.com/zargener/ctags. Собирается легко и без установки лишних зависимостей. Для удобства можно заменить системную утилиту ctags. Новый парсер полностью разбирает исходники той же Symfony2 без видимых ошибок, но примеры некорректно разбираемых файлов приветствуются.

К сожалению навигация в полной мере поддерживается пока только Emacs, или во всяком случае в тех редакторах, которые предоставляют возможность дополнения по тэгам. В связи с ограничениями самого принципа работы с искомыми символами — ищется то слово, что под курсором, возможна передача только непосредственного имени символа, которое не будет точно совпадать с тэгом содержащим не только имя символа, но и область видимости.
@PerlPower
карма
168,0
рейтинг 0,4
Мастер сельского афоризму
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (7)

  • –2
    Sublime + ctags?
  • +1
    • 0
      И все бы хорошо, но со старой версией ctags эта связка у меня отлично работала… ну как отлично… ну работала. А с новой версией просто никак.
      • +1
        Сделал фикс, попробуйте.
        • +1
          Вот в такие дни я люблю OpenSource! :) Заработало.
  • –3
    чем не устраивает SublimeCodeIntel?
    • +1
      Например, тем, что работает только в SublimeText.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.