Нормальная поддержка 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 без видимых ошибок, но примеры некорректно разбираемых файлов приветствуются.

ссылка на оригинал статьи http://habrahabr.ru/post/182252/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *