Есть ли рубин-специфичная альтернатива ctags?

Exuberant ctags просто не работает должным образом в некоторых случаях.

Используя обильные ctags, я получаю совершенно неверное определение:

неверный реферал

Coordinator#reporter даже не используется, когда я запускаю код, о чем свидетельствует отсутствие first выводится на консоль, и все же ctags непреклонен в том, что на этот метод ссылается @configuration.reporter

Я сгенерировал свои теги с

ctags -RV .

Я использую Ubuntu 14.04

Используя ruby-mine, чтобы найти определение, он работает безупречно:

правильное направление

Тем не менее, рубиновый рудник очень дорогой и не с открытым исходным кодом.

Так есть ли альтернатива обильным ctags? Рубиновая альтернатива?

1 ответ

Я не знаком с ruby-mine, но могу сказать, что Ctags ничего не знает о типах объектов, миксинах, наследовании и т. Д. Из документации:

  1. Почему при переходе к тегу я оказываюсь не на той строке?

По умолчанию ctags кодирует номер строки в файле, где находятся теги макросов (#define). Это было сделано для обеспечения совместимости с исходной версией ctags для UNIX. Если вы измените файл, содержащий тег, без перестроения файла тега, местоположение тега в файле тега может больше не соответствовать текущему местоположению. Чтобы избежать этой проблемы, вы можете указать опцию --excmd=p, которая заставляет ctags использовать шаблон поиска для поиска тегов макроса. Я никогда не раскрывал причину, по которой исходные ctags UNIX использовали номера строк исключительно для макросов, но до сих пор сопротивлялся изменению поведения Exuberant Ctags по умолчанию, чтобы вести себя по-другому.

В vim вы можете просто запустить вызов определения тега C-] и если вы оказались не в том месте, введите:

:taglist

Это отобразит список тегов, и вы сможете выбрать, к какому файлу / методу добавить определение.

Вы также можете перемещаться по :tnext а также :tlast в VIM

Другие вопросы по тегам