你知道Ruby的替代ctags生成器吗?

Exetrant 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

充满活力的ctags开箱即用并没有做很多有用的事情:

  • 它不涉及:

     module A::B 
  • 它没有标记(至少某些)“运算符”方法,如'=='

  • 它不支持限定标签, —type=+

  • 它不输出常量或属性的标记。

补丁可用,但它仅适用于5.5版本,不再起作用。

其他的项目:

资源

Ripper-tags努力确实解决了这里描述的所有内容。 它基于官方Ruby解析器,也非常快。 https://github.com/tmm1/ripper-tags

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

它也支持Emacs。

在〜/ .ctags中添加以下内容

 --regex-ruby=/(^|;)[ \t]*(class|module)[ \t]+([AZ][[:alnum:]_]+(::[AZ][[:alnum:]_]+)+)/\3/c,class,constant/ 

所以你可以:

  • 处理: module A::B

在此处查看更多信息: https : //github.com/bltavares/dot-files/blob/master/ctags

自2013-02起可获得补丁

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

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

它不支持扩展标记格式(但)它还执行其他操作,例如导出cscope数据库。

Interesting Posts