Вы знаете альтернативный генератор ctags для Ruby
Exumerant Ctags не работает с Ruby, вы можете видеть, что в коде ruby.c много хаков, и в основном он не распознает многие случаи. Одним из самых важных является этот бит:
class SomeModule::SomeClass
end
Ctags генерирует:
SomeModule someclass.rb /^class SomeModule::SomeClass$/;" c
что неверно. Правильная и ожидаемая запись:
SomeClass someclass.rb /^class SomeModule::SomeClass$/;" c
Это очень ограничивает. Есть некоторые исправления для доступных ctags, которые не работают, например. https://github.com/xtao/overlay/blob/master/dev-util/ctags/files/ctags-5.5.4-ruby-classes.patch, но, глядя на ctags ruby codebase, это действительно требует полной перезаписи.
Итак, я играл с другим вариантом https://github.com/rdoc/rdoc-tags, который работает лучше, но он медленный. Я имею в виду действительно МЕДЛЕННО. Создание тегов в моем проекте составляет 2 секунды с помощью ctags, но один час с помощью этого инструмента. На самом деле.
Я нашел один старый проект, который разбирал Ruby самостоятельно и генерировал теги, но это было только для Ruby 1.8. Это было медленнее, чем ctags, но не так уж плохо.
Итак, я ищу некоторые альтернативы. Знаете ли вы о каких-либо других рабочих генераторах ruby ctags, которые дают вам правильную производительность и быстро?
Спасибо!
Изменить. Я нашел очень хороший проект, который работает с Ruby 1.9+ и является точным и быстрым. Я рекомендую:
https://github.com/tmm1/ripper-tags
Ответы
Ответ 1
Exuberant ctags из коробки не делает много полезных вещей:
-
Он не имеет дело с:
module A::B
-
Он не тегирует (по крайней мере некоторые из) методы "оператора", такие как ‘==’
-
Он не поддерживает квалифицированные теги, —type=+
-
Он не выводит теги для констант или атрибутов.
Доступен патч, но он доступен только для версии 5.5 и больше не работает.
Другие проекты:
Источник
Ответ 2
Усиление Ripper-меток решает все, что описано здесь. Он основан на официальном анализаторе Ruby, который также довольно быстро. https://github.com/tmm1/ripper-tags
gem install ripper-tags
cd your_project/
ripper-tags -R
Он также поддерживает Emacs.
Ответ 3
Добавьте следующее к своему ~/.ctags
--regex-ruby=/(^|;)[ \t]*(class|module)[ \t]+([A-Z][[:alnum:]_]+(::[A-Z][[:alnum:]_]+)+)/\3/c,class,constant/
Итак, вы можете:
- иметь дело с:
module A::B
Подробнее здесь: https://github.com/bltavares/dot-files/blob/master/ctags
Ответ 4
Патч доступен по состоянию на 2013-02 гг.
Генератор тегов rspec не будет правильно распознавать блоки describe
, которые начинаются с полутонового (:some-method
), но кроме этого, это замечательно.
Ответ 5
Существует также https://github.com/eapache/starscope
Он не поддерживает формат расширенного тега (пока), но он выполняет другие действия, такие как экспорт баз данных cscope.