Clojure China

[链接] Parinfer: Let's simplify the way we write Lisp

#1

似乎是个新的 Emacs Mode 可以自动调整括号而且非常强大
http://shaunlebron.github.io/parinfer/

…我只是想吐槽一下直接全部用缩进不就都解决了…

1赞
#2

挺有创意的。目前貌似只有 atom 的 plugin。
不过习惯了 paredit,感觉 paredit 也足够了,简单强大。

#3

确实值得尝试,不过暂时Emacs + Paredit已经足够了。

#4

我只在VS Code上面体验过几分钟的Parinfer,编辑性能有比较严重的问题

其实lisp的缩进分为三种情况,一种是平缩进,数据本身没有次序上的特殊关系

[1
 2
 3]

一种是函数调用缩进,第二行起都缩进两个字符

(defn hello [name]
   (println "hello " name)

这里defn尽管是一个宏,为了区别下面要讲的缩进,还是把它归类于函数调用缩进

还有一种是宏调用缩进,缩进量与宏名持平

(macro-name arg1
            arg2
            ...)

这个在commonlisp的缩进中比较常见,clojure较少见

当然缩进与否完全是给人看的,一个好的编辑模式,应该自动补全括号,缩进本身除了3选1,也不应该再依赖人的参与。

lisp提倡代码即数据,具体采用哪一种缩进,依赖于对数据的解释,我们可能会在vector中书写函数(就像reagent里的组件一样),也可能像在宏里那样将list当作数据。

我觉得Parinfer还是复杂了,lisp代码就是一棵树,基于树进行pretty-print就很容易,基于文本就很繁琐