clojure惯用法静态分析器

今天说点clojure的东西。大家可能都听说过kickstarter上的一个IDE项目叫LightTable的吧,这款最开始主打clojure编程的IDE筹到了一大笔钱,现在已经放出来好几个试用版了。最新的一个版本支持一个叫做custom expression的功能,允许用户选中任意块代码,将代码替换为这段代码的执行结果。

clojure里现在有一个lib叫做kitbit,它是一个clojure的静态代码解析和替换工具,具体就是可以分析你的一部分clojure代码块,然后看这段代码有没有对应的惯用实现,如果有的话可以选择将自己的代码替换为惯用实现。这有点像intellij里面的功能,可以把有些用法例如? :三元运算符替换为if else。比如:

At src/overtone/examples/compositions/jazz.clj:114:
Consider using:
  (inc beat)
instead of:
  (+ beat 1)

kitbit有emacs的插件,也就是说在emacs里面配置好了以后也可以实现一键代码分析和重构了。至于这些惯用法,我们是可以自定义的,看了一下它的默认设置,默认的内容挺简单的:

(defrules rules
  [(if ?x ?y nil) (when ?x ?y)]
  [(if ?x nil ?y) (when-not ?x ?y)]
  [(if ?x (do . ?y)) (when ?x . ?y)]
  [(if (not ?x) ?y ?z) (if-not ?x ?y ?z)]
  [(when (not ?x) . ?y) (when-not ?x . ?y)]
  [(do ?x) ?x]
  [(if-let ?binding ?expr nil) (when-let ?binding ?expr)]
  [(when ?x (do . ?y)) (when ?x . ?y)]
  [(when-not ?x (do . ?y)) (when-not ?x . ?y)]

  ;; suggest `while` for bindingless loop-recur
  [(loop [] (when ?test . ?exprs (recur)))
   (while ?test . ?exprs)]
  [(let ?binding (do . ?exprs)) (let ?binding . ?exprs)]

最后看看这个能贴在纸上的电路,有各种传感器,还可以编程。

你可能感兴趣的:(clojure惯用法静态分析器)