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+ 工作非常好的项目,并且准确,快速。我推荐它:
答案 0 :(得分:17)
开箱即用的ctags没有做很多有用的事情:
它不涉及:
module A::B
它没有标记(至少某些)“‘==’
它不支持合格代码—type=+
它不输出常量或属性的标记。
补丁可用,但它仅适用于5.5版本,不再适用。
其他项目:
答案 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
) rspec标记生成器无法正确识别以半色(describe
)开头的:some-method
块,但除此之外,它很棒。
答案 4 :(得分:1)
还有https://github.com/eapache/starscope
它不支持扩展标记格式(但是)它还可以执行其他操作,例如导出cscope数据库。