18

Exumerant Ctags 不适用于 Ruby,你可以看到 ruby​​.c 代码中有很多 hacks 并且基本上它无法识别很多情况。其中最重要的是这一点:

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​​ 代码库上,这确实需要完全重写。

所以我一直在玩其他选项,即https://github.com/rdoc/rdoc-tags,它效果更好,但速度很慢。我的意思是真的很慢。使用 ctags 在我的项目上生成标签需要 2 秒,但使用此工具需要 1 小时。真的。

我发现了一个旧项目,它自己解析 Ruby 并生成标签,但它仅适用于 Ruby 1.8。它比 ctags 慢,但还不错。

所以我正在寻找一些替代品。您是否知道任何其他工作的 ruby​​ ctags 生成器可以为您提供适当的输出并且速度很快?

谢谢!

编辑:我发现了非常好的项目,它适用于 Ruby 1.9+,并且准确且快速。我推荐它:

https://github.com/tmm1/ripper-tags

4

5 回答 5

18

Ripper-tags effort does solve everything described here. It is based on official Ruby parser which is also quite fast. https://github.com/tmm1/ripper-tags

gem install ripper-tags
cd your_project/
ripper-tags -R

It does also support Emacs as well.

于 2013-06-27T09:10:30.333 回答
17
于 2013-06-27T08:59:53.073 回答
5

将以下内容添加到您的 ~/.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

于 2016-02-01T08:03:42.887 回答
1

还有https://github.com/eapache/starscope

它不支持扩展标签格式(目前),但它可以做其他事情,例如导出 cscope 数据库。

于 2014-01-10T00:14:13.933 回答
1

自 2013 年 2 月起提供补丁

rspec 标签生成器将无法正确识别describe以 semicolor ( ) 开头的块:some-method,但除此之外,它很棒。

于 2013-09-04T15:45:25.827 回答