kibit是一款用来分析clojure/clojurescript/cljx代码的插件,用来检测代码中有哪些写得不是很符合语言习惯的。

例如:

(if (some test)
  (some action)
  nil)

经过它的分析以后会给出建议改成:

(when (some test)
  (some action))

安装

kibit使用起来很简单,在~/.lein/profiles.clj下面的{::user {:plusgins []}里面加上这个插件就好:

[lein-kibit "0.1.6"]

使用

kibit使用起来也很简单,只要在项目目录下面简单地执行一下:

$ lein kibit

它就会自动帮你分析代码,它会自动去寻找项目设置中的[:source-paths], [:cljsbuild :builds], [:cljx :builds]路径。

这里是我当时学习clojure的时候写的一些代码,然后我就用这个运行了一下,结果如下:

At src/hello_clojure/abstractions/programming_abstraction.clj:222:
Consider using:
  (repeatedly 3 (fn [] (rand-int 10)))
instead of:
  (take 3 (repeatedly (fn [] (rand-int 10))))

At src/hello_clojure/abstractions/programming_abstraction.clj:253:
Consider using:
  (vec (map identity [:garlic :sesame-oil :fried-eggs]))
instead of:
  (into [] (map identity [:garlic :sesame-oil :fried-eggs]))

At src/hello_clojure/abstractions/programming_abstraction.clj:260:
Consider using:
  (set (map identity [:garlic-clove :garlic-clove]))
instead of:
  (into #{} (map identity [:garlic-clove :garlic-clove]))

At src/hello_clojure/basic.clj:35:
Consider using:
  (inc 1)
instead of:
  (+ 1 1)

At src/hello_clojure/basic.clj:36:
Consider using:
  (inc (+ 8 3))
instead of:
  (+ 1 (+ 8 3))

At src/hello_clojure/basic.clj:48:
Consider using:
  (inc hello)
instead of:
  (+ 1 hello)

At src/hello_clojure/basic.clj:283:
Consider using:
  (.toUpperCase "caterpillar")
instead of:
  (. "caterpillar" toUpperCase)

可以看出给我的建议还是很不错的。

当然了,kibit也可以对单独的文件或者多个目录进行分析,只需要执行:

$ lein kibit path/to/some/file.clj #or
$ lein kibit path/to/src/ #or
$ lein kibit path/to/src/clj/ path/to/src/cljs/util.cljs some/combo/of/files/and/folders.cljx

返回值

如果kibit没有给出任何建议的时候会返回0,否则就会返回1,这个就很适合我们做自动化测试的时候来使用。

我们还可以配合lein-auto当文件改变的时候自动执行kibit,不过我感觉这样还是蛮麻烦的,都是写好代码以后统一执行,不会一直盯着terminal看。

自动替换

可以让kibit执行的时候自动帮我们替换掉建议部分的代码:

$ lein kibit --replace
# 或者交互式替换
$ lein kibit --replace --interactive

输出报告

kibit可以自动把建议部分输出成markdown文档,这样的话我们还能够通过自动化工具在每次提交了代码以后发送邮件文档来给别人看。

集成进Emacs–kibit-helper

我都是在Emacs下面写代码,所以很希望能在Emacs里面直接使用,而不是要切换到terminal里面。有了kibit-helper这个插件以后我们就可以在Emacs下面直接分析代码了。

M-x kibit
M-x kibit-current-file
M-x kibit-accept-proposed-change

直接运行上面的某一个命令就可以直接分析代码,很方便。^_^

更新历史

2018/10/09

  • 初稿