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

时间:2013-06-27 08:54:35

标签: ruby vim 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慢,但不是那么糟糕。

所以我正在寻找一些替代品。你知道任何其他工作的红宝石ctags发生器,它给你正确的输出,并且很快?

谢谢!

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

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

5 个答案:

答案 0 :(得分:17)

开箱即用的ctags没有做很多有用的事情:

  • 它不涉及:

    module A::B
    
  • 它没有标记(至少某些)“‘==’

  • 等”运算符“方法
  • 它不支持合格代码—type=+

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

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

其他项目:

Source

答案 1 :(得分:17)

Ripper-tags工作确实解决了这里描述的所有问题。它基于官方的Ruby解析器,也很快。 https://github.com/tmm1/ripper-tags

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

它也支持Emacs。

答案 2 :(得分: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

答案 3 :(得分:1)

自2013-02起可获得补丁

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

答案 4 :(得分:1)

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

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