https://github.com/tmm1/ripper-tags
gem ins ripper-tags
ripper-tags -R my/project/folder
#1 楼 @aptx4869 attr_accessor 可以识别,算是类宏吧?
看它的源码 https://github.com/tmm1/ripper-tags/blob/master/lib/ripper-tags/parser.rb#L67 ,对 define_method
、attr_accessor
都做了处理。比 ctags 棒
#4 楼 @aptx4869 应该是你的 ctags 配置里 (~/.ctags ?) 加了 --regex-ruby=/^[ \t]*has_many.../
的正则?
ripper-tags 好像也有... https://github.com/tmm1/ripper-tags/blob/master/lib/ripper-tags/parser.rb#L69
#6 楼 @luikore #7 楼 @doitian 我现在用的是 guard-ctags-bundler 这个 gem,按默认设置定期手动运行,看源码应该是直接ctags -R --languages=ruby
def generate_tags(path, tag_file)
....
cmd = "#{@opts[:binary] || 'ctags'} -f #{tag_file} #{@opts[:arguments] || '-R --languages=ruby'}"
cmd << " -e" if @opts[:emacs]
cmd << " #{path}"
system(cmd)
....
end
end
end
关键不是 has_many 这些,那只是顺手截图截到了……关键是其他 gem 中的一些黑魔法,包括我自己项目中定义的类宏都能用 ctags 这样直接跳转,ripper-tags 就不行,即使是项目中定义的,粗略看了下貌似写在 concern 里的都没有……