你知道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版本,不再起作用。
其他的项目:
- https://github.com/tmm1/ripper-tags(Ruby 1.9+的最佳选择)
- https://rubygems.org/gems/rdoc-tags (非常慢,但适用于1.8)
资源
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起可获得补丁
- https://github.com/fishman/ctags(Ruby的 ctags补丁,包括
rspec
)
rspec标记生成器无法正确识别以semicolor开头的describe
块( :some-method
),但除此之外,它很棒。
还有https://github.com/eapache/starscope
它不支持扩展标记格式(但)它还执行其他操作,例如导出cscope数据库。