【问题标题】:Do you know an alternative ctags generator for Ruby你知道 Ruby 的替代 ctags 生成器吗
【发布时间】:2013-06-27 08:54:34
【问题描述】:

Exumerant 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 秒,但使用此工具一小时。真的。

我发现了一个旧项目,它自己解析 Ruby 并生成标签,但它仅适用于 Ruby 1.8。它比 ctags 慢,但还不错。

所以我正在寻找一些替代方案。您是否知道任何其他可以为您提供正确输出且速度很快的 ruby​​ ctags 生成器?

谢谢!

编辑:我发现了非常好的项目,该项目适用于 Ruby 1.9+,并且准确且快速。我推荐它:

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

【问题讨论】:

  • 或者,如果您知道快速且有效的 Ruby 解析器|词法分析器,它易于使用,那么我可以编写自己的标签生成器。应该适用于 Ruby 1.8-2.0。
  • 关于使用 class SomeModule::SomeClass 的旁注:它不会创建以 SomeModule 作为父级的词法范围,您应该避免使用它 - 请参阅 stackoverflow.com/questions/15119724/…

标签: ruby vim ctags


【解决方案1】:

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

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

它也确实支持 Emacs。

【讨论】:

【解决方案2】:

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

  • 它不处理:

    module A::B
    
  • 它不标记(至少部分)“运算符”方法,如 ‘==’

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

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

补丁可用,但仅适用于 5.5 版,不再有效。

其他项目:

Source

【讨论】:

  • 是的,我看到了这个,但我找不到这个特定的补丁。我只有一个 5.5 版本的,根本不工作。
  • 我有 rdoc-tags。我已经添加了链接。看看吧。
  • 感谢您的链接,我已经尝试过了,而且速度非常慢。例如。解析“puppet”项目 = 1 小时。 :-(
【解决方案3】:

将以下内容添加到您的 ~/.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

【讨论】:

  • 这个正则表达式是你自己写的吗?
  • 不,我从链接中复制。
【解决方案4】:

自 2013 年 2 月起提供补丁

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

【讨论】:

    【解决方案5】:

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

    它不支持扩展标签格式(目前),但它可以做其他事情,例如导出 cscope 数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2015-01-27
      • 2010-11-03
      • 2015-01-13
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      相关资源
      最近更新 更多