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

в 11:51, , рубрики: ctags, emacs, php, vim, метки: , , ,

    С гордостью хочу представить вашему вниманию утилиту ctags с полноценной поддержкой индексации php:

  • Поддержка классов и интерфейсов
  • Поддержка членов классов — функции, переменные, константы
  • Поддержка пространств имен
  • Форматирование тэгов таким образом что вам больше не придется искать нужный __construct по десятку файлов

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


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

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

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

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

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

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

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

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

Автор: PerlPower

Источник

Поделиться

* - обязательные к заполнению поля