Clojure世界:静态代码分析
项目主页:https://github.com/jonase/kibit
使用:
1.安装lein插件:
2.在项目的根目录运行
kibit会分析项目里所有clojure源码,每个namespace分别分析,例如我分析clojure-control的输出:
== control.core ==
[186] Consider (zero? (:status (ssh host user cluster (str "test -e " file)))) instead of (= (:status (ssh host user cluster (str "test -e " file))) 0)
== control.main ==
== leiningen.control ==
[null] Consider Integer/parseInt instead of (fn* [p1__61444#] (Integer/parseInt p1__61444#))
[null] Consider Integer/parseInt instead of (fn* [p1__65254#] (Integer/parseInt p1__65254#))
显然,kibit一个一个namespace分析过去,并且按照规则对它认为有问题的地方打印出来,并提出建议。例如这里它建议我用
目前kibit大多数是这类代码风格上的检查,还没有做到类似findbugs那样更丰富的检查,例如NPE异常检查等。此外kibit还提供反射检查,任何有反射调用的地方都给出警告。
kibit是基于core.logic实现的,它的规则都放在了这里,通过defrules宏来定义检查规则,源码中对算术运算的规则定义:
[(+ ?x 1) (inc ?x)]
[(+ 1 ?x) (inc ?x)]
[(- ?x 1) (dec ?x)]
[(* ?x (* . ?xs)) (* ?x . ?xs)]
[(+ ?x (+ . ?xs)) (+ ?x . ?xs)])
第一个规则,任何对类似(+ 1 x)的代码,都建议替换成(inc x),后面的与此类似。理论上你也可以自定义规则,并提交给官方。总体上说kibit仍然是比不上findbugs的,期待未来发展的更好。
建议继续学习:
- Clojure世界:Http Client (阅读:2656)
- Clojure世界:XML处理 (阅读:2535)
- Clojure世界:API文档生成 (阅读:2383)
- Clojure世界:文件IO (阅读:2345)
- Clojure世界:如何做性能测试 (阅读:2320)
- Clojure世界:使用rlwrap增强REPL (阅读:2207)
- Clojure世界:单元测试 (阅读:1931)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:dennis 来源: BlogJava-庄周梦蝶
- 标签: Clojure 静态代码
- 发布时间:2012-03-25 20:51:32
-
[902] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[56] 整理了一份招PHP高级工程师的面试题 -
[55] Innodb分表太多或者表分区太多,会导致内 -
[53] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] CloudSMS:免费匿名的云短信 -
[52] 海量小文件存储 -
[52] 全站换域名时利用nginx和javascri -
[51] 用 Jquery 模拟 select -
[50] 分享一个JQUERY颜色选择插件
