Rails 实现一个代码补全的思路

moliliang · January 02, 2017 · Last by moliliang replied at January 07, 2017 · 3981 hits

因为一直用的 rubymine,用 rubymine 主要是强大的代码补全,有比较快的工作效率。

后来被同事安利了 vscode,这个东西也不错。

但是 rails 的自动完成其实很一般。

但是 pry 这个 gem 的 [tab] 键之后,有很多 rails 的动态方法:

如输入 User.find_ 之后,按下 [tab] 就能出现 rails 的动态方法。

后来发现 pry 传入字符串,就可以得到返回的代码补全:

require 'readline'
require 'pry/input_completer'
result = Pry::InputCompleter.new(Readline).call 'User.find_'

所以,我 fork 了 pry 这个 gem 包。

加入了一段代码: https://github.com/molisoft/prycode/commit/2babee8ce55eca03f2af30daadd461522e20597d 也就是 http 功能。

启动它:

这样的话,就可以直接这样操作:

发起 http 请求“Array.d”就可以得到

{"result":["up","isplay","efine_singleton_method","ebugger"]}

其中的 up 就是 Array.dup , isplay 就是 Array.display ..

所以,就可以给 vscode 写一个插件,来实现代码补全啦?或者 vim、emacs 等等编辑器

于是没时间写。。

而且 prycode 这个项目也不应该是这样写的。

主要是 demo 目的。

谁有时间,可以基于这个思路,实现一个通用的代码补全 呀。。。

个人觉得,用 ruby 写代码无需代码补全。只要补相同名称就可以了,sublime,vscode 和 atom 都已经有这项功能

这个思路不错👍

#1 楼 @freefishz 动态方法呢,ruby 的代码不像静态语言,很多元编程代码呢 😂

如果某个类型 include 的 module 非常多,而且还引入另一个文件的类呢

#5 楼 @jiyuhang110 pry 可以载入整个 rails 环境。

👍 未来动态语言 ide 的方向。

#3 楼 @moliliang 其实正是由于 ruby 的元编程让我觉得没必要代码补全

RubyMine 就是类似这样实现补全的,不过它不用起 pry

#13 楼 @luikore 噢,没了解 rubymine

You need to Sign in before reply, if you don't have an account, please Sign up first.