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

lza*_*zap 18 ruby vim ctags

Exetrant Ctags与Ruby不兼容,你可以看到ruby.c代码中有很多hacks,基本上它无法识别很多情况.其中最重要的是这一点:

class SomeModule::SomeClass
end
Run Code Online (Sandbox Code Playgroud)

Ctags生成:

SomeModule  someclass.rb  /^class SomeModule::SomeClass$/;"  c
Run Code Online (Sandbox Code Playgroud)

这是错的.正确和预期的条目是:

SomeClass  someclass.rb  /^class SomeModule::SomeClass$/;"  c
Run Code Online (Sandbox Code Playgroud)

这是非常有限的.有一些可用的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

Jay*_*ram 17

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

  • 它不涉及:

    module A::B
    
    Run Code Online (Sandbox Code Playgroud)
  • 它没有标记(至少某些)"运算符"方法 ‘==’

  • 它不支持合格的标签, —type=+

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

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

其他的项目:

资源


lza*_*zap 17

Ripper-tags努力确实解决了这里描述的一切.它基于官方的Ruby解析器,也很快.https://github.com/tmm1/ripper-tags

gem install ripper-tags
cd your_project/
ripper-tags -R
Run Code Online (Sandbox Code Playgroud)

它也支持Emacs.

  • 好的等待更多推荐,但我对ripper-tags非常满意.我会接受我自己的回答,不要混淆读者.:-D (2认同)
  • 好极了!最近ripper-tags添加了对嵌套/常量的支持https://github.com/tmm1/ripper-tags/pull/44 (2认同)

lin*_*eng 5

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

--regex-ruby=/(^|;)[ \t]*(class|module)[ \t]+([A-Z][[:alnum:]_]+(::[A-Z][[:alnum:]_]+)+)/\3/c,class,constant/
Run Code Online (Sandbox Code Playgroud)

所以你可以:

  • 处理: module A::B

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