Clojure China

如何设置Emacs CIDER提供完美的CLJS bREPL补全?

brepl
cider
emacs
clojurescript
#1

想知道大家是怎么给ClojureScript设置Emacs CIDER的?能补全 (js/ ) 之类的么?最好是设置 bREPL。

#2

cider自己没有做这块,除非对接上js的补全后端。

#3

有什么js的补全后端么?and应该怎么设置到CIDER呢?

#4

JS的补全后端我比较推荐Tide,但是没有尝试过设置到Cider。应该不是那么简单的一件事,简单来说应该是以下几步:

  1. 在CLJS repl启动之后,把tide启动起来;
  2. 创建一个company-backend,这个backend在出现 xxx/的代码的时候生效;
  3. xxx/换成xxx.调用Tide的那个补全的Api。

company支持把多个补全列表组合起来显示,tide估计也支持提供文本,返回补全文本。所以应该是可行。

甚至我觉得连eldoc都应该是可行的。

#5

你说的Tide是这个么? https://github.com/ananthakumaran/tide
按照你的思路,我也觉得可行。而且不会实现起来不会太难。
话说这样会不会只是提供 js/ 下的补全?无法支持其他的 ClojureScript 补全?我在CLJS上还是菜鸟,问一下CLJS下只有 js/ 是JS interop么?如果是的话,我觉得按照你的思路可以写一个插件之类的。你创建一个,我或许可以contribute一下。

#6

并不是,JS interop有几种。
比如

(ns ...
  (:require ["react" as React]))

;; 模块下的函数调用
(React/createElement ...)

;; 取属性
(defn cb [^js/MouseEvent e]
  (.-target e))

;; 函数调用
(.log js/console "hello")
;; or
(js/console.log "hello")
;; or
(console.log "hello")

情况挺多的,估计cursive的作者对这个应该比较清楚,应该可以问问他。
cursive好像有这方面的支持。

我没有打算做这种插件。。我觉得这个功能不是很有必要。
我个人是偏向于一边查文档一边写的那种。

#7

看起来确实情况很多钟,除非CIDER支持,不然实现会比较麻烦。我去CIDER问问。谢谢了。