Вы знаете альтернативный генератор 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.