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

moliliang · 发布于 2017年1月02日 · 最后由 moliliang 回复于 2017年1月07日 · 890 次阅读
10594

因为一直用的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目的。

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

共收到 14 条回复
18852
freefishz · #1 · 2017年1月02日 1 个赞

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

5917
ruchee · #2 · 2017年1月02日

这个思路不错👍

10594
moliliang · #3 · 2017年1月02日

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

10594
moliliang · #4 · 2017年1月02日

#2楼 @ruchee 嘻嘻

17025
jiyuhang110 · #5 · 2017年1月02日

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

10594
moliliang · #7 · 2017年1月03日

#6楼 @lululau 赞一个

10594
moliliang · #8 · 2017年1月03日

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

96
guange · #9 · 2017年1月03日

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

10594
moliliang · #10 · 2017年1月03日

#9楼 @guange 😯

18852
freefishz · #11 · 2017年1月03日

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

10594
moliliang · #12 · 2017年1月04日

#11楼 @freefishz 自己写的还好

2880
luikore · #13 · 2017年1月06日

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

10594
moliliang · #14 · 2017年1月07日

#13楼 @luikore 噢,没了解rubymine

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册