- PVSM.RU - https://www.pvsm.ru -
С гордостью хочу представить вашему вниманию утилиту ctags с полноценной поддержкой индексации php:
Подробности под катом. Ссылка на утилиту там же в конце.
Исторически сложилось так, что ctags поддерживал PHP путем парсинга через регулярные выражения, что во-первых позволило быстро и малой кровью добавить поддержку нового языка, а во-вторых сделало невозможным использование какой либо информации об области видимости найденной переменной или функции.
В результате разработка сложных проектов с большим числом классов с использованием инструментов вроде Vim или Emacs была далека от идеала. Например, каждый класс имеет метод __construct, и, чтобы найти нужный конструктор приходилось изрядно «попрыгать» по классам, так как тэги с одинаковыми именами индексировались так как будто они все находились в глобальной области видимости.
Сперва, чтобы побороть эту проблему, я решил попробовать PHPStorm, но после пары часов восхищения качеством парсинга и автодополнения, мне стало в который раз ясно, что с Emacs можно слезть только на Vim, да и то не надолго.
Так вот и пришла мысль допилить наконец поддержку PHP в Ctags до соответствия современным требованиям. В отличие от других языков мне показалось разумным создавать два тэга для одного члена класса или пространства имен — классическое Class::Member, которое обеспечивает классическую навигацию для которой достаточно указать только Member, а также Member<Class>. Последний вариант удобен когда вы используете автодополнение по тэгам в том же Emacs.
Оба варианта выглядят так:
Скачать утилиту можно тут: github.com/zargener/ctags [1]. Собирается легко и без установки лишних зависимостей. Для удобства можно заменить системную утилиту ctags. Новый парсер полностью разбирает исходники той же Symfony2 без видимых ошибок, но примеры некорректно разбираемых файлов приветствуются.
Автор: PerlPower
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/vim/35918
Ссылки в тексте:
[1] github.com/zargener/ctags: https://github.com/zargener/ctags
[2] Источник: http://habrahabr.ru/post/182252/
Нажмите здесь для печати.