Нормальная поддержка PHP в Ctags

        С гордостью хочу представить вашему вниманию утилиту 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, или во всяком случае в тех редакторах, которые предоставляют возможность дополнения по тэгам. В связи с ограничениями самого принципа работы с искомыми символами — ищется то слово, что под курсором, возможна передача только непосредственного имени символа, которое не будет точно совпадать с тэгом содержащим не только имя символа, но и область видимости.
    Метки:
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

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

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